Michael C. Feathers's Blog
July 11, 2023
Generate from Constraints
As society deals with the broader implications of generative pre-trained transformer (GPT) technology, developers are trying to understand how it will impact software development. While there are a wide variety of ways to leverage it, the easiest, and most common, is code generation.
Today, there are a number of GPT-based tools that analyze comments and code and suggest completions as you type. You can also prompt them to generate or transform code. In either case, you can choose to accept the ...
April 6, 2023
(Possible) AI Impacts on Development Practice
We can’t accurately predict AI’s impact but we can explore some possible disruption points.
Source Code:Currently most software systems are developed using source code – a human readable, (hopefully) deterministic specification of system behavior. Development tools that allow end-user programming often bypass the need for source code by using record/playback and visual programming-style interaction modes. When behavior needs to be altered, a source code representation is useful. It aids syst...
August 23, 2021
Gateway Teams
One of the things that is hard to appreciate in complex systems is path-dependence — the fact that most systems have memory. What we see today is a consequence of what came before. This is a very simple thing to say but even when we know it, we forget it and we don’t really think about its ramifications. If we want to change things, it helps to be upstream of the change. The earliest decisions are often the most significant ones. The things we have to react to are often most determinative of ho...
March 13, 2021
System Personas and Design Integrity
It’s taken me a while to appreciate Edsger W. Dijkstra. I had a professor in college who used to comically refer to him as “fearless leader” whenever he mentioned some piece of bombastic wisdom from him. But, beyond the bombast, Dijkstra’s contributions to computer science and software engineering were seminal. Even though I didn’t pay as much attention to his ideas as I should’ve, they influenced me indirectly and one of them led me to ignore some avenues of thought that I wish I’d pursued earl...
September 22, 2020
Unit Conversations
There are many ways to look at unit testing, but one of my favorites is to see it as an attempt to have a REPL in languages that don't have one.
When you have a REPL, you can call a function and learn how it works interactively. You get immediate feedback—you can have a conversation with it. In dynamically-typed languages this is easy. Most of them have a REPL. In statically-typed languages it is harder. The compiler needs to perform its checking. In the worst cases it has to check across a tr...
December 3, 2019
Scaling and the Friction of Dimension
If you’ve been in software development for a while, you know that small web applications are ill-suited for massive load. I’m writing this a few days after Black Friday in the US. This year, another large retailer had a site outage, losing tens of millions of dollars in expected sales. The retailer definitely didn’t have a small system, but it is easy to imagine that if their possible load had been much smaller, the system could have been simpler and everything would have gone ok.
Over the...
November 24, 2019
The Simulation Argument and the Simulation Barrier
I can’t recall when I first heard Nick Bostrom’s Simulation Argument, but I know that it was a long time ago. It seems to resurface in the popular consciousness every few years — often when it is tied to the plot of a movie, or when a celebrity or entrepreneur makes reference to it.
The core of the argument can be found in the abstract of Bostrom’s original paper [1]:
This paper argues thatat least oneof the following propositions is true: (1) the human species is very likely to go extinct...
September 11, 2019
Socio-Technical Seeing
In conversations about software development, I often ask people whether they’ve heard of Conway’s Law. It’s a doorway to a richer conversation. We can talk about the dynamics of design — how our environment affects us as designers and how the things that we design become part of that environment in a broad feedback loop. Without this perspective, there’s so much that is puzzling about software development. Often things don’t go as planned. We blame people and processes because we miss the int...
July 16, 2019
Toward a Book of Form
I’m fascinated by correspondence – when we see the same pattern in more than one place, or even a very different domain. A good example is Postel’s Law, sometimes known as The Robustness Principle. Postel's Law states that when you are designing components in software you should design them so that they are open to accepting many kinds of input yet careful about what they produce. It makes connection easier. Larry Wall pointed out that the same advice can be useful in social systems. For exam...
June 20, 2019
Groups Are About The Other
One of my favorite essays from the early 2000s is Clay Shirky’s A Group Is It’s Own Worst Enemy. It describes a dysfunction of on-line communities that is very familiar to us now in the age of social media.Communities often start as free spaces, but eventually chaos and harassment appear. Once they do, quite a bit of the group’s activity shifts toward rule setting and enforcement. Shirky described this process in pre-social-media spaces like The Well, but anyone who has paid attention to Twit...