Everything is Under Control

Everything is Under Control

By Frances Buontempo

Overload, 34(191):2-3, February 2026


You can’t always plan every detail in advance. Frances Buontempo tries to step back and find out how to respond to change.

When my routine gets disrupted, it takes a while to get back into the swing of things. For example, I went to Meeting C++ [MeetingC++] in Berlin in November last year and gave a keynote. Being invited to give a talk is a great honour (thank you, Jens), but trying to get back to various tasks when I got home was challenging. Fortunately, our last edition had a guest editor, Quasar Chunawala, who wrote an introduction to coroutines for us [Chunawala25]. I was off the hook! Of course, I haven’t written an editorial this time either, as ever. The new year crept up on me and the break put me off. Furthermore, I’ve been finishing up my new book, an introduction to C++ for O’Reilly [Buontempo26]. I feel like I can’t read or write anything, ever again now. I might get over it. We’ll see.

A regular routine helps me feel like I have everything under control. It’s just a feeling and though it helps me, it might not work for you. Furthermore, life throws curved balls from time to time. Disruptions can give you an opportunity to stop and think. Running on your rails frequently means you are being somewhat mindless. We all need to take a moment to reflect once in a while, and maybe dream about new possibilities. And sometimes, we need to stop for a bit. We are not machines. Stopping and taking stock might help you realise a better approach. Nonetheless, a routine can provide motivation. You do something because it’s the next thing to do.

Sometimes sticking with a habit isn’t a good idea. When I write code, I occasionally follow my nose and end up with a tangled mess. I bet you have done similar: you need code to do something that’s similar to something you’ve done before so maybe don’t stop and think first. Trying to find good examples for my introductory C++ book has been a challenge, too. I was tempted to write short snippets in various places which I hadn’t even compiled. I did stop myself, you’ll be pleased to hear. Sometimes sketching out a high level plan, whether functions or classes or data flow, makes you stop and think. Some basic principles keep everything under control: version control, tests, maybe even code reviews and some code sanitizers. Certainly checking that code compiles! How do you keep everything under control? Write us an article and tell us your approach. ☺

No matter how hard we try, problems sneak in. That might be bugs, or design problems. Even if you think you’ve come out with a clean architecture, future feature requests can scupper your plans. That said, there are some high-level heuristics that can diminish the chance of bad things happening. C++ has many examples of these, such as ‘almost always auto’ [Sutter13]. Of course, they are heuristics, and there are always exceptions. Well, maybe not always: embedded code often doesn’t use exceptions. That’s another story for another time. Every programming language tends to have heuristics or guidelines. However, things change over time, so you need to keep up to date. Maybe that’s why you’re reading this magazine? Hopefully you learn something each time you do.

Let’s consider a heuristic. Years ago, the received wisdom was to pull a call to a container’s size outside a loop for efficiency. The theory was a call inside a loop would happen each time around the loop. The following might therefore fail a code review:

  for (size_t index = 0; i< stuff.size(); ++i) 

Again, we could start another discussion about old-skool for loops versus range-based approaches, but won’t. Calling size in the loop used to be inefficient, but compilers usually optimise this call out of the loop now. I watched Matt Godbolt’s ‘Advent of Compiler Optimisation’ on YouTube [Godbolt25a]. Matt called out various ways in which a compiler might generate code that’s different to what you’ve typed. Hopefully, the idea isn’t a surprise to you. What is surprising is the various ways in which optimisations are achieved. The final (actual) episode summed the numbers from 0 to x, for some number x,using a for loop. Various compilers removed the loop and found a quicker way, using x(x-1) ⁄ 2. You may recognize the formula as Gauss summation, but Matt has details on his blog if you’d rather read than listen [Godbolt25b]. You might have known some tips for making code quicker, but you need to keep your knowledge up to date. Things change. This means you might not have everything under control. Seeing a compiler completely remove a loop and use the closed-form formula for a sum is amazing. Of course, you can control the level of optimisations. Less aggressive levels are less likely to completely remove your hand-crafted loops. All of the other advent of code optimisations are worth watching too. I bet you learn something.

Trying to keep everything under control goes beyond the code itself, as anyone who has had to support a production system knows. Logging can be very useful, but sometimes doesn’t provide enough information. Chris Oldwood wrote an article called ‘Terse Exception Messages’ a while ago [Oldwood15]. He started with a line from a log:

  ERROR: Failed to calibrate currency pair!

