A school of clown fish with their symbiote, the sea anenome.
A school of clown fish with their symbiote, the sea anenome.
Photo: Pratik Mehta on Unsplash

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…


See how your code and test coverage has changed over the life of your codebase

A growing plant with live and dead branches.
A growing plant with live and dead branches.
Photo: Jeremy Bishop

I was surprised at the reactions to a recent suggestion I made as to which metrics are useful in software quality assurance:

I thought more people knew how to view the rate of change of their test code versus their application code

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…


Photo: Jack Anstey

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):

 13 1999–04–07
9 1999–04–08
15 1999–04–09
11 1999–04–10
11 1999–04–12

You can read down the left-hand side of the list to…


How to mine data from the git log in order to construct test oracles

Photo by Michael Nöthiger on Unsplash

The Git Log as a Source of Oracles

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.


A cat chews on an expensive Nikon camera. Clearly this cat knows what he is doing. Large text reads: Of Course I Know What I’
A cat chews on an expensive Nikon camera. Clearly this cat knows what he is doing. Large text reads: Of Course I Know What I’

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…


Tony Soprano: protagonist in the HBO series The Sopranos.
Tony Soprano: protagonist in the HBO series The Sopranos.

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. …

Noah Sussman

Software Architect

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store