I’ve been working in software development for a solid 15 years now, and I’ve seen all sorts of projects, and developers.
While software craftsmanship is talked about a lot, and quite often seen in job ads; one thing often left out is pragmatism. In fact, I’ve seen software craftsmanship taken so far, that it has killed projects, and products.
This is not a post to say craftsmanship is bad, I am the first to admit writing good, clean code is very important for the long term survival of a product. There is value in good, clean code without a doubt. Unfortunately, I see it very often, developers over think a solution, or try to flex their “technical muscles”. What results is an over-engineered, or overly complicated solution.
Pragmatic – Dealing with things sensibly and realistically in a way that is based on practical rather than theoretical considerations
Stepping back a bit – Our job is to solve problems, in a cost effective manner.
Not to use the latest technology, or patterns to build your CV. It isn’t to use CQRS, Event Sourcing or Docker because it is cool. And not to mention over designing, products for every edge-case up front.
No one can design the perfect solution up front. An idea I always try to drive through teams I work with, that has served me well – deliver quickly, and leave time to iterate.
A question I always ask during design reviews is – “Do you need it?”. At times it could be a pattern I am questioning, a framework, or technology. I’ve even done it to automated tests.
If the team cannot outline value a choice is going to provide, it shines light on it very quickly. It isn’t to push back, or cut anyone down – sometimes I use the question to ensure the team understands why a choice was made. As we all know – there are no silver bullets.
And a reminder – Tests aren’t the only thing that will sustain the software over the years, it is simplicity. Many developers will work on the code base, and our job is to make it easy to understand, and safe to modify.
The “pragmatic craftsman” as I call it, is one that not only builds well crafted software, but focuses and delivers business value iteratively. They cultivate raving fans, should be egoless, humble and most of all, focus on the outcome.
I enjoy working with talent developers, but I love working with pragmatic craftsman.