There are important thinking barriers to cross (break?) in a professional career of a software engineer. They are marked with some sort of epiphanies, for instance:
- "WTF?! I have to work with this legacy code, instead of creating something completely new?"
- "WTF?! How can I troubleshoot that if I don't have access to production DB?"
- "WTF?! I've just wanted to swap lib A for lib B in all projects - it was supposed to take 45 mins, but the chain of dependencies seems to have no end ..."
There's a particular one that is usually very painful & hard to bear at first:
"WTF?! I can't handle this stuff alone, days are only 24h long, it will take ages for a lone wolf."
Yes, you may be awesome, you may weave code like a true codemancer, but up-scaling yourself is freakin' limited. After a short period of denial & grief, you realized you need a TEAM. Forming a decent one (and making it to last!) is a true challenge. And "A players want to play with A players", right?
It gets even harder in these days though, because of:
- the shift in the mindset (and evolving expectations) of the latest generation (aka Millennials)
- and due to economic / social circumstances - in 2015 market belongs to employees (in IT) and they can cherry-pick freely in the plethora of offers
Keeping all that in mind, let's pinpoint some naiveties, misunderstandings & legacy thinking from the past era that are still impeding organizations' ability to form & maintain quality teams (I still mean Software Engineers here - all these below may not be applicable directly in other industries).
People want to know what they'll do & how they'll be doing it
They don't care whether your company is building spaceships in Canaveral (replace it with anything cool or innovative) if in the end it appears they'll be cleaning latrines in Uzbekistan (for the same company). When someone wants me to work for them I want to know precisely:
- what I'll be working with
- with whom
- using what kind of tools ...
- and what are the success criteria
These days no-one buys bullshit like "international brand", "Fortune 500 company" or "the most innovative company in the industry" anymore - give details. Precise. Job(/Role). Description. Without that, no-one serious will apply to your team. And don't set false expectations, people will learn faster than you expect.
People want to have someone to learn from
Software Craftsmanship is a specific job category -> 2 years old knowledge may be absolutely worthless & people HAVE to learn new stuff all the time & keep themselves up-to-date to remain competitive and highly valuable (market-wise). There are various resources to learn from, but humans are still on the absolute top of this list -> if you've got absolutely no-one to learn from in your current place of work, FLEE & BURN THE BRIDGES!
Today it's not only the candidate that has to convince the recruiting people that he's worthy - the recruiting company has to strive as much to prove that it's a good place to develop yourself. If you're surprised that people have higher expectations than just being paid (even if it's a decent salary), you should wake up.
People expect you to tell them how are you going to invest in them
Software engineers are software houses' greatest assets. How do you care about these assets? Do you assume they'll learn stuff just by doing it? How do you expect them staying innovative? How do you support (feed? :D) the passion in them? Do you have any ideas to synergize them, their ideas, their knowledge & energy?
Do you help them to prove themselves as mentors, coaches, evangelists? To build-up pride of performed work? Sense of belonging to a team that has achieved something? Hint: it's not about discretionary bonus or any other kind of appreciation expressed in currency ...
People appreciate sensible approach to the work environment
Do you provide your people hardware, software or other resources that could aid their efficiency? Aren't you too savvy when considering stuff like:
- better laptop standard?
- additional display?
- productivity tools (like JRebel, ReSharper)?
If you're paying someone NNNk EUR every month, doesn't it make sense to spend additional 5% of NNNk once a year to boost his morale & show her/him that you really want to provide the best work environment possible?
People expect being treated as adults, with a decent level of autonomy
Micromanaging is irritating. Especially micromanaging technical stuff by managers who are already too content-free to make the best decisions isn't just irritating, it's deteriorating morale, killing innovation efforts, smashing mutual respect & usually not just generating additional (unnecessary) work, but also causing future problems.
Set clean areas of responsibilities, allow people to pick their tools & architectures. Set tangible outcomes to set the general course & acceptable borders. Communicate the freedom & encourage people to experiment (in controlled environment). Management is not about herding people - but about making sure that everyone's potential is utilized as fully as possible.