Don't Build Salmon Cannons
Written in 2016. Some of the tools and versions here have moved on since.
Today I learned about Salmon Cannons. Salmon have evolved to swim up river to spawn, but the introduction of dams has created a sometimes impossible obstacle for salmon to overcome.
A clever solution has been found in the way of the Salmon Cannon - a slippery tube that sucks salmon over obstacles so that they can continue their journey upstream.
The Salmon Cannon is a solution to a problem that the world found itself in - Salmon could no longer swim upstream because they were blocked by the dams. Human beings - being the creative and pragmatic bunch that we are - found a creative and ingenious solution to the problem at hand.
As developers we're problem solvers, and building the code equivalent of a Salmon Cannon is something that we do on a daily basis.
We find ourselves in the middle of a problem - a challenge, even - and we do what we do best. We code our way out of it. It's natural.

But... on further thought - the Salmon Cannon isn't the ultimate solution. The problem that we were given was How can we help Salmon with their journey upstream - when dams are blocking their way? We've solved that.
But maybe a better approach would have been to stop, and consider the possibility Do we still need the dam, or can we just remove it? Sure - sometimes this is out of the question, but in reality - sometimes this really is the solution.
I see this in development all the time. Developers find themselves a problem - and they try dozens of ways of solving it - never stopping to think why they've found themselves in that predicament in the first place. I've found that so many times the solution to a problem is to change it.
Coding without thought is a hard vice to break - but once you do, you'll find yourself producing solutions that you can look back on and be proud of.
Don't be a Salmon Cannon builder, be a dam destroyer!