Hi, I'm Damien....

Hi, I'm Damien. I've been in the software development industry for over 20 years - rarely far from code - and I still don't know how to write quality software.

I don't know what junior developers think the life of experienced developers is like. I also don't know how other experienced developers think about their code.

I feel like I should be able to build perfect systems, or at least systems where imperfections are limited to certain contexts.

Let me try to describe how this works in my head.

If you ask me to write you a function that adds two numbers together and returns the result, I'm pretty sure I could write that almost perfectly. Something like:

(a: number, b: number): number => a + b;

However, if you ask me to build, say, a banking application, I can pretty much guarantee it will not be perfect. It might even be a long way from perfect.

Somewhere between the simple and complex examples things change.

But why? Why is it so difficult to write perfect software? Why is it so difficult to write good software?