ACCU World of Code
-
2026 in the programming language standards’ world
This week I was on a virtual meeting of IST/5, the BSI committee responsible for programming language standards in the UK. It’s been three years since I last reported on the programming language standards’ world, what has been going on? tl;dr: Business as usual, with a handful of active committees. I have been meeting secretary…
-
A Review: Surrounded by Idiots
Surrounded by Idiots: Entertaining, Thought-Provoking, but Don’t Take the Colours Too LiterallyThomas Erikson’s Surrounded by Idiots is one of those books that’s easy to see why it became a bestseller. It’s funny, engaging and full of memorable example…
-
QUERY: We’ve been abusing POST for 20 years
In June 2026, a new HTTP request method, or verb, was introduced. RFC 10008 describes Query as:A QUERY requests that the request target process the enclosed content in a safe and idempotent manner and then respond with the result of that processing. Th…
-
My regrets and why I’m rethinking Product Managers
Regrets? I’ve had a few, particularly when it comes to books. Take Business Patterns for Software Developers, perhaps the book I’m proudest off, certainly the book which was hardest and longest to write. While I’m very proud of the book I regret the name. I remember several conversations with my editor about what to call…
-
Flagging poor algorithm choice: LLMs next role
Current use of LLMs in software engineering has focused on using them as proficient coding assistants or having them write programs from specifications. Algorithm selection is an important issue that has yet to attract much attention within the software engineering LLM ecosystem. While much of a program’s functionality is mundane, and the accuracy/performance of the…
-
RESTful APIs: Who Can See It, What Happens When It Fails, and When Is It Done?
I’ve been doing a kind of tour with my Beyond the Code: Designing Services That Stand the Test of Time talk. I’ve given it in Oxford, Norwich, Cambridge, London and York*, between February and August this year. I’ve really enjoyed giving it, but what I…
-
A Review: The Machine Crusade
The Machine Crusade is mostly another middle of the road science fiction story, like The Butlerian Jihad, however what saves it are moments of brilliance from time to time and the ending, which accelerates considerably and keeps you wanting more.There …
-
Ghost in the Shower
I don’t usually enjoy ‘art’, however I’m often in museums as my wife enjoys it.We’re on the Victoria and Albert Museum (V&A) mailing list – mostly because my wife wants tickets for the David Bowie exhibition – and an email about the new Bharti Kher…
-
Distribution of number of statements in functions
The source code of individual functions is written a particular way by individuals to solve particular problems. When source code use of programming constructs are counted, in a sufficiently large quantity of source code, various patterns emerge. The most common patterns involve power laws and exponentials. The plot below shows the number of functions containing…
-
LLMs produce plausible noise
I know everyone and their dog is writing about LLMs, and since I refuse to use them you probably shouldn’t listen to me, but I have recently solidified some of my thinking about them and thought it might be useful to share. None of this makes any diffe…
-
Call graph neighbourhood and fault prediction
Fault reports are generated by a program’s users, and the extreme difficulty of obtaining any information about how users use a program and number of users makes it almost impossible to do reliable fault prediction. Source code is often available. Are there any source code characteristics that could be used to make fault predictions? A…
-
Parsing SGF files for fun
SGF files describe a board game like Go, including all the possible variations someone wants to talk about. Let’s write Rust to parse one of these files! They look something like this: (;FF[4]GM[1]SZ[19];B[aa];W[bb];B[cc];W[dd];B[ad];W[bd]) Follow me …
-
AI is creating problems of surplus
When it comes to AI coding Jevons paradox is working exactly as expected. However the surplus of code is now creating another set of problems
-
The Smart AI Adopter: Value, Precision & Craftsmanship
There’s something about Software Crafters Cambridge – and it’s not just that I can never remember the order the words go in the name. They’re a quiet group of software professionals, but the talks and workshops are always interesting, and it quickly be…
-
Classification of code updates
Version control systems usually include support for classifying each check-in as being a particular instance of some category, e.g., Adaptive, Corrective, Perfective, or Other (this software maintenance category has a long history). Categories have been studied for over 2,000 years. Categories is the first subject of Aristotle’s six works on logical analysis and dialectic. Categorization…
-
Keep the faith
This is mainly a message to myself. I have spent the last few weeks feeling more and more depressed about “the tech industry”. I am sad that social media companies are manipulating us, making us angry and ignorant. I am sad that AI is becoming more per…
-
A full (slow) solution to the Billion Row Challenge
We’ve been picking off small sub-tasks of the Billion Row Challenge, which asks us to summarise a large amount of data as quickly as we can. This time we complete the whole challenge, but in a slow way, to make sure we understand it. In future videos w…
-
My #1 lesson from Bavaria
It is the receiver, not the sender, who decides the message
-
Detailed management data on 1,211 software projects
Until April this year there were only two non-trivial publicly available software project datasets (i.e., Sip and CESAW) containing software project data relating to human effort, e.g., people time, elapsed time, and tasks performed. The SiP data contains 10-years of software development tasks by one company, and the CESAW data contains the tasks involved in…
-
A model of fault experiences for a single functionality program
Some programs perform one basic task, e.g., analyse input to calculate some quantity. These programs often take a set of input values and produce some output. If a program contains a single coding mistake and the probability of producing incorrect output, for one set of inputs, is , the probability of the ‘th output being…
-
Introducing C++: Above All Have Fun And Stay Curious
I hadn’t written a line of C++ since 2011 before I read this book, and that was just for fun. I hadn’t written a line professionally since 2006. Introducing C++ made me want to write some C++ again, so I did.Early in the book, Frances tells us that pri…
-
Reliability via N-version programming?
N-version programming was first proposed in 1978, probably the most known paper on the subject was published in 1986, after which activity was mostly within safety-critical systems circles. Cost was a major issue, it’s expensive to create one version of a program, and producing independent versions is around times more expensive. Now that LLM have…
-
Forest Live with Garbage and Skunk Anansie
We saw Skunk Anansie just over a year ago and I haven’t seen Garbage since the Version 2.0 tour in 90s – the best time to have seen them in my opinion. When the opportunity to see them both together came up, of course Charlotte wanted to go – despite i…
-
The billion row challenge: do we have a bug?
A couple of people contacted me with feedback about the SIMD implementation we used to find newlines in the billion-row file. One suggested a possible bug (shock!) and one suggested a way that might be more efficient. We’ll take a look at both, obvious…
-
Trapped in the system
Many corporations today are trapped by their own complexity and the only way to understand it is to experience it.
-
Specification based programming
The use of LLM to write software has focused on integrating them within existing practices, i.e., using LLMs as very fancy auto-completers for chunks of code or functionality. This use is programming by conversation, or less politely, programming by stream of thought. The term vibe-coding creates an illusion of trendiness; after all, software engineering is…
-
I Asked an AI to Build Me a Bank Data Platform
I Asked an AI to Build Me a Bank Data Platform. Here’s What Happened. Claude wrote this post for me and we reviewed and revised it together. I know this won’t be popular with at least a few of my regular readers, but it felt like the right thing to do…
-
A C++ "Hello, World!" on the public internet
I have been reviewing Fran Buontempo’s new C++ book, and somewhere between the chapters on modern idioms and the bits where she nudges you to actually do something with the language, I caught the itch. I have not written any C++ in more than twenty yea…
-
Writing a bit-wise iterator (with Jez!) for our gunzip implementation
More Jez+Andy coding, working on our gunzip clone. Jez figured out we need to iterate byte by byte through the input, so we write a Biterator to do that. The code is at https://codeberg.org/andybalaam/ggunzip Read Jez’s blog at https://www.jezuk.co.uk…
-
Keep the faith
This is mainly a message to myself. I have spent the last few weeks feeling more and more depressed about “the tech industry”. I am sad that social media companies are manipulating us, making us angry and ignorant. I am sad that AI is becoming more per…
-
Link feast: learning to learn, AI future and conferences.
A collection: Learning to Learn, AI Future, papers and conferences.
-
It Started with People: PRs in the World of AI
Sometimes, even when you’re close to your team, patterns or underlying issues emerge over time. Some of these are insights you may wish you had recognised earlier. The important thing is to talk to your team and work on a solution together. Sometimes, …
-
Waiting times and the task selection process
When working on a project, what process do developers use to select the next task to implement? One way to answer this question is to ask the developers/managers working on the project. However, these people are not always available, and sometimes the actual process used is not what management say it is. Analysis of the…
-
Getting Hands-On with Apache Iceberg: From Docker to AWS in a Day
On Tuesday this week, I was back at AWS on Holborn Viaduct learning about Apache Iceberg with a colleague. Iceberg is a table format standard for managing large-scale datasets and their metadata. The AWS-managed approach is to store the data in S…
-
Should HTTP Status Codes Reflect Business Outcomes?
I’ve delivered my Beyond the Code: Services Which Stand the Test of Time presentation a handful of times this year. Toward the end of the first half, I take a stronger stance and talk more directly about the design of RESTful interfaces.Most of the mat…
-
Projects are worked on in fits and starts
Companies whose business is designing, developing, and maintaining custom software applications (i.e., a software house) have the difficult job of keeping their expensive employees busy with paying work. Work on an existing project may be held up for various reasons, and the start date of new projects is invariably uncertain. A solution to the on/off…
-
Foundation an Earth
I really enjoyed Foundation’s Edge and I had great expectations of Foundation and Earth. I was disappointed. About 90% of the story just plods on. Then the last 10% is really good, but goes super fast. I think part of the problem is that Asimov wa…
-
Leading like you row a boat
Managing work is like rowing a boat: there are two oars, one for authority and one for leadership. Leaders build commitment comes and avoid authority.
-
Answering via a scale to improve estimation accuracy
The human brain differs from the brain of other animals in having two number processing systems: 1) the approximate number system (present in other animals), and 2) language. Round numbers are often given in answers when using language, to questions having a numeric answer. While use of round numbers may be conversationally appropriate, they decrease…
-
The Gathering: Great Band. Great Set. Great Venue. Great Sound!
Great Band. Great Set. Great Venue. Great Sound! Need I say more? I will…We loved the Shepherd’s Bush Empire the first time we went in December 2023 for Paradise Lost and My Dying Bride, so we were really excited to be going back. It didn’t disappoint….
-
Help Shape My Research – Your Input Matters!
I’m currently working on a new piece of writing that I’m hoping to present next year, and I’d really value your input. To support this research, I’ve created a short survey to gather perspectives, experiences, and insights. Whether you’ve got stro…
-
Estimating Open source project lifecycle using the Bass model
Is it possible to reliably estimate the elapsed time that a multi-person Open source project spends under major active development, once it has been running for a year or so, and attracted some developers? The paper Project Life Cycles in Open-Source Software by Das, Ieroshenko, Jain, Qiu, Chin, and Granger fits a Bass diffusion model…
-
Dependabot Zero
Measures become targets, and so they should or why are you measuring? As Github rolled out CodeQL and Dependabot it was inevitable that Dependabot Zero would become a thing. We have been chasing Dependabot Zero all year, and just as it became …
-
Implementing gunzip from scratch in Rust
Jez and Andy get together for crazy programming hijinks, trying to figure out from scratch how gzip compressions works, starting by making a valid minimal gzipped file, then trying to unzip it. Read Jez’s blog at https://www.jezuk.co.uk/ Read my blog …
-
Clean Architecture is both a product of its time and a set of ideas that transcend its time.
For a book divided into small, discrete and easily absorbable chapters, there’s a lot of Clean Architecture. Its strengths are the discussion of the SOLID Principles, Compensation and insistence on abstract interfaces, encapsulated concrete interf…
-
London Tech Leaders Summit 2026
When One Beyond invited me to take part in the London Tech Leaders Summit, I wasn’t quite sure what to expect. What I definitely wasn’t expecting was a seven‑foot robot interrupting the opening welcome.As the doors flung open, the robot ducked to fit t…
-
Lessons from war: change, command and product development
Over 4 years of war and there are lessons in change, command and product development that everyone should be learning
-
Deep Imports Are Not Faster
I wrote Deep Imports Considered Harmful for two reasons. Obviously to persuade people not to use deep imports, but I also wanted to reinforce that components should have an abstract interface and an encapsulated concrete implementation.I was expecting …
-
Software task estimation using LLMs is fake research
Developers hate having to provide an estimate for the time needed to implement some functionality. Given the extent to which LLMs have become embedded in the software world, offloading the estimation question to an LLM appears to be an obvious solution. The problem is that LLMs are very unlikely to give a meaningful answer. However,…
-
Back to Basics: Why the principles that built our industry still matter today
Looking ahead to next year, I want to talk about Abstraction, Encapsulation, Cohesion and Loose Coupling as it seems they are missing from a lot of modern software design.Back to Basics: Why the principles that built our industry still matter todayTher…
-
Jez returns for programming language chat!
Veteran super-coder Jez is back, and claims he has “finished” implementing Cell, Andy’s toy language, in Rust. Jez and Andy basically gossip a bit, about code type stuff. Read Jez’s blog at https://www.jezuk.co.uk/ Read my blog at https://artificialwo…
-
Announcing Changelog Builder – a towncrier clone for building changelogs
I really enjoy re-implementing things that already exist. Sometimes it’s just out of interest, sometimes it’s to make it faster, or work in a different way, or improve the code quality, but I love having that concrete expectation of what the code does …
-
Deep Imports Considered Harmful
Keep It LooseDeep down we all know it’s important to componentise software systems. It allows different parts of the systems, the components, to change and evolve over time with minimal effect on other parts of the system. Designed and implemente…
-
Taking a new GLR parser generator for a spin
It’s been 10 years since I last wrote about parsing tools, and the C parser, pycparser, I took for a test drive is still actively maintained. This week I read a post on Gecko, a new parser generator. Its author, Vladimir Makarov, implemented his first parser generator in 1985. Gecko generates GLR parsers (Generalized Left-to-Right).…
-
Persepolis Rising
Persepolis Rising is set thirty years later and goes off in a different and uninteresting direction. It is of course possible that the entire book is setting up the story for the final two to be brilliant, but the story arc is only referenced in the ep…
-
Using anyhow to handle errors in my Rust changelog builder
Let’s fix our messy error handling in our Rust towncrier clone by using the anyhow library and adding context() calls to describe what went wrong. Can we match the output of towncrier in different circumstances? Do we actually want to match it exactly,…
-
Configuring Claude Code to Enforce Your Own Guidelines
I’ve been using Claude Code without many rules for a while. It’s certainly not the most efficient or effective way to use it. With its help, I learnt how to create some persistent rules around logging. When we’d finish I had Claude produce this blog po…
-
Bosses are prisoners to the system too
Bosses don’t have the free hand to change things that we often expect. They are often imprisoned by the same systems as we are.
-
Working with an LLM maths assistant to model software processes
This post is a overview of the techniques I use when working with LLMs as a mathematics assistant to derive equations for the aggregate behavior of a collection of software processes. Much of the following could well apply to non-software processes, but my experience is software based. Any analysis starts with one or more questions/problems…
-
A simpler blog comment system
Since I made this blog statically-generated using Zola I’ve been using Remark42 as my comment system. I wanted something self-hosted and simple, and it worked. These days I get a comment every couple of months, and about half of them are spam. Remark42…
-
AWS Summit London 2026: And now for something a bit different.
I always look forward to the AWS Summit. It’s a great opportunity to learn what AWS, and the engineers who use it, are up to, and to catch up with my colleagues. This year, though, turned out to be a bit different.The first year I attended, I skipped t…
-
Building a Rust commandline tool: a towncrier clone
Enthusiastically embracing test-driven development as always, we attempt to write a minimal clone of a useful tool, towncrier, which allows us to build changelogs out of individual “newsfragment” files. By the end we have the outline of a decent soluti…
-
Meeting C++ 2025
I have been meaning to write up this conference for a very long time. The call for papers for this year (2026) runs until 4th June. Here’s the link: https://meetingcpp.com/mcpp/submittalk/. So, last year’s conference was great, as ever. Antho…
-
Join me for Agile Thinking for our AI Future
Agile Thinking for our AI Future, free, online, next Tueday with Agile Northants. Register here.
-
Log Judiciously
Judiciously: With good judgement. Logging is one of the simplest things a developer can do, and one of the easiest things to get wrong. A single misplaced log line can be harmless, but a pattern of careless logging turns into noise, confusion, and…
-
Predicting reports of new faults by counting past reports
One of the many difficulties of estimating the probability of a previously unseen fault being reported is lack of information on the amount of time spent using the application; the more time spent, the more likely a previously unseen/seen fault will be experienced. Formal prerelease testing is one of the few situations where running time…
-
The billion row challenge: splitting lines using SIMD in Rust
I was scared to do it, but it was actually fine! This time we look at the quickest way to split up massive text files into separate lines, first by implementing our own zero-copy version of BufReader::lines and later using SIMD, which allows us to proc…
-
5 minutes with Winterfylleth (again)
I know what you’re thinking. Didn’t I do this not long ago? It’s true, I did. Less than 18 months ago in fact. And if Winterfylleth releases another album and does an album launch in the next 18 months I’ll go and do it all again.I left work at 2pm, go…
-
Advertised prices of desktop computers during the 1990s
The 1990s was a decade of dramatic improvements in desktop computer capacity and performance. The difference in performance between the newest and current systems was clearly visible from the rate at which compiler messages zipped up the screen. How did the price of these desktop systems change during this period? Magazine adverts are sometimes the…
-
Rust: reading very large files for the billion row challenge
Checking out whether memmap can help us read very large files as fast as possible, and wondering how wc manages to be so fast. This is the next bit of the Billion Row Challenge, and probably the closest part to black magic. Follow me on mastodon: @and…
-
Maximum Adds per second for 1950s/early 1960s computers
Relative digital computer performance has been measured, since the mid-1960s, by timing how long it takes to execute one or more programs. Until the early 1990s Whetstone was widely used, and then SPEC brought things up to date. Running the same program on multiple computers requires that it be written in a language that is…
-
Parsing whole lines of the Billion Row Challenge
Excitingly, our temperature parser can be trivially extended to find the start of the temperature, so we can use it to parse the whole line! Follow me on mastodon: @andybalaam@mastodon.social
-
The Forcek Assignment
I loved The Forcek Assignment! I’ve read most of Ray Adam’s books and this is by far my favorite so far. It’s short, at about 110 pages, but that means it’s fast paced. There are only a few characters, so you only really get to know Roo Raker, bu…
-
Take a Little Piece of Paul & Charlotte Home
Over the last 18 months, the support you’ve all shown for my writing, speaking, and the journey Charlotte and I have been on has meant more than I can ever say. Every message, every share, every bit of encouragement: it’s carried us.So we’re deli…
-
Stop! Shower Time!
Naked Element to reward team for taking showers.While there is a lot to be said for meeting a problem head on, research has shown that removing oneself from a difficult task, even for a few minutes, can make all the difference when it comes to finding …
-
[Workshop] Building Effective Communication Skills
Is great communication important to you, your work, and your relationships?Do you want to improve how you connect with others?What: Building Effective Communication Skills with Amy EleftheriadesWhen: Thursday, May 14 · 1.00pm to 4.00pmWhere: Maids Head…
-
Chinese research in software engineering
China and the Future of Science is the title of a recent article on the blog The Scholar’s Stage. In a series of posts the author, Tanner Greer, has been discussing how Chairman Xi and the Chinese central committee have reoriented the party towards a new goal. In 2026, the aim of China’s communist enterprise…
-
Winterfylleth – The Unyielding Season
The Imperious Horizon came out on the 13th of September 2024. 18 months (and 2 days) ago. Of course that’s not a long time between albums, especially with bands today – it’s been nearly 8 years since the last Dimmu Borgir album – but it’s also felt lik…
-
Improving our billion-row parsers and benchmarks
Improving the benchmarks of our Billion Row Challenge, and playing with some improved implementations. Follow me on mastodon: @andybalaam@mastodon.social
-
Agile is dead: assisted suicide? Can you revive it?
Did AI kill agile? Was it SAFe? Or did it commit suicide because we stopped learning
-
70% of new software engineering papers on arXiv are LLM related
Subjectively, it feels like LLMs dominate the software engineering research agenda. Are most researchers essentially studying “Using LLMs to do …”? What does the data on papers published since 2022, when LLMs publicly appeared, have to say? There is usually a year or two delay between doing the research work and the paper describing the…
-
What I Learned Sharing Product Experiments with City College Students
A few months ago, Shaun Lowthorpe put out a call on LinkedIn for people willing to share real‑life experiences of using business analysis at work. Although I haven’t done what you’d call traditional business analysis for years, I work in a Produc…
-
Making our own String type in Rust
Implementing our own versions of standard types can help us understand how they work a bit better. This time we’ll make a new string type called AsciiString, and make it handle all its memory itself. Lots of unsafe, and probably lots of bugs! Follow m…
-
Is AI repeating the historic mistakes of BPR?
Technology driven, redundancies galore, under appreciation of processes and tacit knowledge. Is AI repeating the mistakes of BPR?
-
Identifier names chosen to hold the same information
Identifier naming is a contentious issue dominated by opinions and existing habits, with almost no experimental evidence (rather like software engineering practices in general). One study found that around 40% of all non-white-space characters in the visible source of C programs are identifiers (comments representing 31% of the characters in the .c files), representing 29%…
-
Writing a Snake game in Rust/WASM
Last time we did the hard work, so this time we can focus directly on writing a fun game of Snake using pure Rust, running in a browser canvas via WASM. Follow me on mastodon: @andybalaam@mastodon.social
-
AI: Assisted Ignorance with Dom Davis
There’s something about Dom. It’s not only his depth of knowledge of the topics he speaks about. It’s his charisma and his delivery too. This is why people flock to see him. It also helps that Dom has been obsessed (in a good way) with AI for as long a…
-
Should AI coding change the Product Manager role?
Just because AI means Product Managers can code doesn’t mean they should, rather they should double down on their high value work
-
Analysis of some C/C++ source file characteristics
Source code is contained in files within a file-system. However, source files as an entity are very rarely studied. The largest structural source code entities commonly studied are functions/methods/classes, which are stored within files. To some extent this lack of research is understandable. In object-oriented languages one class per file appears to be a natural…
-
My nor(DEV):con 2026
I’ve been to nor(DEV):con, East Anglia’s Largest Developer Conference, most years since its inception as syncConf in 2013. 2026 has been by far my favorite year, and not just because I had the opportunity to speak to a packed conference room with stand…
-
Talking to localhost from inside an Android emulator
If you’re developing an Android application that talks to a server, you may well want to run the server locally and talk to it from your Android emulator. If you point at localhost, this means the Android device itself, not the server running on your c…
-
What leaders don’t know about the cost of queues
Leaders don’t see queues but they cost: lost value, cognitive load, disruption and simple delays. If I could teach everyone just one thing it would be this
-
Relative performance of computers since the 1990s
What was the range of performance of desktop’ish computers introduced since the 1990s, and what was the annual rate of performance increase (answers for earlier computers)? Microcomputers based on Intel’s x86 family was decimating most non-niche cpu families by the early 1990s. During this cpu transition a shift to a new benchmark suite followed a…
-
We’re using the wrong measure for LLM productivity
I’ve been spending a bit of time on LinkedIn lately after finally stopping my use of Xitter (you can find me on Mastodon instead). One of the tropes that I see being uncritically spouted over and over again is “I’m sooooooo productive…
-
Rust: compiling to WASM to make a browser-based game using canvas
I love writing Rust, and I love writing simple games, so let’s combine the two by showing how to make a tiny game framework with these properties: 99% of the code is Rust, compiled to WASM the game runs in any non-ancient Web browser the screen drawin…
-
Radical Candor: Everyone should read this book, but it could be a lot better.
I was recommended Radical Candor as a more contemporary take on Marshall B. Rosenberg’s Nonviolent Communication, but I think it also works as a more up‑to‑date reference for much of the material covered in What Did You Say? The Art of Giving and Recei…
-
Please help with my short survey
Please help with my little KPI survey, just 2 minutes of time
-
Investigating an LLM generated C compiler
Spending over $20,000 on API calls, a team at Anthropic plus an LLM (Claude Opus version 4.6) wrote a C compiler capable of compiling the Linux kernel and other programs to a variety of cpus. Has Anthropic commercialised monkeys typing on keyboards, or have they created an effective sheep herder? First of all, does this…
-
Billion row challenge: parsing temperatures fast(ish)
I watched Jon Gjengset taking on the one billion row challenge and got interested in one small corner of it: parsing temperatures, and in particular parsing temperatures in a “branchless” style – with no if statements – to help the CPU run the code as …
-
When Product Management is Missing in Action
In which a trip to the dentist highlights the importance of Product Management in digital, and companies failure to see the need.