I think I found an empirical way to approach Technical Debt (a term coined on the c2 wiki in the early 2000s) and that is by thinking of technical debt in terms of meta-critical state that builds up in a software system over time.
Meta-criticality is a state of apparent stability that is in fact one bit flip away from sudden change which may lead to a cascade of other equally sudden changes. A lot of natural systems exhibit meta-criticality, for instance it’s important in the study of animal behavior such as bird murmurations and schooling fish.
There is solid…
I was surprised at the reactions to a recent suggestion I made as to which metrics are useful in software quality assurance:
I was surprised that so many people saw the tweet above and immediately asked how to make the measurement in the first place.
I know that measuring rate of change in Git isn’t an activity usually performed by generalist software engineers. But I had assumed a higher level of familiarity in the specialist software-testing community than apparently exists…
A simple way to derive a time series from the Git log is to issue the following command from the root of your Git repository:
git log --format='%ad' --date=iso-local \
| cut -d ' ' -f1 | sort | uniq -c
The time series produced is a plain-text list of integers and days-of-the-year, something like the following (except much longer, since there is one line printed for every day in history that there was a commit made to Git):
You can read down the left-hand side of the list to…
In order to properly test the source code in a Git repository for any abstract definition of “quality,” we need to first establish some baseline measurements of the source code itself. In software QA these baseline measurements are generally called oracles.
In software QA jargon, “oracle” is the general term for the methods we use to evaluate the correctness of a test or suite of tests. When someone looks at your test results and asks “how much confidence do you have in those test results?” whatever you answer them with, is an oracle. …
One of the things that absolutely destroys entry-level programming applicants is the fear that they won’t be able to do “the job” once hired. This fear is (almost always) unreasonable and (almost always) unfounded.
I’ll tell you why.
First, it is extremely unusual for an entry-level developer to be hired and then placed in charge of some kind of complex high-risk project. You’re going to be the most junior and the most recent hire. You’re not going to be in charge of anything.
There are just tons of jokes about how programming interviews are like “show on the whiteboard that…
Technical Debt is a better metaphor once you know that engineers don’t borrow from technical credit cards but rather from technical loan sharks.
In my experience, Technical Debt isn’t clean managed debt like business debt, as it is described in the1990s and 2000s era Agile Software texts that popularized the concept of Technical Debt way back when.
“Mr. Soprano assures me he is different from the other lenders.”
Instead of reasoned liabilities as with business debt, technical debt is an obligation scrawled illegibly on a cocktail napkin. …