LLMs can deliver massive individual productivity gains, especially for senior engineers, and prior ideas around software product team structures now seem to create bottlenecks. I haven’t seen many ideas on this yet, so here’s a rough stab at it.
Thought experiment: a ~20 person team structure (aka Peloton)—about 7 2-person-crews, ~5 supporting specialists, and a product manager—might ease new bottlenecks from LLM efficiency.

LLMs have significantly expanded what individual software product developers can achieve.
How does this massive change affect software product org structures? This seems to be an open, jarring question.
Below is my stab at a reference structure to answer this—but only as a thought experiment for larger software product orgs, not as something you should “roll out” from a blog post.
The shape below is stitched together from first principles and from what I have seen coaching and advising over the years. It is not a case study of one “proven” model. Treat it as a sketch to argue with: stress-test the ideas, steal a piece, or discard the lot.
I mean this as an open discussion: the field is moving quickly, and I am super keen to learn more from others’ thoughts and experiences.
So here it is: instead of only the Spotify-style squad—the usual canonical 5–7 person cross-functional team—consider a Peloton-shaped unit.
Treat this as an idea, not a rigid org chart. The part worth considering is the pattern: pair-sized ownership, pull specialists when you need depth, a shared harness, and guardrails—more than any exact headcount. The numbers below (±20 people, ~7 crews, ~5 specialists) are illustrative: one plausible balance of coverage and flow. You might run smaller, combine roles, or split a Peloton across product lines without “breaking” the model—as long as you do not reintroduce the old bottlenecks by accident.
Guiding structure & roles:
Process:
In bigger orgs:
In this thought experiment, the structure attempts to combine what worked before with first principles: a team shape that optimises flow of value given that a single person can do lots more, while handovers, consensus, and gates that depend on other people still act as bottlenecks. Also, one person can’t be the perfect generalist, and needs help. Organisations (and society) also need to think about continuity, knowledge sharing and mentoring the next gen (hence the junior).
One downside of the above model is the vast amount of skills a generalist Crew member is required to have - but I’m wondering: isn’t this the reality of the skills growth challenge we are faced with in order to get the full flow benefits of LLMs?
In the Agile world, the well established idea of cross-functional software product teams became the canonical structure to optimise product development value, eloquently described in Hendrik Kniberg’s Spotify Engineering Culture videos. In coaching work I have helped organisations move toward that kind of model; the Peloton sketch earlier in this post is a separate, speculative step for the LLM era—not a claim that I run it end-to-end in my own small team.
However, in the era of LLM-assisted development, that canonical squad model is being challenged. Everyone recognises the need to get very skilled at working with LLMs and learn how to get the benefits. Also, everyone seems to have experiences of 1 person team / “lone wolf” being extremely productive, there is consensus on this. But structuring your company as 1000, 1 person teams would surely be chaotic? Imo you need effective team/communication structures in a larger org, in the LLM era, just as much as the Roman army did 2k years ago.
Historically, similar transitions have followed a consistent trajectory: Extreme Programming introduced pairing and tight feedback loops, and CI/CD gradually became an industry standard. The direction has been consistent: faster feedback loops, reduced handoffs, increased ownership, and stronger engineering discipline. LLMs represent the next step change: capable developers can now operate across implementation, design exploration, testing, documentation, analysis, and refactoring. This does not remove the need for teams or software engineering practices but changes the shape of the smallest effective delivery unit. Traditional cross-functional teams aimed to reduce dependencies between specialised roles, but when individuals can operate broadly across the stack, those structures may become unnecessarily constraining. At scale, the question is what shape preserves flow while enabling scale, quality, and learning—this article offers one possible answer, not the answer.
The fundamental new delivery unit is the Crew: A Product Development Pair, typically a senior generalist and a junior developer.
It doesn’t have to be senior/junior, any pair that covers all the generalist skills necessary to develop a feature: product, domain, UX, code, engineering, QA, infrastructure would work. The reason I’m pushing the junior here as a kind of apprentice, to solve the continuity for the company and large skills requirements to be effective - and grow the next generation of builders. Think of a blacksmith with an apprentice. It’s more for the long term benefits.
The pair owns delivery end-to-end, collaborates closely, and uses AI tools to expand capability.
While a pair can operate as a single individual, pairing provides several lasting organisational and personal benefits. A crew of 3 could also work in some cases. Knowledge sharing prevents silos and single points of failure. Not growing the next generation would be a mistake - and becoming a good generalist is especially daunting. Pairing supports the development of future generalists, creating a continuous learning environment embedded directly in delivery work. LLMs expand individual capability, but collaboration remains essential for quality, human growth and long term continuity.
Each pair maintains an independent backlog and aims to deliver with minimal blocking dependencies, ideally to production. Independent backlogs clarify ownership, increase delivery speed, and improve the flow of value.
Pairs have authority to decide when specialist input is required. Lightweight prompts can support decision-making, such as: “Does this change introduce architectural complexity?” or “Are there reliability concerns?” Temporary checkpoints can scaffold teams still building capability, similar to early CI/CD adoption, ensuring high flow and quality without rigid gates.
Pairs pull in specialists only when beneficial. For example, a UX specialist may contribute to complex interaction design or review flows, while a product/domain specialist may shape problem definition or validate direction. The harness engineer provides architectural guidance and shared technical patterns. QA specialists focus on exploratory testing, edge cases, and system reliability. Specialists act as force multipliers rather than sequential phase owners. Most teams I dealt with struggled to reach fully pull-based delivery before—but I don’t think that will be optional if we want the speed and quality now available.
A key new specialist support role is the harness engineer, who maintains the shared technical environment across the unit. Think of this as the devops engineer for the LLM enabled world. This role builds systems and pipelines, guardrails, manages development environments and reusable engineering patterns, develops approaches for LLM usage, and optimises system-level performance. The harness ensures pairs can operate effectively without managing infrastructure complexity themselves.
QA remains critical, providing exploratory testing, scenario evaluation, and confidence in releases. Guardrails supplement QA by proactively enforcing automated validation patterns, reliability practices, observability standards, and system-level safeguards. Together, QA and guardrails allow pairs to move quickly while maintaining product quality.
I think the traditional QA roles now need to also start thinking in terms of guardrails and test automation. Test automation is not new by any means, but in my experience where the previous best practices faltered for most teams is in test automation—I suspect it will be an even bigger problem, so the shift is from “maybe we’ll get it right one day” to “necessary from day one.”
In this article I avoid several common views (which I don’t share):
I am still learning on this topic; if you are running experiments with team shape in the LLM era—at a larger scale, or a deliberately different one—I would genuinely like to hear about it.
]]>This talk introduced LLMs to software developers as a new kind of processor with remarkable capabilities, framed within the history of computing.
It began with a brief overview of the LLM breakthrough, highlighting the transformer architecture and scaling laws.
The session then offered software engineers a practical mental model: thinking of LLMs as a new type of processor, analogous in some ways to a CPU.
]]>Treating your mature enterprise product carelessly will get your business into deep trouble, but gold plating a new product, before you are sure that you are building the right thing, can bring your venture to a premature end.
Although this might seem like common sense, most debates about software practices are still based on the assumption that there is one best practice for all contexts. It took us few failed software product start-ups and unstable mature products to learn this, and how to adjust our way of work, depending on the business context.
This idea has recently been expressed in various guises by a few prominent thinkers, like:
In this talk I will take you through new ideas on the topic and important differences in the 2 contexts, share stories of our own failures and successes, and give you some practical advice on adjusting your approach for the context.
This talk is for any software professional who cares about business value.
]]>In order to escape the common traps of software development, teams and managers need to understand the consequences of their decisions - they need to understand the dynamics of software engineering. This is not an easy task and we need solid help. We need maths!
In this talk I explore a few equations that describe dynamics in software engineering, which can help us see the forest from the trees. I also cover some modern practices - and show how software engineers can get back control of their delivery.
The problems addressed include:
Although software engineering has become crucial to our modern society, it is still a new and often misunderstood discipline.
One of the most harmful misconceptions is that programming and testing are similar activities to construction in mature engineering disciplines, performed after the design has been completed.
In this talk I will give the audience a fresh look at software engineering, inspired by a 1992 article by Jack W. Reeves: “What is design?” I will show how software product development is a creative, collaborative process involving the create creative energy of all the role players in a team (including UX, BA, Dev, Test, Ops).
Finally I will revisit ideas from XP (Extreme Programming) and just show how cool this software design can be when we do it together as a team.
]]>Choosing the wrong mobile tech stack sets you up for a world of pain. But how do you select the right one from a plethora of current options?
As an iOS developer I am convinced that a carefully designed native app provides the best user experience. So why would we choose Ionic2/Angular2 on Cordova (a bleeding edge Hybrid JavaScript framework) for our latest mobile app? In this short talk I will share our thinking and experiences on the current landscape of mobile stack options.
I will introduce the contenders: Native (iOS and Android) vs Semi-Native (Xamarin and React Native) vs Hybrid (Ionic2/Angular2 on Cordova) vs Web. We will then go through some of the prominent tradeoffs between the different options: cost, reuse, single language, speed and user experience, device support, learning curve.
This should give you some (opinionated) guidelines to choosing the right mobile stack for your particular app.
Dealing with an ageing code base is one of the hardest challenges that software development teams face. Legacy code bases can slow teams to a crawl, and therefore it is critical to solve this on the road to agility. Software rewrites fail at alarming rates! Refactoring – a safer approach – has emerged as the de-facto technique to tackle this challenge.
This session we will equip attendees with techniques and lessons to help them refactor more effectively. We will share our experience gained while working with various software teams, from startups to mid-sized organisations, that attempted to rescue their legacy from impending doom.
You will learn how to justify the investment in refactoring legacy code to product owners; when and how to apply different refactoring workflows on legacy code; and practical tips to avoid common pitfalls when refactoring code.
]]>Here is a list of classic articles and books that have informed my thinking on software engineering.
This list does not include my list of (great) programming, philosophy or management books, but speaks more to understanding and managing software development on a higher level - as I believe most software endeavors succeed/fail before a line of code was written.
Almost all I know and believe about software comes from experiences and observations in delivering software, but that does not discount the value in these tomes. I typically learn a fundamental principle by first observing a phenomenon in various environments, and then, when I come across a great study or article which clearly expresses and justifies the principle I get that “AHA!” moment where deep understanding is formed. E.g. seeing estimation inaccuracy occur 100s of times, and then reading Don Reinertsen’s description of variability in product developments gave me a big “AHA!”.
Too be honest, so much in software engineering isn’t obvious or intuitive and I initially miss the messages in books that were not pre-empted by my experiences (XP being a prime example).
Here goes:
*Books I have to read again, because I didn’t realise their significance when I read it, and therefore didn’t absorb the content.
**Books I have only skimmed that are still on my must-read.
]]>“Nothing is more powerful than an idea whose time has come.” — Victor Hugo
“Am I going to be bored or enlightened?” was the question I asked before attending Agile 2015, my first international software development conference as a speaker.
I was enlightened. Almost overwhelmed. This is why.
I started conversing with people at the Agile Coach Camp open spaces: agile coaches, industry celebrities, hardcore programmers, change management consultants, authors, community builders, philosophers, eccentrics. A diverse bunch, but all open to debate, share, learn and apply. I’ve never experienced anything like it.
For a full week it did not stop. Topics ranged from 21st century democratic organisations to games to error handling code. The scheduled talks were good, but the informal conversations and debate were much better.
That’s great. What did I take out of all this?
One thing is a sense of how ideas in our software industry works, how they emerge, spread and get accepted. For example, how did DevOps get widely accepted and become de-facto?
I drew the following conclusions:
1. Ideas get born, live and grow in a professional community
This became apparent to me after speaking to a few of authors and comparing how I experienced the book versus the conversation. An idea printed in a book creates the illusion of immortality of the ideas in it. But ideas are living things in a sense: if the community rejects/forgets it, it is dead in a way (seen as false or invalid). Ideas are mortal and grow by virally replicating through professional networks.
2. Ideas are born from other ideas
The illusion of “the lone genius that figured it out, out of thin air” is often misplaced. Ideas are mostly built from other ideas, maybe a novel combination or reconfiguration.
3. Ideas often have champions
Just because an idea is not completely novel does not mean an idea does not have a champion. There is more than often an thought leader that promotes and nurtures an idea, even gives it a name. Sometimes even takes credit for it all. I call this persona the thought leader.
Do these 3 points apply to industries outside software? I think so, but the community nature of ideas seems more pronounced in software, since software practices are still changing rapidly (less stable than say, accounting), and we have no central “authority” (there is no “Ivy League Old Boys Club” or organisation that controls which ideas get accepted).
The above made me think more about what makes an industry thought leader.
We had the privilege of having conversations with (in no particular order) Jeff Patton, Michael Feathers, Diana Larson, Ron Jeffreys, Dave Hussman, Chet Hendrickson and other well known coaches and authors – people I see as thought leaders in our industry (thanks Declan Whelan for making a few great conversations happen).
These discussions made me realise that I had some misconceptions. I learnt that a good thought leader often has the following traits:
1. A thought leader is a community leader
Giving credit is like spreading seeds for an idea. All of the above people were the most generous in sharing, giving credit, giving back to both people wanting to learn and people wanting to contribute new ideas. They almost always gave credit wherever they could, and promoted other people and their ideas where they could. The persona of a generous, loved community leader emerged across the board. This surprised me. I now think that this is necessary for ideas to flourish, especially for their own ideas which they are promoting.
2. Practice, practice, practice what you preach. Then show results
Practicing your ideas, and having great case studies on how you applied your thinking to various situations is crucial to getting credibility and buy in from the professional community. You obviously have to show that it works, and understand the limitations when facing better than anyone. If you have this, your idea can quickly get traction.
Charisma can get attention, but you need to show results to be widely respected – I am surprised how many speakers miss this part.
There are ways to do this without being everywhere at once. For example, Martin Fowler seems to tap into the experiences of many teams in his organisation.
3. Know how to receive critique and disagree respectfully
Critique is necessary to heathy ideas. Thought leaders know how to receive, absorb and respond to critique, without getting defensive. Critique is the hammer and anvil that hardens and moulds your ideas (or breaks ones that should not be). Your arguments will grow stronger and stronger if you consider critique carefully.
That said, it is often necessary to disagree with other ideas to draw distinctions and clarify your ideas. Thought leaders know how to do this well: know the pros and cons of the idea you are criticizing before jumping to conclusions. Rather defer judgement or even ignore arguments of other ideas you do not understand. Resist the temptation to be a “hater” in your critique, don’t use straw men or appeal to authority. “Hater” behaviour might get a bit of attention, but you ultimately loose respect and get alienated. Alienation means starvation of your ideas.
4. Bring experience from other fields
This point is about where good ideas come from. A lot (but not all) of the fresh, novel approaches come from applying ideas from other industries. Examples are plentiful, but most notably Lean Manufacturing, Life Coaching, Biology, Other Engineering Disciplines, Philosophy, Improvisation Acting, Industrial Design, Mathematics, Art and Music, Sci-Fi and a bunch more.
Having varied experience and a balanced life with varied interests, puts you in a better position to stumble across the next big thing.
5. Focus on one or two ideas at a time
Even though a thought leader might have many interests and ideas, to be a thought leader you have to be a centre of discussion on a contemporary theme, and thus have to focus on that area, at least your public interactions. You have to write and speak about it.
I don’t think we all have to strive to be celebrity authors, but realising that ideas live in a community, and becoming an active idea participant, a good citizen, in this community, makes you a thought leader and makes our industry better.
Or you can just build stuff.
Thanks to Martin Cronje (a few of the ideas in this post was his), and Declan Whelan (who made sure good conversations happened and ideas spread)
]]>As a software engineering coach part of my job is to help teams become more effective. To this end, it is sometimes useful to employ concepts from self-help books, but I don’t always enjoy reading these, they often stretch a few insights into endless anecdotes.
The Blinkist app really helped me with this dilemma last week; I managed to cover the key insights of 40+ books in just a few days. Good job Blinkist.
During this self-help binge, I noticed a few ideas being repeated in a wide variety of books, especially the more core principles.
Here are a few insights that struck me as reoccurring, as well as the books they came from:
I changed my mind on this recently, and here’s why.
There is a sentiment that developers have to type really fast because we “type code for a living”.
I’ve long rejected that idea, and not just because lines of code is the worst possible metric for productivity. My main reason was that a good dev workflow normally entails much, much more reading than writing. Also, communication skills, design skills, etc. seem more important to me. I thought fast typing was merely a nice to have, and I never really invested time into improving mine.
But reading the great book “Thinking, Fast and Slow” by Daniel Kahneman showed me a flaw in my view (there’s so much substance in that book, I’m sure I’ll get many more insights from it).
From this we can see that an activity like correcting a typing mistake will tap our “thinking stamina”, but when typing becomes fully unconscious/automatic it will free up some space for productive problem solving. Hence, it’s important that we learn to type automatically (fast is just a nice side effect of automatic).
This line of thinking can be taken much further than just typing. Anything in our dev environment that is explicit and not automatic, like looking for a menu with some function, or doing an explicit compile, will waste our mental stamina. It is therefore really important to:
In summary: as a developer, always find ways to reduce explicit, non-automatic tasks that draw your attention. I, for one, will take my environment and skills like typing more seriously now.
]]>Bug, loop and patch - these words have been part of programmer lingo for decades. On my recent trip to the US east coast I stumbled across their origin:
The Harvard Mark I aka the IBM Automatic Sequence Controlled Calculator!

This amazing machine was one of the first programmable computers. I’ll tell you more about this monolith at the end of the post.
The original (mechanical) loop. The program is a long paper tape with holes punched in and runs in this loop. Conditional branching is not supported (no gotos, jumps); you just have one long while (true).
See the actual patch. A correction is made by literally patching a piece of the tape and punching new holes in. Fix your code with duct tape!
The classic! This “bug” was found on a Mark II mechanical component, so not really a program error. It must have been working on my machine.
Tidbits I found interesting:
The machine is on display at the Harvard University Science Center (where I took these photos). Hope you enjoyed this as much as I did.
]]>