What’s your software development New Year’s Resolution for 2018?
, I’m going to be giving two things a big push, starting tomorrow:
1. Techniques for producing high-integrity code
This has been my pet topic for the best part of 20 years. Ever since I started contracting, I’ve been shocked at just how unreliable the majority of software we create is. Especially because I know from practical experience that the techniques we can apply to produce software that almost never fails are actually quite straightforward and can be applied economically if you know what you’re doing.
I’ve been banging the drum for quality by design
ever since, but – to my immense frustration – it never seems to catch on. Techniques like Design By Contract, data-driven and property-based testing, and even good old-fashioned guided inspections, are perfectly within reach of the average dev team. No need for Z specifications, proofs of correctness, or any of that hifalutin malarkey in the majority of cases. You’d be amazed what’s possible using the tools you already know, like your xUnit framework.
But still, two decades later, most teams see basic unit testing as “advanced”. New tools and technologies spread like wildfire through our community, but good practices catch on at a glacial pace.
As we rely on software more and more, software needs to become more reliable. Our practices have lagged far behind the exponentially increasing potential for harm. We need to up our game
So, in 2018 I’m going to be doing a lot of promoting of these techniques, as well as raising awareness of their value in engineering load-bearing code
that can be relied on.
2. Continuous code inspections
The more code I see (hundreds of code bases ever year), the more convinced I become that the practical route to the most maintainable code is automating code inspections
. Regular code reviews are too little, too late, and suffer the economic drawbacks of all after-the-fact manual ad hoc testing. Pair programming is better, but it’s a very human activity. It misses too much, because pairs are trying to focus on too many things simultaneously. Like code reviews, it’s too subjective, too ad hoc, too hit-and-miss.
For years now, I’ve been in the habit of automating key code quality checks so all
of the code can be checked all of the time
. The economic argument for this is clear: code inspection is just another kind of testing. It’s unit testing for code quality bugs. If testing is infrequent and arbitrary, many bugs will slip through the net. Later code reviews may pick them up, but the longer maintainability issues persist, the more it costs to a. live with them until they are fixed (because they make the code harder to change), and b. fix them.
Dev teams that do continuous automated inspection tend to produce much cleaner code, and they do it with little to no extra effort. This is for the exact same reasons that dev teams that do continuous automated functional testing tend to produce much more reliable code than teams that test manually, and take little to no extra time and effort to achieve that. Many teams even save
time and money.
To be honest, automating code inspections involves a non-trivial learning curve. Devs have to reason about code and express their views on design in a way many of us aren’t used to. It’s its own problem domain, and the skills and experience required to do it well are currently in short supply. But the tools are readily available, should teams choose to try it.
So, a significant investment has to be made to get automated code inspections up and running. But the potential for reuse of code quality checks is massive. There’s just one teeny obstacle: we have to agree on what constitutes a code quality bug, within the team, between teams, and across dev communities. Right now, I have some big
issues with what the developers of some code analysis tools suggest is “good code”. So I switch off their off-the-peg rules and write my own checks. But, even then, it pays off quite quickly.
Anyhoo, those are the two things I’m going to be focusing on in 2018. Wish me luck!
Posted 16 minutes, 21 seconds ago on December 31, 2017