Your Guide to Becoming Responsible and Educated Software Developer
A friend of mine with a health problem went to a doctor.
The doctor concluded that a surgery is needed to solve the problem.
The doctor described a couple of different methods of how to perform the required surgery.
One of the methods was well known and proven to work in most cases, but the doctor hesitated to go with it. He then complained to my friend that he was using this method for the last 15 years, he’s so bored of using it and wants to try something new, fresh and cool.
The doctor told my friend about the conference that he visited last month where everyone was talking about this new elegant way to do the same surgery that my friend needed. The method was invented only a couple of years ago, but the community of surgeons was buzzing with the excitement, and so was my friend's doctor, who decided to give the new method a go.
Except that my friend decided to go to a different doctor.
How is this situation even possible in real life?
It’s not. Thankfully, this is not a real-life story.
But replace a friend of mine with a business that you know and the doctor with a software developer - and you’ve got a real-life story.
I’ve noticed that many software development choices are driven by the amount of fun that they bring to software developers. I call this approach Fun-Driven Development or FDD.
Fundamentally, humans want fun and don’t want responsibility. We’re trying to have as much fun as possible while avoiding responsibility as much as possible in most things that we do in life, including software development.
And the younger we are - the more fun and the less responsibility we want. The older we get, the more responsibility we’re willing to put up with and the less fun we’re willing to pursue.
The common story of a software developer is: “I’ve started playing computer games and then decided that I want to create my own game and discovered that coding is fun.”
Fun is the prime motivation for getting into software development.
This motivation is then fuelled by the modern media narrative that "coding is fun” and that most young people should consider becoming software developers. This is how businesses are trying to solve the problem of the shortage of software developers. It’s not a secret that today the supply can’t meet the demand.
There’s a moment in the life of most hobbyist software developers when their phone rings and they’re being recruited to become professional software developers.
Now they're paid to have fun. This is the best!
Except there’s one major problem: a mismatch of motivations.
Software developers are motivated by fun and businesses are not.
Businesses that hire software developers don’t want fun. They want to achieve their business results with the help of software development. No fun required.
Yet businesses don’t have much choice but to offer fun in order to attract software developers: "join our company and work in the offices that are fun to work in", "join our company and work on the problems that are fun to solve", "join our company and work with technologies that are fun to use".
And now we have a situation where software developers have the leverage. They're in control of what technologies businesses use, and they make those choices based on what they want to work on, or how much fun they want to have.
It’s easy to justify a tech decision when the chosen tech is "hot" and everyone’s talking about it. If everyone’s talking about it - it must be good, right?
If the business decides to go with something less popular and not much fun, software developers have the option to leave this business and join the one that uses the desired tech.
So companies end up choosing tech not because it’s the best tool for the job, but because it’s the best tool for attracting software developers.
One other interesting aspect of human psychology - we get bored easily. We want new things. New things are fun.
And so sometimes we invent new tech and then businesses have to adjust and reinvest their resources into adopting this new tech. The evidence that this new tech is actually better than the current one that business uses is not required.
The core problem is the damaging expectation that professional software development is supposed to be fun.
No, it’s not.
It’s a job that requires: 1) serious continuous education (SCE) and 2) serious continuous responsibility (SCR).
The fun aspect of it is a nice bonus, but not more than that.
Serious continuous education means learning from people who’ve been doing it for a long time and have a lot of experience. As a professional software developer it’s your responsibility to continuously educate yourself: read books, watch courses, practice on your own personal projects.
Serious continuous responsibility means you guarantee the quality of your work. This requires the discipline of thinking carefully about the problem before attempting to solve it, or iterating on the solution before commiting to it. But most importantly - choosing the best tools for the given problem - even at the cost of not having fun using them.
It also means taking responsibility for bugs discovered later in your code.
What businesses really want is more educated and disciplined software developers who are not motivated by fun. But if you take fun away, you should compensate it with some other strong incentive - higher pay or additional benefits.
We should establish "the Oscars for software developers" awards where every year we celebrate the best achievements in software development across different industries. Nominated by businesses and judged by experts in the industry.
My practical step by step guide is coming soon.
P.S. I was invited to be a guest on Inside iOS Dev podcast. Listen to The Problems of "Fun-Driven Development" with Art Fedosejev episode.
1st edition published on the 24th of March 2018
Copyright © by Artemij Fedosejev