Are you a software developer? If yes, what do you think determines your happiness related to a certain job?
Are you someone who employs or contracts a software developer? If yes, what do you think determines his/her happiness related to your job?
This is a topic that’s been brewing in my mind for quite some time now and I think now it has brewed to the point where I’m ready to put my opinion in exact words.
I’ve thought long and hard about the drivers of satisfaction and happiness of software developers, probably because I’m one for more than half a decade now. What I’ve found is that my opinion is pretty non-standard and deviating from most of the opinions in the IT world. So bear with me, you’re in for a brain picking.
So what is a job and what is work?
If you look them up in the dictionary you’ll find that these terms are largely synonymous, but I want to give my own temporary definitions of them in the context of driving software developers’ happiness for the purposes of this post. One more thing to note is that usually employees and contractors/freelancers don’t have the same job options but to keep things general, I still want to put them in the same basket as just software developers.
A job encompasses everything that is related to what the workers actually do (physically and mentally) but is not the doing itself (the external motivators).
- financial compensation (salary, price)
- the employer (company, individual)
- benefits (insurances, subsidization, free stuff, lent stuff)
- working hours (full-time, more than full-time, part-time, flexibility?)
- workplace (location, physical organization, ping-pong tables?)
- coworkers (friendliness, helpfulness, support?)
- support for learning (seminars, conferences, courses)
As you can see in my definition of job, a job is a general doing of any work and is not specific only to the job of doing software development.
Work is where things get specific. The work of developing/engineering software is different than any other work. What a software developer’s work encompasses:
- the client (the employer or someone else)
- the product or service significance in the world
- the level of quality of the code
- the required tools to be used
- freedom to experiment?
- freedom and easiness to change things?
- learning new things?
- using modern technologies and practices?
- difficulty in debugging errors – directly proportional to the level of frustration endured during the activity
- automation of often executed processes
- freedom to fail and make mistakes (ensuring they won’t surface to the actual product/service)
- clear and optimized development processes and practices
- appropriate introduction and documentation
My theory is that people in IT (employers and workers) too often overestimate the job part as the driver of a software developer’s happiness and grossly underestimate the work part.
The rockstar software developer
What is actually a rockstar software developer? A term so popular in the tech industry will probably get about 15 different definitions if you ask 10 different people. Most of them will focus on the developer’s ability or the knowledge of technologies. If you ask me, I’d give you my rather simple definition: A rockstar software developer is a person who doesn’t require external motivation to develop software.
- they don’t need someone to pay them money to develop software,
- they don’t need someone to pressure them with deadlines to keep them working,
- these are people that probably did software development long before they started making money off of it, would do it or are doing it for free right now and will probably do it for free in the future,
- these people probably got excited when they first witnessed the power computers posses when they saw the output of a program they wrote that prints out the first N prime numbers,
- these people know that there’s so much yet to be done by developing software.
These people will greatly appreciate everything the employer has to offer regarding the job part. But, they’ll appreciate the improvements in the work part more. If the developer feels he/she doesn’t have enough freedom granted to modify and try to improve a project, is asking for a raise going to fix the problem? From the employer’s perspective, is offering a raise a solution? Is free food going to make up for the frustration endured during endless hours of debugging poorly designed code? Are the money and time spent in learning courses and attending seminars even worth anything to anyone if the developer has no opportunity to use those modern technologies in the projects he/she works on?
No company, no employer, no project, no team, no individual software developer is or ever will be perfect. As with everything else in life, HAPPINESS is determined by only one general factor and that is PROGRESS. No issue is big enough that can’t be solved if the necessary steps are taken towards solving it. Also, every neglected issue will just grow with time not spent addressing it.
Software developers, focus on your work part. It’s your biggest driver of happiness and motivation while working. Look for work on products or services that you can improve and thus improve yourselves in the process. Look for opportunities where you can learn something new everyday. Speak out about the issues or the areas of improvement you see in the work.
Employers of software developers, the quality of your products or services, their usage of modern technologies, the clarity and optimization of your processes, the freedom you give yo your software developers, etc. are much more important factors in determining your software developers’ satisfaction than the other non-work related stuff. It’s your responsibility to take care of the quality of your product or service. Demand and allow constant quality improvement. The better the quality, the bigger the rockstar developers you’ll attract.
How have your experiences on the subject shaped your opinions? I’d be very happy to read them in the comments.