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
“Great new feature! I’ve been waiting for this.”
“This will make my life so much easier.”
It was worth it.