I spent the first seven years of my product career in healthcare. The best days on the job were the days I got to “walk the halls” with the clinical teams. Seeing the space gives you a sense of perspective about the work that you just can’t replicate. Walking the halls One cold morning in […] The post Walk the Halls: Understand a Business to Build a Better Product appeared first on Atomic Spin.
Deleting a file does not always remove its contents right away. A raw disk image may still contain deleted file entries and data in space the filesystem has marked for reuse. The tools in this guide examine three layers of a disk image: files that still exist, deleted files the filesystem can identify, and raw […] The post A Linux Toolkit for Disk Image Recovery appeared first on Atomic Spin.
I started with a simple task: I needed an AI agent to help me compile decision records, structured documents that capture why a team chose option A over B, using the open-source MADR format. Fill in the sections, organize the rationale, done. It worked. And it was useless.
If you’ve built software in healthcare, you know the usual arrangement. The firm signs a business associate agreement, the developers get PHI access, and everyone agrees to be careful. Careful means scrubbing logs, keeping patient data out of screenshots and tickets, and trusting that nobody pastes the wrong thing into the wrong window. The health […] The post What a Write-Only Architecture Bought Our Health App appeared first on Atomic Spin.
My current company has settled on using Gradle. It doesn’t make me very happy, but you need to learn to work with constraints. Plus, I must admit that the developers who actually implemented the build files did a pretty good job overall: they used Kotlin instead of Groovy, they moved code to regular plugins, etc. This week, I worked on improvements to a new project and set up Renovate.
It isn’t very hard to pitch tech conferences. Offering a getaway from the usual desk work, a chance to pick up on new wisdoms from like-minded and genuinely inspiring folk, and room in the itinerary for sightseeing and socialising in the hip host city in between times? It’s a no-brainer… well, for most. I had […]
The IoT/IIoT world has a data model problem and the concept of Digital Twin has made this issue more important. Plenty of people have tried to fix it. RFC 9880 and its Semantic Definition Format (SDF) are a serious attempt: a JSON-based, ecosystem-neutral way to describe what a device is and what it does. I have had some experiences with this specification, and I’ve understood that the format shows its full value once you treat it as source code, something you compile.
iotvalidationexcerpt only · body stays at the source
In the first post of this series, I focused on the project foundations: what should I do to create a video from photos taken from the same position year after year? I dedicated the second part to aligning images. It wasn’t as easy as I expected. I stumbled upon new concepts, such as ORB and RANSAC. In this third and final post, I want to tackle the video creation itself, explain some 'artistic' decisions, and leave the door open to future work.
In March I attended Web Day Out – a one-day event all about what you can do in web browsers today. It was hosted by Clearleft at the Brighton Dome Studio. It was a brilliant day featuring a diverse line-up, friendly hosting and opportunities to mingle with likeminded souls. At this time when software engineers […]
For OSS work, I work with two git remotes: upstream: the canonical OSS project repository, where main is the default branch and is what gets released. origin: a personal fork. All my feature branches live here. I set up locally like this: Fork the project repo to my account. Clone my fork locally, so the origin remote is my fork. Set an upstream remote using git remote add upstream . and then when working on… continue reading.
In the previous post, I described the Seasons project: a time-lapse of hundreds of pictures taken from nearly the same viewpoint over the years. The hardest challenge wasn’t taking the pictures or assembling them, but aligning them. You might have noticed the nearly part about viewpoint in the above paragraph. Indeed, it’s an approximation. I’m a human being, not a tripod. The position changes ever so slightly, and so does the exact angle.
I live close to nature. I regularly go for a run in the countryside. Over several years, during my runs, I’ve taken pictures from the same position, always roughly the same angle. I had a vague idea in the back of my mind, as an 'artistic' project. One day, I’d turn those photos into a time-lapse video, one that would show the passage of seasons across a single place. Spoiler, here’s the work in progress: However, I knew that this project would take ages.
A couple of years ago, I wrote that The Builder pattern is a finite state machine!. A state machine consists of states and transitions between them. As a developer, I want to make illegal states unrepresentable, i.e., users of my API can’t create non-existent transitions. My hypothesis is that only a static typing system allows this at compile-time. Dynamic typing systems rely on runtime validation. In this blog post, I will show that it holds true, with a caveat.
Excerpt In complex, long-running agentic systems, maintaining alignment and coherent reasoning between agents requires careful design. In this second article of our series, we explore these challenges and the mechanisms we built to keep teams of agents working productively over long time spans. We present a range of complementary techniques that balance the conflicting requirements…
This is Part 1 in our blog series on how the design process works alongside Agile methodology to produce results within an integrated team.Updated 2/5/2026. Originally published 2/2/2024 When it comes to developing new software, not every designer approaches the task the same way. While some use a design thinking approach, looking at the tasks from a user perspective, others use Agile methods, approaching it from an iterative project management standpoint. However, the two approaches are not mutually exclusive. The most successful designers approach their tasks using design thinking which…
Choosing good names for objects and methods in code is one of the toughest things to do as a software engineer. It comes with the great and invisible reward of simplicity – second only to having less code in the first place, having code that’s easy to reason with makes extending it and debugging it in […]
We are Carme and Mila, both software engineers at FreeAgent, where we collaborate as mentee and mentor. In this blog we interview each other about our mentoring relationship. We’re hoping that our experience is universal and sharing our insights will be useful to anyone who is interested in mentoring. If you like what you read, […]
Slack’s Security Engineering team is responsible for protecting Slack’s core infrastructure and services. Our security event ingestion pipeline handles billions of events per day from a diverse array of data sources. Reviewing alerts produced by our security detection system is our primary responsibility during on-call shifts. We’re going to show you how we’re using AI…
We’ve been working with MCP servers for a while, and this use case was a perfect opportunity to build out another one. What is an MCP Server? A very simple way to put it is that Model Context Protocol is an "API" that your AI tooling can use to get external data or perform actions by interacting with your application. If it's just an API, that seems very easy to implement. Let's think about our use case then. The Use Case The project is the TIL https://til.hashrocket.com/ website where we developers usually write about our own learning experiences throughout small TIL posts. So our idea with…
elixirprocessexcerpt only · body stays at the source
What Is Critical Thinking? Critical thinking emerged as a formal area of study from multiple traditions. The most influential modern definition comes from the 1990 Facione Delphi study 1, where expert philosophers and educators reached consensus on what constitutes critical thinking - no small feat in philosophy. This definition has been widely adopted in education and professional development. They arrived at this: We understand critical thinking to be purposeful, self-regulatory judgment which results in interpretation, analysis, evaluation, and inference, as well as explanation of the…
Hotwire is central to how we drive the frontend at FreeAgent, and Action Cable allows us to send Turbo Streams as users browse the site, adding a layer of richness to the user experience.
How we designed a deceptively complex featureIllustration by Alessandro GottardoBy Joel Urena, Jenna Kim, Kenneth Ofosu, Shaka Clark, Raven Adaramola, Dylan CampbellAt least once a day, our players requested a Dark Mode feature for The New York Times Games, particularly those who enjoy playing at night. The bright screens were negatively impacting their satisfaction and hindering accessibility. Our players often wondered why this seemingly simple feature — just a switch from white to black — took so long to deliver.People may think designing for Dark Mode is about inverting colors from white…
designgamesexcerpt only · body stays at the source
"I want AI to do my laundry and dishes so that I can do art and writing, not for AI to do my art and writing so that I can do my laundry and dishes."Joanna Maciejewska I'm sure you've seen this quote from Joanna Maciejewska all over social media; I'd bet some money that there are shops already selling t-shirts and mugs with it. Despite seeing it dozens of times, I never thought about it in the context of my day-to-day as a programmer! I, like the quote's author, was more focused on AI hijacking the "classical" creative work such as painting and writing, instead of helping us humans with the…
The Evolution of Craft: How I Embraced AI in Software DevelopmentOne Sunday morning after a church service I was enjoying a cup of tea, cake and warm conversations with fellow parishioners. One of the conversations with a particular individual shifted to work and I learned that he works in the energy sector. More specifically, he is an engineering manager for an organization specializing in renewables where he oversees a number of solar arrays and other supporting infrastructure crucial for operational efficiency.He told me he was actively recruiting to in-source the development of their…
So you have a difficult problem to solve, and you’ve decided to ask for help with it. Congratulations! Recognising you’ve got a problem is the first step to solving it. Nobody knows how to solve every problem, so you shouldn’t feel bad about needing to ask for help. The next step, which a lot of people find difficult, is to do the asking in a way that helps people to help you. This article aims to help you with that. A lot of what I want to say here is already covered in Eric Raymond’s classic essay How To Ask Questions The Smart Way, and I’d recommend reading it. Having said that, it was…
Just as the universe is governed by a handful of fundamental forces, (gravity, electromagnetism, and the strong and weak nuclear forces), software engineering is too shaped by irreducible forces. These forces, drawn from the deep structure of our discipline, define what is possible, what is difficult, and why certain patterns of success and failure recur. Viewing software engineering through this lens allows us to see not just a collection of best practices, but a coherent framework grounded in the very nature of software itself. Synthesis: A Standard Model of Software Engineering These three…
Vibe coding (also vibecoding) is an AI-dependent programming technique where a person describes a problem in a few sentences as a prompt to a large language model (LLM) tuned for coding. The LLM generates software, shifting the programmer’s role from manual coding to guiding, testing, and refining the AI-generated source code. Vibe coding is claimed by its advocates to allow even amateur programmers to produce software without the extensive training and skills required for software engineering. The term was introduced by Andrej Karpathy in February 2025 and listed in the Merriam-Webster…
As a consultancy, we are expected to have strong and well-formed opinions on all new technologies arriving on the market. So we often get asked, “What should I be doing with AI? Should I be using it? What should I do and what should I avoid?” And the answer is, of course, “It depends”! There are so many factors behind whether or not AI solutions are right for a business. So, a good place to start before trying to answer this question is to be goals-oriented; to know where you are, as a business, and to know where you want to go. Then you can figure out whether any form of AI can be…
developmentaiexcerpt only · body stays at the source
Defra is a long-standing client for Capgemini, with both organisations sharing a commitment to sustainability. Recently we have been focussing on whether we can introduce “Green coding standards” to our teams. Whilst there can be benefits from developers focussing on making each line of code “greener”, much greater wins can be achieved from using best practices to minimise the infrastructure and resources used in the software development lifecycle. Listed below are the best practices that our teams follow at Defra to help make the application estate as sustainable as possible. Prerequisites…
It’s quite a common design requirement to have a border on some states of an element but not others. For example a set of tabs where the currently active tab is highlighted with a top border, or a button where a border is added on hover. The problem is that if you add a border to an element, that changes its size, so if you add a border on one state of a component, then the size will change when the state changes, as you can see from these examples: One simple and elegant solution is to use a transparent border on the other versions of that element, and only change the border colour when the…
In this blog post, I’ll walk through how using LocalStack with Docker and Docker Compose helped us speed up development and testing, making the entire process more efficient and seamless. When building modern cloud-native applications on AWS, having a reliable and cost-effective approach to development and testing is essential. For this project, we utilised LocalStack, a platform that simulates AWS services locally. This enabled us to work more efficiently, speed up development, cut down on costs, and quickly test integrations without constantly interacting with the actual AWS cloud.…
Use Cases for Generative AI For the past year, almost every week the Software Engineering world is asked about Artificial Intelligence (AI). “What should Capgemini’s AI offerings be?”, “Aren’t you worried about the role of Capgemini software engineers now that AI can write code?” Specifically in these cases, the questions are around Generative AI. To put that in context, here is a recap of some terms used to describe different implementations of AI. Machine Learning A nice dictionary definition of machine learning from Oxford Languages is: “the use and development of computer systems that are…
The need for automation in software engineering, especially in Cloud and Platform Roles is apparent. Manual, repetitive tasks consume time, introduce the possibility of human error and can become tedious for team members. In this blog post, I wish to document my journey of automation using Bash. We’ll look at the process and explore how automation can positively impact our workflows and our team. Automating Simple Commands with Bash Scripts For my first project at Capgemini, I have been working as a Platform Engineer within Cloud & Custom Applications. I quickly recognised the importance of…
For a first foray into MacOS development, I built a custom menu bar application. The Hijri Menu Bar allows the user to view the current Hijri date. It is convenient, minimal and easy to use. Below, we’ll highlight the development process, looking at the code, build process and challenges faced. Development The development process began with setting up the project in Xcode. Swift and SwiftUI were chosen as the foundations for the app. Essential components such as the AppDelegate, which manages the app’s startup and background tasks, were incorporated, alongside a custom StatusItemView to…
Optional Google Analytics helps us understand visits. Microsoft Clarity records masked interactions to improve the site. Optional tools stay off unless you choose them. Privacy details.