Summary
While it's never been easier to create software, the tenacity and work required to do so is undervalued.
The nature of coding itself, the fact you are processing information of a problem you likely don't know much about, and human interactions are all making it a hardship.
But geeks are very likely to not paint it as so, because they like it, it's rewarding, and we are surrounded with incredible achievements.
It’s easier than ever to work hard
I'm amazed everyday how much easier creating software has become. If you avoid the trap of adding needless complexity to your app, of course. If you don't need a container, don't pop docker. If you don't need high level interactivity, don't make an SPA. If speed is not the priority, don't code in a low level language. If tailor made SQL requests are not a critical part of your product, an ORM is fine. If your problem has been solved a thousand times, use a lib, a framework, or even a CMS. Also, make.com, Wordpress and Shopify exist.
And yes, the user have way higher expectations, we have more networks, more platforms, a huge stack of abstractions layers and legacy things to deal with, and an explosion of information to deal with.
But we also have huge resources at our disposal, incredible tooling, better languages, and above all, demand, which means money and time poured into IT.
AI alone has changed the way I code and made me twice as productive as before. If I know the problem I need solving, I don't code it. I ask an agent to generate code according to my needs, and integrate it. It's a game changer.
Despite all that, it is still a huge effort to create software. It's work, dedication, tenacity, time and energy.
After all, every thing worth something, is.
Writing software requires tenacity
You can't get good at piano if you stop when it gets frustrating. You can't get a great tennis player if you don't accept to be tired, dirty, or sometimes hurt.
Somehow, people seems to think software is the exception to the rule.
It is not.
Software is amazing because it provides great leverage, meaning it multiplies your little input tenfold. It also looks easy, since you are just sitting on your ass there, cozily drinking your tea gazing at your screen while lofi is playing.
However, to get good at it, a huge amount of practice is needed. And it's been great fun, I enjoyed it a lot. Still do.
But I don't forget how painful it has been, and how much it still is.
It's creating huge abstractions in your head. It’s dealing with interruptions, complexity, systems bathing in unknown behaviors. It's taking thousands of small decisions a day, again, and again, and again. It's solving problems you never encountered after problems you never encountered. It's coming up with solution non stop, then focusing on the bafling errors and non functioning logic with the faith you will find a way. It's reading, learning, surveilling, every day. It's hard, it's exhausting, it's putting all the pressure on you without any reassurance. And it. Never. Ends.
You become a human while: True
, but the block content is regenerated every second and you are supposed to figure what's going on.
It works because you have a tight feedback loop and making mistakes is usually cheap. But you have to stick to it, failure after failure.
There are combinatorial explosions for everything: states, possible errors, user workflow... Plus details, so many details. This means your work is never done, you just decide one day to call it finished, or just to stop.
That's only for the coding.
Now add integration, deployment, testing and you get in a whole new dimension.
A good developer, to manage all this, has created and perfected a vast array of skills. This takes a lot of efforts, on a long time.
Yet most don't recognize this, they will say that what they do is mostly easy. They are blind to their hardship, and the level of their achievement. Imposter syndrome is rampant in our profession.
Still, I wouldn't trade this job for another. I tinkled with my computer before it made me money, and I would still do if I were rich. It's not just fun, the working conditions are amazing. You are literally doing one of the most interesting task in the world from the comfort of your desk. Plus it's well paid, and the result is rewarding, watching what you build take life, take flight.
Add humans in the loop
Funnily, many devs became so because they preferred computers to humans: they are simpler.
It's therefore ironic that the tenacity required to produce software is heavily influenced by the fact you have to deal with people. It's the other though part of the job, and it's not optional, at best you can delegate it to somebody else, sometimes to the community.
You have to deal with PEBCAK, you have to extract requirements and needs from the head of your clients, you have to explain things to the users, you have to sell relentlessly concepts and solutions to those in charge...
You have to navigate the social relations of the people you work with, motivate others, attract, create interest, sometimes sell.
There are dumbs humans, mean humans, entitled humans, buzy humans, scared humans, lost humans, greedy humans, tired humans...
Even without going there, people just have their own life and agenda. And you have to either work with them in the framework of all those or create something that they will insert in them.
You are not an island. People create the dev tools you use, the services you depends for deployment, the forums you are going to promote to, etc.
Not to mention an artist is nothing without its audience. Your software is nothing without users.
You can argue one can do something for its own sake. And alone.
True.
But it's not the vast majority of the human experience, it's the exception.
Again, it's endless. Because human interaction are never done. It's an uninterrupted flow that has no beginning and end. There is always more where it's coming from.
You'll have to keep at it, defend a vision, bring the crowd on board, convince, or ignore the critics. You have to comply with implicit or explicit rules, circumvent some, and fight others.
You'll have to teach, assist, ask for help and embrace judgement.
It's not a dev thing. It's true for anything that matters.
But it's true for dev nonetheless, no matter how nerdy you are.
Information
Computing is nothing on its own. It's just a way to process information.
From the nature and context of the information depends the type of processing you make, and this is one of the key reasons making software is so hard.
You are doing two jobs.
One job is to create the software.
The other is likely to solve the problem of a completely different specialty than yours.
In my career I worked on a software to diagnose malaria. I'm not a doctor. I worked on software to deliver permits for natural park depending on a legal framework. I'm not a lawyer. I worked on a loan pricing engine. I'm not in banker.
But for the software to perform accordingly, you need to develop a good understanding of the field it's going to be used in.
So unless you stick to one industry, specialize in one particular set of issues or create tools for programmers (and even then...), you are bound to kinda learn another job every few years, sometimes more often, while continuously updating your own technical knowledge, in a field that is actually accelerating.
This requires a crazy flexibility, capacity to learn, and stamina.
No wonder burn out is so common among us.
The transparency of effort
If you are a bit autistic, staring at screen for hours calms you down. Going deeply into your thoughts isolates you from this uncomfortable body.
If you are a bit nerdy, learning new stuff, building, playing with the tech for a day is fun.
If you are passionate, scarifying anything for what you are interested in doesn't seem like a cost.
If you are a combination of those, you are also very likely to be super bad at evaluating how much health those things takes from you, how bad you feel and the cause of it.
Devs can be unskilled when it’s about telling how much work they put in things, how much they paid for their result, and extremely prone to evaluate the result of what they produced (which they will judge shitty because of their level of exigence) as the metric of their work.
I didn't do much, so I didn't work much.
It's a half baked beta version with bugs, a tenth of the features I want, terrible design, and brittle code.
So it doesn't count.
We are drowning in amazing quality in this life. The simplest of objects are crazily good. Glasses, lamps, beds, sinks, pens...We became numb to it, it's normal now, the baseline.
Similarly we look at Figma, Firefox, Sqlite, Telegram, Youtube, Github, Baldur’s Gate 3, Blender and we use that to judge our pitiful attempt at producing software. Hell, we already judge harshly the flaws in those.
So when self reporting on our level on effort, pffffff, it wasn't that difficult.
Are you crazy?
Do you know how mind blowing those products are? Those are not common goods, those are Notre Dame de Paris level of achievement. Those are Usain Bolt runs.
Just because you can get them for a few dollars with a bunch of clicks give the impression that it's not absolutely luxurious.
We are riding on yachts every day now, for $7.99. And so we think abundance equal easiness. Our mind is used to equate scarcity and price with quality and labor.
That's how amazing our world has become.
Yet, making software is hard, as building roads and running a restaurant are hard.
Clicking, driving and eating are easy though. And common.
The act of creating in this material world is a hardship, that’s just the nature our existence.
People just stopped realizing how much effort all those things take.
Pause for a moment.
Appreciate the miracle.
I love it!
Wow. What an article! Very poetic and true as far as I know. Thank you for your time and passion.