If the message also said which currencies were involved, Chris’ life would have been easier. Thinking through whether the information logged is useful or not is important. One system I worked on had very chatty logging. Full sentences and many extraneous details. One of the team spent time reformulating the logging, to make the lines easier to search with regex. Many of the lines in the log became shorter, which were slightly quicker to write out so sped up the process a tiny bit. An added bonus. More importantly, being able to find relevant lines in one search with a script made our lives much easier. Sometimes a bit of thought and planning can give you more control. Just saying.

It can be hard to find a good balance between logging everything or just a few salient messages. Recently, the news in the UK mentioned an increase in theft of bicycles from train stations. “So what?” I hear you cry. Well, many stations have bike racks, and these are often covered by CCTV. Unfortunately, this means there are many hours of footage which takes time to watch, so the British Transport Police said they can’t spend all their time watching the footage because then they won’t be able to patrol railway stations. It’s likely that a bike theft would be on the footage but there’s too much to look through, like the chatty logs I mentioned. The BBC News reported this with the attention grabbing headline: Bike thefts at stations ‘decriminalised’ [BBC25]. Now, I wonder if you could get a machine learning system to spot the moment when a bicycle is removed from a spot – it can’t be that hard. That would at least narrow down the time period of footage that needed investigating. You ‘just’ need to say which square contains a bike and which doesn’t and clock the timestamps. You could go the extra step of trying to use AI to recognize the face of the person taking the bike, but that’s another story – certainly one that is causing controversy in the UK at the moment. If anyone is studying computer vision, I may have thought of a research project for you: ‘Spot the bike’.

Too much information can be overwhelming. A long time ago, I wrote about drowning in emails (and more besides) [Buontempo12]. My emails are out of control again. No matter how many lists I unsubscribe from, I seem to end up on more and more every week. Setting up filters helps, giving me some control over what I see in my inbox, but it doesn’t entirely solve the problem. Perhaps I need a machine learning system to filter and summarise my emails. And reply as well… except now I suspect I am talking about various attempts at ‘AI’ personal assistants. I don’t really want GenAI to write a summary for me. One option would be abandoning email altogether, but that might cause other problems. I guess the trick is prioritising what needs dealing with and what can wait, in conjunction with finding a way to remember the things that are waiting. When you are faced with a wall of noise/information, you need to find a good way to search through it, or narrow down what you are trying to figure out. The same goes with internet searches and even reading books. It’s OK to skip from the table of contents to the index and go straight to the pertinent parts. You don’t need to read all the things.

OK, so you can use machines to automate tasks, including searching your logs or emails to find information. However, just because an approach is trendy or possible, doesn’t make it a good idea. It’s still challenging to stop GenAI ‘hallucinating’ (making stuff up). You can try more specific prompts, tell the LLM to own up if it doesn’t know or to provide a chain of reasoning, explaining the steps. This will never give you complete control. Many suspect we can never stop GenAI making stuff up [O’Brien23], and to my mind that is how LLMs are designed: precisely to make things up. In case you missed it, we had an article from Andy Balaam last time explaining why he doesn’t use (Gen)AI [Balaam25]. He suggested the results are sometimes dangerously incorrect. We have a follow up letter to the editor in this edition. I am pleased to see people discussing GenAI and questioning it. Any new tech can be useful, but that does not mean you have to fully embrace it and use it for everything.

Another aspect of GenAI people find disconcerting is that the same prompt can give different replies. This is by design. If you can turn the temperature parameter down to 0, you’ll get the same response each time. [Noble], unless the model changes under your feet. If you’ve ever worked with models using random numbers, this will be familiar. Probabilistic models use random numbers deliberately, allowing you to explore expected outcomes or averages. In theory you can record the seed used for the pseudo-random numbers and repeat the outcome. Of course the same seed on different compilers might give a different number sequence [Reddit].

