The Commit Mutex Problem
When I worked at Etsy, the problem of many developers committing to trunk at once was colloquially known as the “commit mutex” problem. A CI system can effectively become “blocked” if too many people commit and trigger too many builds within a relatively short time period. All nodes in the CI cluster are busy but new builds keep getting queued. The resulting “build queue” means that...
Hiring Programmers in New York, 2013
It seems like every week I have a long conversation with someone on the topic of hiring programmers. tl;dr: there are no programmers for hire in New York in 2013. The job market is such that all decent programmers are gainfully employed. In order to hire a developers it is necessary to convince them to leave their current job. This will be true for the foreseeable future. Personally I have...
How to write a bug report
In writing bug reports, I have found it helpful to take the attitude that I am engaged in scientific inquiry in the relatively new field that is software. I’ve gotten the best results when I constructed my communications around bugs in a way that lent itself to application of the Scientific Method (or a rough approximation thereof). Description Of Problem, Steps To Reproduce, and Expected...
More falsehoods programmers believe about time;...
A couple of days ago I decided to write down some of the things I’ve learned about testing over the course of the last several years. In the course of enumerating the areas that benefit most from testing, I realized that I had accumulated a lot of specific thoughts about how we as programmers tend to abuse the concept of time. So I wrote another post called “falsehoods programmers...
Falsehoods programmers believe about time
Over the past couple of years I have spent a lot of time debugging other engineers’ test code. This was interesting work, occasionally frustrating but always informative. One might not immediately think that test code would have bugs, but of course all code has bugs and tests are no exception. I have repeatedly been confounded to discover just how many mistakes in both test and...
Things you should test
A checklist of things that are worth testing in pretty much any software system. …trailing his fingers along the edge of an incomprehensible computer bank, he reached out and pressed an invitingly large red button on a nearby panel. The panel lit up with the words “Please do not press this button again.” ~ Douglas Adams Software systems are complex and as such...
Rapid Infrastructure: Tools You Can Use Even If...
There’s an old joke that goes something like this: Proposition one: all programs have bugs. Proposition two: all programs can be shortened by one line. Conclusion: every program can be reduced to one line of buggy code. Corny, I know ;-;) But hey, there is a point in the life of every piece of software when the entire system consists of one line of code. That time is at...
Intrinsic and Incidental Complexity
There is a very convincing argument to be made that feature-complete software is ultimately more valuable than a readable codebase. That there is more value in what an application does than in how it is put together. Perhaps it is fair to consider architecture, including the comprehensibility of a program as source code, to be of some benefit but still orthogonal to a program’s business...