Last week I’ve tweeted something a little controversial:
The problem with good software architecture:
Changing code becomes so simple, that it is boring.
I’ve already pointed out on twitter, that I didn’t tweet this to advocate building a mess. This tweet came from a realisation I had after a few days of not so challenging problems at work.
Fun at work
I have the most fun at work when:
- the problem is interesting to me
- I believe in the value of solving the problem
- the problem is challenging
- I can explore different solutions myself
If you have read Drive by Daniel Pink, you’ll find the three ingredients for motivation in this list: autonomy, mastery and purpose.
This list is true for fine-grained tasks like refactoring a specific piece of code, but also for the business itself. I joined Improbable, because my job ticks off every item — especially last year when I started building the Inspector from scratch.
Nowadays the Inspector is in production and used by customers every day. The problem space has changed from building a product to constantly improving it based on user feedback and new technical possibilities.
Having exclusively worked for agencies before, this is kind of new to me. I only know maintenance from frustrating tasks like fixing this bug in a project someone at the agency had to build quickly a year ago. As you can imagine this kind of maintenance was not fun.
This is different though. I entered maintenance mode of a project I’ve thoroughly built myself. From designing the software architecture, choosing the technology stack to designing user interactions and visual elements.
Ups & Downs
There are times with hard deadlines, new possibilities thanks to new backend features or a lot of incoming feature requests. Then working on the product is exciting and challenging.
But there are also times where you have a sprint mostly fixing bugs, adding minor features and refactoring code.
This is normal and something I dreamed of when I was working for agencies. Nonetheless it can be boring at times.
Boring is good
Last week when I had one of those days again I realised something:
Being bored as a programmer can be a really good thing.
It means you’ve done a good job. If adding smaller features to your software is easy and obvious after growing the code base for over a year, you’ve done something right.
If I did a bad job I wouldn’t be bored, I would be frustrated.
Then even small features would be a pain to implement. I would be afraid of touching some parts of the code and the number of bugs in our backlog would steadily increase.
All of this is not the case.
One thing I really enjoy about product work is the direct feedback you can get from customers. For example it might be one of those “boring” days, where I implement an easy feature from the backlog.
It’s not interesting or challenging. There is no big solution exploration phase, because the software architecture makes it obvious and simple. I might not even see the value in it.
But when we release it to our customers and you read something like:
“Great new feature! I’ve been waiting for this.”
“This will make my life so much easier.”
It was worth it.