今日推荐英文原文：《7 Ways To Make Software Developers Happy》
今日推荐英文原文：《7 Ways To Make Software Developers Happy》作者：Semi Koen
7 Ways To Make Software Developers HappyWhat makes software developers happy? There is no silver bullet that answers this million-dollar question! Retaining top talent in this fast pacing world is imperative! When sleep pods, ping-pong tables, personal chefs and other fancy perks do not do the trick, we really need to think hard on how to please them and promote their engagement and motivation.
In this article, I will cover the drivers that have mostly contributed to my (work) happiness in my fifteen-year I.T. journey, as well as the ramifications and suggestions on issues I faced, so if you are a team lead, manager, or entrepreneur, it might give you some ideas on how to keep your team content and committed!
❶ — Use the best gear money can buyThis is definitely number 1 in my list. There is nothing more frustrating than opening the project’s code, compiling it, or running a test locally and having to wait more than a few seconds for it to come back. Developers work in haste, so any ineffective tools that delay them, even in the slightest, are a big constraint for their happiness.
There is a balance between having top-end machines (can be an overkill) and low-end ones (these clearly obliterate performance) but having enough memory, CPU and disk space/speed (SSD, pretty please!) are the three most important factors to preserve not only the developers’ sanity, but also the long-term cost for the company. Multiple monitors and productivity tools are also fundamental to increase their efficiency.
These small increments of time wasted here and there, may add up to an hour per week (maybe less, but most probably more), but if you consider the total amount of hours spent over a year, per developer, multiplied by the hourly rate, most investments of this sort justify themselves on purely financial grounds.
So do it… upgrade their machines, get them an extra monitor and provide them with the paid versions of the productivity tools! You would not expect an orchestra to perform with mediocre instruments, why do developers have to use outdated and sluggish computers?
❷ — Enable deep focusIt is anecdotal how software development requires focus.
Deep, undivided, intense focus.
Getting in the zone with no interruptions and limited background noise is essential in order to produce elegant code. A small distraction and the train of thought is lost. Unfortunately, the relatively recent trend towards open-plan offices guarantees noise and all these carefully placed ideas in a programmer’s mind are gone. In my experience, the concept that open-plan offices enhance communication is flawed:
- some people refrain from having discussions at the desk all together, because they know that talking will disturb their colleagues around them
- some others do not mind being on the phone or hold meetings at the desk, but they generate resentment among their ‘neighbours’. The latter often use noise cancelling headphones which means it is much harder to get their attention even if there is something that might genuinely need their input.
? State of Flow:
Positive psychologist Mihály Csíkszentmihályi, describes a state of flow as "Being completely involved in an activity for its own sake. Time flies. Every action, movement and thought follows inevitably from the previous one, like playing jazz. Your whole being is involved, and you are using your skills to the utmost".
To find out more, please watch this extraordinary TED talk:Flow, the secret to Happiness.
❸ — Embrace flexible working hoursA flexible work setup is a must-have. That includes all the old and new buzzwords like remote working, flexi time, telecommuting, compressed work weeks, digital nomad (too extreme? ?).
Standard office hours do not fit everyone. Some developers work best at 7am, some others at 7pm and others (the night owls amongst us) at 1am! International talent might be visiting their home countries for a long period of time. Moreover, family commitments (especially childcare), or various lifestyle choices (degree completion, side hustle etc) can preclude several developers from working the expected 9 to 5. However, having a secure VPN connection, real-time collaboration platforms and team messaging applications in their fingertips means that everything can be accomplished at a distance.
While the benefits on the individual are strongly pronounced, the impact on the company is not always so clear and some ‘brushback’ arguments claim that flexible hours cause unreliable results and stifled teamwork due to less physical presence. The key thing here is to be diligent with task estimation! For example, if an I.T. resource can deliver 10 story points in a two-week sprint, it doesn’t matter when this contribution is made as long as it is completed within the timeframe.
As a compromise, in order to enhance the team communication, core hours that everyone is online can be agreed (e.g. 11am to 3pm) and beyond that each developer can manage their own time — within reason obviously! For instance, if there is a support task that needs to be completed at a specific shift, it should be adhered to.
❹ — It’s a burn-down, not a burn-out!Projects have deadlines — and sprint goals spill over! This is a fact! And although the delivery manager is on top of the planning and the looming milestones, sometimes there is no way around the fact that everyone in the team has to put long hours to get things done and release the new feature to production. Within reason, this is okay and all the devs that work in commercial projects expect this to happen once in a while.
Not withstanding that this rhythm is not sustainable, some managers get used to the increased output and the faster delivery pace and they take it for granted in future sprints by overcommitting to unrealistic goals. What is more, the team starts burning out, which not only has significant effect on their health, but also causes resentment and job dissatisfaction.
“Give an inch and they will take a mile”As a leader to keep the team’s morale high you need to respect their work-life balance. If you ask your devs to burn the midnight oil working overtime to meet a tight deadline, please make sure you are not being this demanding consistently.
? Autonomy - Mastery - Purpose:
I recently read Daniel Pink's new book: 'Drive: The Surprising Truth About What Motivates Us'.
It made me realise that motivation is directly affecting our work-happiness. Small wonder then, that the following 'happiness' factors (5, 6, 7) match Pink's motivation trifecta.
To find out more, please watch another fabulous TED talk:The puzzle of motivation.
❺ — EmpowerAutonomy at work is a really important aspect for me and the more my career was growing the less willing I was to compromise on having a degree of freedom to complete my tasks or be able make decisions. Like me, most of the developers enjoy forming opinions and having independence to call the shots.
So express confidence in your team’s capacity to make decisions: involve them in the estimation process, ask them to propose solutions, consult them when a choice is to be made. You will be surprised that they tend to meet the timelines they have set for themselves, the solutions are creative (they are known for their problem solving skills after all) and also the suggestions are very well thought after. It is also important not to micromanage them — this is a spirit killer!
There needs to be a balance between autonomy and structure. So instead of telling your team how to do their job, just set the strategy and give them a framework within which they can make their own choices. For example, set the goals, deadlines and benchmarks and then allow them to define how they will accomplish the goals. This leaves you to focus on the big-picture and the managerial high-level ‘stuff’ and gives the developers the autonomy to design their own tasks.
It is a win-win situation!
All it takes is a belief that people are fundamentally good — and enough courage to treat your people like owners instead of machines. Machines do their jobs; owners do whatever is needed to make their companies and teams successful. — Laszlo Bock
❻ — Promote Continuous LearningIf you have been following my articles, you know my views on the importance of continuous learning, and developers understand it too! Playing off the concept of mastery, software engineers love new technologies and keeping abreast of modern ideas. New tools, frameworks and paradigms are constantly established, but some managers refrain from letting them try new things and fear any change of the existing status quo. This can lead to a stagnant culture where developers lose their spark of curiosity. As a result, the codebases become really difficult to maintain, ugly to read and expensive to support. Eventually, your top talent will leave and you will have trouble finding anyone who is willing to work on obsolete brownfield projects.
As such any investment on your team’s learning is money well spent! Do send them to conferences and courses, buy books, get them a subscription to learning resources, you name it!
Furthermore, it is a good idea to give your dev team time and space to skill up before any new project starts. A proof of concept in a new technology can save a lot of time and money in the organisation and the modernisation of the software ecosystem has become a pre-requisite these days. Another easy way to excite the developers is to encourage them to build DevOps tools using languages, databases or frameworks that differ from your normal stack.
Finally, you should not underestimate the importance of task-shifting. Repeating the same work over and over again is boring and developers feel like they do not improve their skills. If you let the task rotate within your team even if it takes longer at the beginning, it mitigates that constant pain-point. Being on L3 Support (that dreadful S-word!) is a good candidate for rotation.
❼ — Instil a sense of purposeThere is no greater feeling than when you realise your work makes a difference. Small or big — it doesn’t matter! It can be small quick wins: e.g. create a new tool which automates the regression testing, or increase the testing coverage, or improve the performance of a long running process. Or it can be big achievements: new released feature gives the business a capital gain of a few million dollars. Either way, do not forget to celebrate your successes. Be specific too! A praised developer is a happy developer!
Programming is a labour of love! A strong correlation between purpose and craftsmanship is the developers’ tendency towards perfectionism and pride for the end product. As their manager, you need to respect this behaviour and give them time to write unit and BDD (Behaviour Driven Development) tests and also allocate some extra time for refactoring and code optimisation. This perfectionism trait highlights the developers’ sense of ownership and recognising their efforts will only make it stronger!