They say the best laid plans of mice and men often go astray. That doesn’t mean it’s not worth trying to form a plan. You might need to be prepared to follow a back–up plan or trying something else. Don’t get carried away trying to plan for every eventuality. You’ll end up catastrophizing and won’t get anything done. And, if something does go wrong it will probably be something you didn’t even think of. I was giving a talk at the ACCU conference once and a power surge fried my laptop live on stage. I did have the talk itself in bitbucket, but the UI had recently changed and I struggled to find the right workspace on a friend’s laptop. Everyone in the room tried to help, and we got there in the end. However, I couldn’t run my demos. Subsequently, I’ve tried to embed mp4s into my slides, but they often won’t play. I just need to learn to ‘roll with the punches’: like boxing, a side swipe can potentially knock you out. If instead, you accept things don’t always go to plan, you might get better at coming out with a plan B just when you need it. Try to take some control, but not 100%. Let surprises happen too. They aren’t always bad. And you might learn something. As the agile manifesto says, we have come to value ‘Responding to change over following a plan’ [Agile].

References

[Agile] ‘Manifesto for Agile Software Development’, available at http://agilemanifesto.org/

[Balaam25] Andy Balaam ‘Why I don’t use AI’ in Overload 33(190):4–5, December 2025, https://accu.org/journals/overload/33/190/balaam/

[BBC25] Tom Edwards, ‘Bike thefts at stations ‘decriminalised’’, posted 2 October 2025 at https://www.bbc.co.uk/news/articles/c8jm3wxvlkjo

[Buontempo12] Frances Buontempo ‘Too Much Information’ in Overload, 20(111):2–3, October 2012, https://accu.org/journals/overload/20/111/buontempo_1885/

[Buontempo26] Frances Buontempo (2026) Introducing C++, O’Reilly Media, Inc., https://www.oreilly.com/library/view/introducing-c/9781098178130/

[Chunawala25] Quasar Chunawala ‘A Guest Editorial’ in Overload 190, December 2025, https://accu.org/journals/overload/33/190/chunawala-buontempo/

[Godbolt25a] Matt Godbolt ‘Advent of Compiler Optimisations 2025’, available at https://www.youtube.com/playlist?list=PL2HVqYf7If8cY4wLk7JUQ2f0JXY_xMQm2

[Godbolt25b] Matt Godbolt ‘When compilers surprise you’, Matt Godbolt’s blog, posted December 2025, available at https://xania.org/202512/24-cunning-clang

[MeetingC++] Meeting C++ website: https://meetingcpp.com/

[Noble] Joshua Noble ‘What is LLM Temperature?’ (date unknown), IBM, available at https://www.ibm.com/think/topics/llm-temperature

[O’Brien23] Matt O’Brien and The Associated Press ‘Tech experts are starting to doubt that ChatGPT and A.I. ‘hallucintations’ will ever go away: ‘This isn’t fixable’’ Fortune, posted 1 August 2023, available at https://fortune.com/2023/08/01/can-ai-chatgpt-hallucinations-be-fixed-experts-doubt-altman-openai/

[Oldwood15] Chris Oldwoood ‘Terse Exception Messages’ in Overload 23(127):15–17, June 2015, https://accu.org/journals/overload/23/127/oldwood_2110/

[Reddit] ‘Inconsistency in C++ random’, discussion held approximately 11 years ago on https://www.reddit.com/r/cpp/comments/30w7cs/inconsistency_in_c_random/

[Sutter13] Herb Sutter, ‘GotW #94 Solution: AAA Style (Almost Always Auto)’ on Sutter’s Mill, posted 12 Aug 2013, available at https://herbsutter.com/2013/08/12/gotw-94-solution-aaa-style-almost-always-auto/

Frances Buontempo has a BA in Maths + Philosophy, an MSc in Pure Maths and a PhD using AI and data mining. She’s written a book about machine learning called Genetic Algorithms and Machine Learning for Programmers, and one to help you catch up with C++ called Learn C++ by Example. She has been a programmer since the 90s, and learnt to program by reading the manual for her Dad’s BBC model B machine.






Your Privacy

By clicking "Accept Non-Essential Cookies" you agree ACCU can store non-essential cookies on your device and disclose information in accordance with our Privacy Policy and Cookie Policy.

Current Setting: Non-Essential Cookies REJECTED


By clicking "Include Third Party Content" you agree ACCU can forward your IP address to third-party sites (such as YouTube) to enhance the information presented on this site, and that third-party sites may store cookies on your device.

Current Setting: Third Party Content EXCLUDED



Settings can be changed at any time from the Cookie Policy page.