Introduction
Turn and face the strange
This issue is called “changes” for a couple of reasons: firstly and most directly, the late goblin king David Bowie was amazing. Secondly, there’s a bit about managing requirements, a bit about monitoring delivery, and a bit about retrocomputing in here: lots to do with changing.
Thirdly, this issue comes out one month before I change jobs, and we need to understand the impact of that on this newsletter. I will be going into a software engineering author role, so doing a lot of writing for the day job. I definitely will not be doing video streaming any more, and will put the podcast on hiatus too. My current plan is to carry on with this mailing list, mostly in the “around the web” section commenting on interesting articles. Also to expand the commentary here from one-paragraph riffs to longer responses; there will be fewer blog posts at sicpers.info per fortnight but longer writing here.
I’m very much writing this newsletter for you to read more than for me to write though, so please let me know what you would like to get out of it.
Writing
More detail on software requirements
I gave a talk at AppDevCon this week about software requirements. This article dives into one part of the talk in more detail.
Why mock objects aren’t popular this week
I look into reasons why the pendulum might have swung back against using mock objects.
Video
Episode 41 — Ta-ta for now!
As mentioned in the intro schedule and work changes mean I have to adapt my software engineering outreach lifestyle. Unfortunately the streams have to go on hiatus—particularly this one as GNUstep is very similar to a proprietary library developed by the new employer.
In this episode, Steven and I have a conversation with the viewers in chat. We talk about the best aesthetics in computer design, Conservancy’s #GetOffGitHub campaign, and what we’ve achieved in 18 months of stream.
Audio
Episode 54: professionalism and responsibility
Some people think programmers should be paid more and given more freedom. I investigate what they should do to enable that.
Around the web
Don't let dicts spoil your code
This simple advice is part of a wider pattern: primitive obsession. When reaching for a basic value type or data structure, ask what is this being used to mean? Should I instead represent that meaning, rather than its storage?
Undefined behavior in C is a reading error
Many people with deep experience in C have experience with avoiding nasal demons. I have warned C programmers about nasal demons. Creators of post-C programming languages have used the threat of nasal demons as a reason to prefer their own wares.
Nasal demons weren’t real. The C standard at the time gave a range of permissible responses to UB, all of which were entirely reasonable.
Old-school blogging, retro computers, and decentralisation
I love my old computers, but as Andre Garzia points out it’s hard to use them on the interwebs. That’s not (for the most part) because the media is too complex: obviously my Amiga is not going to broadcast to Twitch but the only reason it can’t manage this mailing list is because the cryptographic algorithms haven’t been backported to let it connect to a recent HTTPS server. So, Andre says, decouple the service from HTTPS.
Back in the early days of the web, most RPC services available over HTTP were also shared over something else: IIOP for example. Email used to be accessible via a choice of protocols: webmail over HTTP, IMAP, or POP (my university mail service additionally supported NNTP). If we get back out of thinking “internet means HTTPS”, how many more computers, and people, can we reach?
“Batteries-Included” vs “Bloated”
There's an interesting trade-off being explored here: if a platform does everything then it is seen as heavyweight and bloated; if it doesn't do something then it is missing that key feature.
The Python language has gone through an evaluation of this trade-off. Originally it was batteries included: anything you wanted to do in Python was available in the standard library. Over time, bits of this standard library became unmaintained, or no longer represented best knowledge of the domain, and tying updates to releases of Python slowed down fixes to these important parts. Therefore “dead batteries” are being removed to slim down the standard library and help programmers find supported third-party libraries.
The linked article though is about web browsers: browsers are basically all-bloat because they are a small SGML document viewer with a very large application runtime attached. Browser apps are an acknowledgment that none of the pre-internet platform vendors managed the transition to an all-online world well enough to “win” the platform wars: a second system was needed to paper over the cracks.
DORA Metrics: the Right Answer to measuring engineering team performance
“What metrics should I use to measure my engineering team’s performance?” Believe it not, there is a Right Answer: the so-called DORA metrics.
Those metrics are: deployment frequency; lead time for changes; change failure rate; and mean time to recovery. I remind you that “our highest priority is to satisfy the customer through early and continuous delivery of valuable software”, and note that this set of metrics only measures rate and success of delivery.