Software engineering is a collaborative discipline, in which a single engineer typically works closely with others in a cross-functional team. Collaboration happens at the point of input (product specification), output (delivery of working software to the business), and internally (team practices that improve quality, supportability, and maintainability of the software).
I recently became a parent for the first time, as my wife and I welcomed a beautiful baby boy into our lives in January of this year. As I write this, we are still in the first weeks of adjusting to the maelstrom of caring for a fragile, precious life that demands round-the-clock attention. In other words, we are not getting very much sleep.
> _Industrial_ > > _adj. (sense 3a)_ > > Of or relating to productive work, trade, or manufacture, esp. mechanical industry or large-scale manufacturing; ( > also) resulting from such industry. > > —Oxford English Dictionary
As AI assistants become more dominant in the software industry, one best practice that I have recommended(/post/2025/09/28/the-ai-coding-trap) is to invest time and tooling in using AI across the whole SDLC (software development lifecycle).
If you ever watch someone “coding”, you might see them spending far more time staring into space than typing on their keyboard. No, they (probably) aren’t slacking off. Software development is fundamentally a practice of problem-solving, and so, as with solving a tricky crossword, most of the work is done in your head.
I recently built a small flashcard web app(https://unthink.chrisloy.dev/) to help me learn and avoid various cognitive biases and logical fallacies. I find it helpful to document and recognise these behaviours, so I can avoid blindly repeating them in future.
The advent of AI-assisted coding has made it almost trivially easy to spin up custom software. This has made it much easier to view coding a website as something as lightweight as recording music or engaging in some other hobby.
As our use of LLMs has changed from conversational chatbots and into integral decision-making components of complex systems, our inference approach must also evolve. The practice of "prompt engineering", in which precise wording is submitted to the LLM to elicit desired responses, has serious limitations. And so this is giving way to a more general practice of considering every token fed into the…
Ever been asked to deploy a machine learning model that outputs a "vector" or an "embedding"? Perhaps you've been asked to set up vector search over some text embeddings, and as soon as you look into it you find there's a bewildering array of options and parameters you have to pick from. This article is a short explainer to help the uninitiated find their way around one of those - picking the…
No, this is not another hot take about how AI is going to replace software engineers. Instead, I would like to explore the idea that, over time, AI might replace software itself. Which might lead you to ask - what exactly is the distinction?
Whenever people ask me about my philosophy for building software, top of my list is always to say that I am a proponent of modular design. To explain what I mean by that, it is first necessary to understand a few of the fundamental theories that underpin how I view software engineering as a discipline, and then we can explore how those come together in a philosophy of modularity.
The last few years have seen an explosion of innovation within the technology sector, driven by the advent of widely-accessible, commodity-priced Large Language Models (LLMs) such as OpenAI’s GPT family or Anthropic’s Claude models.
Many job postings include a required skill for candidates to display “comfort with ambiguity”, a definition that itself can seem ambiguous alongside harder skills such as experience managing people, knowledge of particular technologies and so on. So what is this strange personal trait, and how can we develop it?
Any technological endeavour will operate under a series of constraints. These constraints come in many forms, and understanding the existing, nature and extent of those constraints is one of the primary roles of technology leadership within an organisation. As we shall see, a deep understanding of your own constraints can also be a catalyst for the fundamental innovation that separates great…
The most successful organisations have leaders with clear divisions in their responsibilities. In my role as a CTO or Engineering leader, I often find myself addressing the same type of problems, even in organisations with very diverse industries, teams and funding.
A recent paper, published in Nature(https://www.nature.com/articles/s41586-024-07566-y), explores a critical issue facing generative AI models, termed "model collapse," which occurs when models are trained on data generated by earlier models, rather than genuine human-generated content. This process leads to a gradual and irreversible degradation in model performance, in which the models lose…
This article defines a few terms, borrowed wholly from Newtonian mechanics, to define a framework for thinking about how software engineering teams operate.