The Good and Bad of Writing Software

The good thing about writing software is that you can do anything you like. The bad thing about writing software is that you can do anything you like.

Ask 10 different software developers how to design an application and you get 10 different designs. All of the designs can fulfill the Correctness requirements but can vary wildly in the implementation. This is the reality of software development - there is no one way of doing things.

This would also be the case even if more constraints are proposed. For example, asking 10 different software developers to write a web application using the C# language and the ASP.NET MVC framework and an object-oriented style can and most likely still yield 10 different designs that can be very different from each other.

Writing software is a form of creative expression. Software developers don't just follow instructions from a manual or operate a predictable piece of machinery. For the most part, developers can write whatever they want to write as long as business requirements are met in the end.

This flexibility is good for developers who take their craft seriously. They have the power to apply their knowledge of technology and practices to their work, and writing code that is beautiful can be immensely satisfying.

On the flip side, this also makes it easy to write software of low internal quality. It's possible to write software that fulfills business requirements even if it was written badly. Indeed, in most of the production software I've seen, this is the norm rather than the exception.

It also makes it difficult for good developers stand out from the crowd. If Correctness is the only criteria for judging, then there's no difference between Joe who writes spaghetti code and Jane who writes beautiful code.

This has been my struggle for the past few years, and there are other developers I know who have similar struggles. Though we know that investing in our knowledge and expertise will pay off over the long term, it's still difficult when we see other "content" developers gaining a better appraisal or promotion.

That's it for this short blog post. If you have the same struggles as I have, and you have some suggestions, let me know in the comments below!