Why is software development difficult?
There is a reason why developers are usually well paid. It isn't an easy job. But many don't understand why it is like that. In this post, I am not covering challenging education. Education that when you complete it, you are usually a few years behind on technology. I am not covering how fast technology changes. If you are not continually learning, you fall behind very fast. And I won't even cover the thing on debugging, bug fixing, and the whole emotional rollercoaster that comes with it. No, I am covering something that often seems neglected. Software development is not an exact science. It is an art with all its beauty and curses.
Software development is an art
I know this statement might sound weird to many. But suppose you look at the definition of what is art on google. In that case, the answer is the expression or application of human creative skill and imagination. Yes, art is there to enjoy its beauty and emotional power. And you can't deny that an excellent application or a bad one, just like code, doesn't affect us emotionally. Most people think if you are good at math, you can be good at software development. And there are some parallels in the logic area. But that is where it ends. In school maths, you are looking for the result. What is two plus two? In software development, you are looking for the path to result. What gives four? Two plus two. One plus three. Minus one plus five. There are always some restrictions, but there are also multiple solutions, just like in art. You can draw an apple in many different ways. And this might cause you some of worse moments in your carer.
Having multiple possible solutions brings many different opinions. And sometimes yours is different than one from your team members. Usually, a healthy team resolves this. But even in the best of teams, there are conflicts. Maybe your colleague has more experience and thinks a few steps ahead and about the implications of that change. Maybe a team member wants to push some quick, not great code to fix some more significant issues, and you are against it. It might be a writing code you are not happy with to meet clients' deadlines. Yes, it works. But you know it is not right. And you are not happy with it. It all causes you not to feel great at the end of the workday to deliver the project.
Each decision, each change in your code, causes side-effect. Most of the time, it is a smaller one. But there are moments when you find some piece you wrote three months ago. And that part is making your life harder now. A different solution would make the current situation easier. Maybe you are making an architectural decision, and you are not sure which one is better. But you know it affects the future of your project. If you chose the wrong one, will you need to rewrite a big part of the code and lose hours spent on it? It is a significant and stressful decision. Decision because of which you bang your head against the wall late in the night. Either because you have to make it, you are working overtime, late in the night, to choose the right option. Or because you made the wrong one and now you are working overtime to fix it. But you have to go with it and hope you chose the best.
I am not here to discourage you from getting into software development. But there is a reason why it is among the most stable and well-paid jobs at the moment. It comes with a price. But if you love coding and love reaching to thousands and millions of people. Improve their lives, which is the power of software. Go for it. Success makes all those bad moments worth it. It is worth all the stress, work in the middle of the night, work from bed, and the whole emotional rollercoaster. If you love coding, you end up loving those moments also.