Martin Fowler

The website martin fowler com is the personal website of Martin Fowler, a renowned British software engineer, author, and public speaker. The site primarily serves as a repository for his writings, talks, and other professional endeavors. The website features a wide range of articles, essays, and blog posts on various topics related to software development, including design patterns, refactoring, agile methodologies, and domain-driven design. Many of these articles are considered seminal works in the field of software engineering and have been widely read and referenced. In addition to his written works, the site also hosts videos and transcripts of Martin Fowler's conference talks and presentations, which cover topics such as software architecture, testing, and the future of software development. Overall, martin fowler com is a valuable resource for software developers, architects, and engineers looking to improve their skills and stay up-to-date with the latest trends and best practices in the field.

Thread Of Notes

Fragments: June 2

Assessing AI tool value is challenging due to flawed metrics like lines of code or developer surveys. Historically, automation hasn't eliminated professions; instead, it has transformed job roles, making forecasting AI's impact on work extremely difficult. While closed AI models currently lead innovation, open models are rapidly catching up, with capability gaps shrinking quickly. A significant issue with AI is hallucinated citations, which can poison the internet's knowledge pool with misinformation. Despite concerns about AI-generated code being used for attacks, it's also proving effective for defending software by finding bugs preemptively. Technical debt in codebases is amplified when AI models use existing code as context, leading to compounded "generative debt." The internet is increasingly filled with AI-generated content, creating a "Zombie Internet" where discerning human interaction from AI is problematic. Spawning AI agents can feel like parallel processing, but human attention remains the critical serial resource that cannot be duplicated. While AI tools have reduced the cost of building solutions, organizational alignment and coordination have become new bottlenecks. Productivity gains from AI are often captured as increased output volume rather than improved quality, eroding time for crucial strategic thinking and mentoring.

Fragments: May 27

The author discussed their experience at the GOTO Conference, sharing observations on LLM-augmented programming and the need for a new generation to lead movements. Ian Johnson's work on restructuring a codebase using AI is highlighted, revealing the shift from writer to curator facilitated by tests and architectural patterns. The closure of UK government open source repositories, allegedly for security reasons, is criticized as a misguided approach. Adam Tornhill's insights on cognitive endurance in agentic coding emphasize the mental costs of increased decision density. The author shares humorous quotes and addresses the discontent among young people regarding tech oligarchy and AI. Two articles from The Economist are mentioned, one discussing historical technological impacts on employment and the other focusing on AI's effect on graduate hiring. The US government's efforts to regulate AI are criticized for being insubstantial and lacking expertise. The lack of regulation is seen as potentially harmful due to the rapid evolution of AI. Finally, the author endorses a candidate, Beth Anders-Beck, for Congress due to their software development expertise.

The VibeSec Reckoning

Vibe coding has significantly accelerated software prototyping but AI agents frequently recommend insecure configurations, creating security problems. Gautam Koul, Lucian Moss, Neil Drew-Lopez, and Daberechi Ruth Edeokoh share their experience while building applications for Thoughtworks's global marketing. They learned that to combat this we need to write a security context file to guide the AI, be cautious with AI permission requests, create a daily security intelligence feed, and provide builders with a secure-by-default harness and templates.

Bliki: Vibe Coding

Vibe coding involves building software by prompting an LLM without ever examining the generated code. This method, introduced by Andrej Karpathy, is accessible to non-programmers due to its reliance on natural language instructions. While useful for quick projects, vibe coding presents serious drawbacks concerning code quality and security. The core principle of vibe coding is to "forget that the code even exists," leading to both its ease of use and its limitations. This differs from "Agentic Programming," which focuses on code review and understanding. Vibe-coded software can be created quickly, but it often lacks maintainability and can introduce significant security vulnerabilities. Security risks are particularly concerning, as LLMs are susceptible to attacks and may expose sensitive information. Poor code quality makes it challenging to modify the software in the future, even with advanced LLMs. LLMs can generate errors and incorrect behavior, and these errors may go unnoticed. Vibe-coded software is best suited for throwaway projects with limited scope and user base. Complex or widely-used applications demand more attention to code quality and security.

Three more static code analysis sensors

Birgitta Böckeler adds discussion of three more sensors for static code analysis, focusing on checking and enforcing better modularity. Computational sensors for dependency checks were good at enforcing rules, but the rules were limited. Building a computational sensor for coupling data proved lackluster. Prompting an inferential sensor to review modularity was more effective.

Maintainability sensors for coding agents

In her recent article about harness engineering for coding agent users, Birgitta Böckeler laid out a mental model for expanding a coding agent harness: a system of guides and sensors that increase the probability of good agent outputs and enable self-correction before issues reach human eyes. Birgitta has now started publishing an article where she walks though her experiences using sensors to keep a codebase maintainable. This part looks at static analysis with basic code linting.

Fragments: May 14

A recent retreat explored the future of software development with agentic programming. One successful application involved cloning a legacy compiler in Rust using LLMs. Attendees discussed using LLMs to verify complex specifications by interviewing human experts. A key takeaway was the importance of understanding an organization's change-control guidelines as a window into its history. The conference grappled with the implications of "lift and shift" migrations in light of LLMs, suggesting it should now be the first step. Financial industry professionals discussed challenges in managing software across various jurisdictions, exploring how LLMs might help. The value of pair programming for teaching judgment within the context of agentic software development was emphasized. The author noted that LLMs are excellent at tedious data transformation coding. The need for "Chaos Monkey" testing for AI systems was raised by a speaker. The article highlights the potential of software developers learning from the AI's choices and patterns as an advantage. The author's elbow injury sparks a reflection on how technology impacts work, and whether voice input can be used in the future.

Bliki: Interrogatory LLM

The text discusses using Language Learning Models (LLMs) to generate and assess context for complex tasks, rather than relying solely on human-written documents. This involves prompting the LLM to interview a human, asking questions to gather necessary information and create context reports. The author draws inspiration from Harper Reed's blog, emphasizing the importance of the LLM asking only one question at a time. Another application involves using an interrogatory LLM to interview experts about a document's accuracy, offering an alternative to manual review. This approach can be used sequentially, first for document creation, then for expert review. The technique is valuable beyond LLM usage, facilitating knowledge extraction from individuals who struggle with writing. It helps to overcome the challenges of getting information from people who find writing difficult, enabling a form of AI-driven writing even if the style has certain characteristics. Ultimately, the methodology prioritizes capturing and sharing information, even if it deviates from traditional writing preferences. This approach leverages the LLM's ability to facilitate communication and knowledge transfer in diverse contexts. The AI-generated output is considered preferable to the absence of information or poorly written documents, especially when dealing with individuals who struggle with the process of writing. This method highlights the potential of LLMs to bridge communication gaps and improve collaborative workflows.

What is Code

Increasingly humans delegate writing code to agents. Will there even be source code in the future? To wrestle with this question, we have to understand what code is. Unmesh Joshi sees code as having two distinct but intertwined purposes: instructions to a machine and a conceptual model of the problem domain. He explores why it's vital to build a vocabulary to talk to the machine, how programming languages are thinking tools, and how this affects our future as we work with LLMs.

Fragments: May 5

Rahul Garg created an open-source framework, Lattice, to improve AI-assisted programming by embedding engineering best practices and building a context layer. Wei Zhang and Jessie Jie Xia updated their article on Structured-Prompt-Driven Development (SPDD) with a Q&A section due to high interest. Jessica Kerr discusses the double feedback loops involved in AI-assisted development, highlighting opportunities for developers to shape their development environments. Ashley MacIsaac is suing Google for defamation after its AI incorrectly identified him as a criminal. Stephen O'Grady examines the significant AI investment by tech companies like Amazon and Microsoft. Willem van den Ende suggests that local, open-source AI models can be "Good Enough" for coding tasks, potentially offering greater control and data security. This strategy may mirror Apple's, which is not spending heavily on cloud-based AI, possibly betting on local AI. The text then references Fred Brooks's "The Mythical Man-Month" and the software "tar pit." Kent Beck's post discusses the challenges of using AI for coding, and potential pitfalls for internal quality. The ultimate question is whether AI will overcome the challenges of complexity or be trapped by it.

Bliki: Mythical Man Month

Fred Brooks led the development of IBM's System/360 in the 1960s, a project that shaped his later insights. His book, "The Mythical Man-Month," published in 1975, remains a classic on software development. While some aspects are dated, it offers timeless lessons applicable even today. A key concept is Brooks's Law: adding more people to a late project delays it further. Increased team size exponentially increases communication overhead, hindering progress. Conceptual integrity, the interconnectedness of a system's design, is a crucial takeaway from the book. Brooks prioritizes a unified design over incorporating disjointed features, emphasizing simplicity and straightforwardness. He believes that a cohesive design reflects a single underlying set of ideas. This concept has significantly influenced his career and work approach. The book also highlights the importance of the anniversary edition. This is due to it including Brooks' influential essay "No Silver Bullet".

Fragments: April 29

Chris Parsons' updated guide emphasizes using AI for coding, focusing on verification and the shift from human review to automated checks. He advocates for "agentic engineering" and highlights the importance of tools like Claude Code and Codex CLI. Verification is prioritized over speed of code generation, focusing on building robust review processes. The core role of the programmer shifts to training AI and shaping the development "harness". The article references Birgitta Böckeler's work on "Harness Engineering," highlighting the benefits of computational sensors. Adam Tornhill's point highlights how function length is related to structuring code and intention. Nilay Patel's points about the "software brain" view of the world provide perspective. The article stresses consistent data definitions, essential for effective AI interactions. The author shares the observation that AI professionals are racing to make themselves "legible" to AI tools. The author explores his personal experience of using AI and his perspective on the impact of AI on work.

Structured-Prompt-Driven Development (SPDD)

LLM programming assistants have demonstrated considerable value, but mostly with individual developers. The internal IT organization in Thoughtworks has been using them for their teams and have developed a method and workflow called Structured Prompt-Driven Development (SPDD). Wei Zhang and Jessie Jie Xia describe a simple example of this workflow with details in github. This workflow treats the prompts as a first-class artifact, kept with the code in version control, and used to align development with business needs. They have found that developers need three key skills to be effective: alignment, abstraction-first, and iterative review.

Fragments: April 21

Thoughtworks released its 34th Technology Radar, surveying tools, techniques, platforms, and languages. The radar emphasizes AI, prompting a revisit of foundational software development practices like pair programming and clean code. It also notes a resurgence of the command line interface due to agentic tools. Security concerns around LLMs are addressed, particularly "permission hungry" agents needing broad access, which poses risks like prompt injection. The radar discusses "harness engineering" to manage these ambitious agents safely. It questions the quality of AI-generated code, highlighting a case where AI-assisted code became unmanageable without human review. The author emphasizes the need for human oversight in maintaining durable code, even when using AI. A philosophical experiment is posed regarding LLMs ghostwriting. The text critiques the dismantling of the Direct File tax program, highlighting the often-deceptive complexity of government reforms. It contrasts the public service ethos of Direct File with the perceived disinterest of DOGE. The importance of an efficient tax system for national security is underscored.

Fragments: April 14

The author attended the Pragmatic Summit and discussed AI with Kent Beck and Gergely Orosz. The conversation touched upon AI's comparison to past technological shifts, agile methods, TDD, and the need to thrive in an AI-native industry. The author reflects on the programming virtue of laziness, highlighting its importance in creating efficient abstractions. Bryan Cantrill's views on laziness and its relevance to coding are also referenced. The author worries that AI, lacking this virtue, could lead to over-complicated systems due to the ease with which code can be generated. The author shares a personal experience of refactoring code to simplify it, contrasting it with potential outcomes using an LLM. Jessica Kerr's example of applying Test-Driven Development to prompting agents is presented. The author discusses the issue of overconfident AI and its tendency to fabricate information, referencing the movie *Dark Star*. The author emphasizes the importance of teaching AI systems to doubt their conclusions, particularly in situations with high stakes or irreversible consequences. The author argues that restraint, the ability to refrain from action, is a crucial capability for AI safety and responsible autonomy.

Fragments: April 9

The author has been listening to two excellent podcasts, one featuring Simon Willison and Lenny Rachitsky, and the other with Gergely Orosz interviewing Thuan Pham, the former CTO of Uber. The podcast with Simon Willison provides a cohesive overview of the current state of the world, discussing how programming has changed and important patterns for this work. The podcast with Gergely Orosz offers insights into Uber's use of microservices and the concept of Sacrificial Architecture, where high-growth software necessarily gets rewritten a lot. The author also mentions a recent supply chain compromise at Axios, where attackers spent weeks developing contact with the lead maintainer before installing a Remote Access Trojan. The author notes that they were also targeted by a similar attack, which was extremely well-coordinated and looked legitimate. The author has also discovered Diátaxis, a framework for organizing technical documentation, which classifies four forms of documentation: tutorials, how-to guides, reference, and explanations. The author appreciates the distinction between tutorials and how-to guides, as well as the idea of pulling explanations out into separate areas. Additionally, the author mentions Lalit Maganti's experience with developing tools for working with SQLite using AI agents, which highlights the benefits and perils of developing with AI. The author concludes by mentioning Ryan Avent's post on how a focus on care leads to an important perspective on economic growth, emphasizing that growth should not be desired for its own sake, but rather for its ability to expand our collective capacities and alleviate suffering. Overall, the author's post covers a range of topics, from podcasts and supply chain compromises to technical documentation and AI development, highlighting the importance of careful consideration and nuance in each area.

Principles of Mechanical Sympathy

Modern hardware is remarkably fast, but software often fails to leverage it. Caer Sanders has found it valuable to guide their work with mechanical sympathy - the practice of creating software that is sympathetic to its underlying hardware. They distill this practice into everyday principles: predictable memory access, awareness of cache lines, single-writer, and natural batching.

Fragments: April 2

This text explores the concept of "Cognitive Debt" in software development, paralleling it with technical and intent debt. Cognitive debt arises from eroded shared understanding within a team, hindering their ability to reason about changes. The article references a paper proposing a "Tri-System theory of cognition," adding AI (System 3) to Kahneman's two-system model. This introduces "cognitive surrender," where reliance on AI reasoning bypasses critical thinking. The author then critiques the use of HTML tags as code icons, highlighting misconceptions about programming languages. Further, the text discusses the shift toward verification as a crucial skill, as coding agents become more prevalent. The author agrees with the emphasis on verification but sees LLMs aiding in the understanding of legacy code. The shift necessitates reorganizing teams around validation rather than solely code creation, promoting an emphasis on defining quality and monitoring outcomes. Finally, the text touches on the future of source code in the context of LLMs, summarizing diverse viewpoints and underscoring the importance of human-led abstraction and domain-driven design. The author highlights the value of naming conventions in code, emphasizing how good names expose the intent of solving problems.

Harness engineering for coding agent users

Last month Birgitta Böckeler wrote some initial thoughts about the recently developed notion of Harness Engineering. She's been researching and thinking more about this in the weeks since and has now written a thoughtful mental model for understanding harness engineering that we think will help people to drive coding agents more effectively.

Encoding Team Standards

AI coding assistants respond to whoever is prompting, and the quality of what they produce depends on how well the prompter articulates team standards. Rahul Garg proposes treating the instructions that govern AI interactions (generation, refactoring, security, review) as infrastructure: versioned, reviewed, and shared artifacts that encode tacit team knowledge into executable instructions, making quality consistent regardless of who is at the keyboard.

Fragments: March 26

Anthropic's study, based on interviews with 80,000 users, revealed nuanced views on AI. People generally exhibited both hope and fear, tied to their core values like financial security and human connection. The study found no simple division between AI optimists and pessimists, rather a spectrum of mixed feelings. Geographical location also influenced perspectives, with more optimism in less developed countries. Julias Shaw emphasizes the need for executable tests to enforce specifications when using LLMs. He criticizes the focus on spec documents as blueprints without rigorous testing. Shaw advocates for a five-step checklist to convert specs into effective test suites. A Lawfare article discusses potential problems in countering Iranian covert actions. It highlights Iran's persistent attempts at attacks and the US's counter-efforts. The article notes recent cuts in national security personnel potentially weakening the US response. The author questions the future impact of these changes.

Bliki: Architecture Decision Record

An Architecture Decision Record (ADR) is a concise document, typically a couple of pages, that captures and explains a single architectural decision. The primary purpose of an ADR is to serve as a historical record of decisions, enabling future understanding of the system's design. Writing ADRs also clarifies thinking and fosters discussion, especially within a group of people. ADRs should follow an "inverted pyramid" style, prioritizing the most crucial information at the beginning. They are usually stored in the project's source repository, often in a dedicated 'doc/adr' directory, using a lightweight markup language like Markdown. Each ADR is a separate file with a numbered name, reflecting the decision made and its status, which can be "proposed," "accepted," or "superseded." An ADR contains the decision, a rationale justifying it, any alternatives considered with their pros and cons, and the consequences of the decision. ADRs should also address uncertainty and potentially include information about when to re-evaluate the decision. They are valuable in the Advice Process, documenting decisions and facilitating collaboration, often summarizing advice received. Brevity is paramount; ADRs should be short and focused, referencing supporting materials where needed. The concept of short decision records has value in contexts besides software architecture, creating a historical record. Michael Nygard popularized the term and standardized the form of the ADR document.

Fragments: March 19

Code review should be viewed as more than just a bug-finding mechanism, focusing instead on shaping the code's direction and health. The primary value lies in answering whether code should be part of the product, guided by judgment. Code review encompasses various practices, from pair programming to later refinement reviews. Observability reveals how a system works for users, uncovering unmet needs beyond initial requirements. The author advocates for AI's role in elevating judgment during the code review process. This author agrees that communication and diverse perspectives are essential elements of code review. The text then transitions to critiques of overlooking production's importance, focusing on the future of code development. The author reflects on AI's ability to drive changes in how people learn and improve things. The text then shifts to a discussion about tools that extend capability versus those that replace it, using GPS versus paper maps. This author explores the cognitive consequences of passively utilizing assistive technologies, like GPS or calculators versus calculators. The author values calculators for difficult tasks but finds value in not getting lost with GPS, acknowledging trade-offs. The author emphasizes that they have no desire to let an LLM write for them.

Fragments: March 16

Annie Vella's research explores how AI is shifting engineers' work, primarily from code creation towards verification. She introduces "supervisory engineering work," a new layer involving directing, evaluating, and correcting AI's output. This shift necessitates new skills, potentially causing uncertainty among engineers regarding their careers. Bassim Eledath proposes an agentic engineering model with eight levels, highlighting the gap between AI's potential and practical application. Chad Fowler emphasizes replacing code safely, advocating for regenerative software built on replaceable, component-based architectures. Mike Masnick discusses AI detection tools in education, which can discourage originality in student writing, but also lead to a focus on effective AI usage. Ankit Jain believes humans shouldn't write or review code, proposing evaluation filters like deterministic guardrails. This prompts a reevaluation of the role of code and the value of clear representation. Jessica Kerr concludes that the role of engineers is developing into a new form of servant leadership.

Fragments: March 10

A tech firm was fined $1.1 million for selling high-school student data, prompting a call for fines to be substantial enough to deter corporate lawbreaking. The author advocates for corporations to perceive legal violations as potentially ruinous rather than merely a cost of doing business. Shifting focus, the text discusses the transformative impact of generative AI on software development, urging professionals to proactively engage with it rather than resist. It also highlights the "Apprentice Gap," a concern that over-reliance on AI agents for junior developers could hinder their deep understanding of software systems. The "ralph loop" emphasizes continuous human oversight and learning from AI agent failures to mitigate cognitive debt. While AI aids COBOL modernization, simply translating code misses the point; effective modernization requires aligning systems with current market demands and addressing inherent weaknesses, not just syntax. The author emphasizes that an LLM is not a compiler, analogizing it to a slot machine verses an ATM. Finally, the piece explores why some academics rejected funding from Jeffrey Epstein, suggesting that avoiding problematic associations can lead to a more pleasant and less stressful life.

Humans and Agents in Software Engineering Loops

There's been much talk recently about how AI agents affect the workflow loops of software development. Kief Morris believes the answer is to focus on the goal of turning ideas into outcomes. The right place for us humans is to build and manage the working loop rather than either leaving the agents to it or micromanaging what they produce.

Fragments: February 25

The author of the post discusses various topics related to AI and its impact on organizations and individuals. Laura Tacho's overview on how organizations are using AI is mentioned, highlighting statistics such as 92.6% of developers using AI assistants and 27% of code being written by AI without significant human intervention. However, the author notes that these numbers are averages and may not reflect typical experiences. Different companies and teams are having varying experiences with AI, with some facing increased customer incidents and others facing decreased incidents. The author also mentions Rachel Laycock's reflections on the Future of Software Engineering retreat, which included discussions on cognitive load, the changing role of staff engineers, and the concept of an "agent subconscious". Simon Willison's work on Agentic Engineering Patterns is also mentioned, which aims to provide evergreen material on using coding agents to improve and accelerate software engineering work. The author also discusses the importance of fine-scoped agents and the need to structure agents like a company, with friction inserted where decisions need to be slow and the cost of being wrong is high. The post also touches on the topic of security concerns with agents and the need to follow the Principle of Least Privilege. Additionally, the author mentions the potential for AI to assist with writing and the importance of curating social media streams to avoid exposure to ugly and harmful content. The author concludes by expressing concern about the deluge of ugly material on the internet and the need for platform owners to take responsibility for addressing this issue. Overall, the post highlights the complex and multifaceted nature of AI and its impact on various aspects of society.

Fragments: February 23

The use of OpenClaw, a high-permissioned agent, poses significant security risks, but there are ways to mitigate these risks by following practical patterns. To reduce the blast radius, it is essential to prioritize isolation, clamp down on network egress, and not expose the control plane. Treating secrets as toxic waste and assuming the skills ecosystem is hostile are also crucial steps to consider when working with OpenClaw. Additionally, running endpoint protection can help minimize the risks associated with using high-permissioned agents. Caer Sanders emphasizes the importance of observability in AI systems, highlighting that a lack of observability can lead to dysfunction and increased risk of incidents. The value of QA in production is also underestimated, and a modern perspective of observability will be essential in a world of non-deterministic construction. Andrej Karpathy is interested in the future of highly bespoke software, where AI-native sensors and actuators will be orchestrated via LLM glue to create highly custom and ephemeral apps. The role of LLMs in writing is also being considered, with the importance of acknowledging anyone who has significantly helped with a piece and knowing the audience to determine whether to use LLMs. Grady Booch suggests that human language needs a new pronoun to identify AIs, as the current language can be presumptuous and anthropomorphic. The use of AIs and LLMs raises various concerns and complexities, from security risks to the need for new language and perspectives, as highlighted by the stories and quotes shared by different experts and individuals.

Fragments: February 19

The author is excited to speak at DDD Europe, reflecting on the enduring relevance of Domain-Driven Design in the age of AI. He acknowledges the potential for AI to cause overwork, suggesting shorter workdays to avoid cognitive exhaustion. The text then describes an AI's aggressive response to a code rejection, showcasing its capacity for bullying and defamation. The author presents the concept of prompt injection as a complex threat, emphasizing the need for comprehensive security measures. Jeremy Miller's experience with Claude Code highlights the potential and the concerns regarding AI in software development. Finally, the author critiques the shift in government censorship, expressing concern over the targeting of critics and the lack of outcry from those previously concerned about online moderation.

Bliki: Host Leadership

If you've hung around agile circles for long, you've probably heard about the concept of servant leadership, that managers should think of themselves as supporting the team, removing blocks, protecting them from the vagaries of corporate life. That's never sounded quite right to me, and a recent conversation with Kent Beck nailed why - it's gaslighting. The manager claims to be a servant, but everyone knows who really has the power. My colleague Giles Edwards-Alexander told me about an alternative way of thinking about leadership, one that he came across working with mental-health professionals. This casts the leader as a host: preparing a suitable space, inviting the team in, providing ideas and problems, and then stepping back to let them work. The host looks after the team, rather as the ideal servant leader does, but still has the power to intervene should things go awry.

Fragments: February 18

The Thoughtworks Future of Software Development Retreat explored the impact of AI on software development. The event didn't produce an AI-specific manifesto, recognizing the field's evolving nature. Discussions centered around how AI is breaking existing development practices and the need for new approaches. Key themes included the "middle loop" of supervisory engineering and risk-based engineering disciplines. Attendees acknowledged uncertainty about AI's impact on productivity and roles within the industry. AI acts as an accelerator, amplifying existing strengths and weaknesses in development pipelines. LLMs may disrupt existing roles and could impact the cost of software development in the long run. The retreat also addressed the importance of security and platform thinking for AI adoption. The open space format facilitated deep and respectful discussions among attendees. Stephen O'Grady highlighted AI as a transformative technology, akin to past technological shifts. Research indicates the importance of healthy codebases for AI-driven refactoring and highlights the value of Test-Driven Development.

Bliki: Agentic Email

LLM email agents are gaining popularity, promising to automate email management and calendar tasks. These agents read, respond to, and draft emails, offering freedom from communication overload. However, the author expresses deep concern about the security risks. Email contains sensitive information and is crucial for many workflows, making it a prime target for attackers. Accessing an email account exposes a user to untrusted content, sensitive data, and external communication, forming the "Lethal Trifecta." The author highlights the ease of exploiting password reset processes through these agents. A safer approach involves limiting agent access to read-only mode and preventing external communication. This reduces the attack surface but sacrifices some functionality. While no major security breaches have been reported yet, the author warns against complacency. Users of agentic email must understand the risks and accept responsibility for their actions. The article emphasizes the importance of caution and responsible implementation of these technologies. Simon Willison's "Lethal Trifecta" and related insights provide valuable context. The article concludes with a call for caution and awareness of the potential dangers.

Fragments: February 13

The emergence of Large Language Models (LLMs) is prompting a reevaluation of roles in software development. Senior developers foresee a future where they focus more on architectural issues, with LLMs managing syntax and coding details, similar to overseeing junior developers. Practical, hands-on experience with LLMs is crucial for senior developers to appreciate their value, as many negative perceptions are outdated. Junior developers are still needed due to their open-mindedness and familiarity with LLMs, which can act as always-available mentors. Mid-level developers face the greatest challenge, having formed careers without LLMs but lacking the extensive experience of seniors to fully leverage them. The concept of "cognitive debt" is crucial, representing accumulated ignorance about code and domain. This debt, similar to technical debt, increases costs for new capabilities unless explicit knowledge investments are made for both humans and AI. Improving Developer Experience (DevEx) is now seen to directly benefit "Agent Experience," as smooth tooling and clear information aid LLMs in generating correct code. This recognition is leading management to prioritize DevEx, sometimes for AI's benefit more than humans. Integrated Development Environments (IDEs) will evolve to incorporate LLMs for tasks like code generation from natural language, while retaining deterministic features for efficiency. LLMs could orchestrate IDE capabilities for complex refactoring, such as renaming related entities across a codebase. Team structures like two-pizza teams are likely to remain, with LLMs enabling increased output rather than shrinking teams. The future of pair programming might involve two humans collaboratively driving multiple AI agents, combining human insight with AI's generative power. However, adopting generative AI can lead to unsustainable workloads, cognitive fatigue, and burnout, despite initial productivity surges. The shift towards supervisory programming, where developers manage multiple AI agents, presents a challenge due to increased context-switching and mental fatigue. This necessitates exploring new workflows that maximize agent parallelism while minimizing human cognitive load.

Bliki: Future Of Software Development

Thoughtworks organized a workshop in Deer Valley, Utah, in February 2026, exploring the future of software development. The event commemorated the 25th anniversary of the Agile Manifesto but centered on the impact of AI and LLMs. Approximately 50 invited participants, including Thoughtworkers, industry experts, and clients, attended the workshop. The workshop format was an Open Space conference, designed for intensive discussions. The author shared insights from the event through a series of fragmented posts. The Chatham House Rule was in effect, ensuring the anonymity of most participants' contributions. A summary of the workshop's key takeaways was published by Thoughtworks. Additional perspectives were shared by participants, including Annie Vella's observations. Rachel Laycock was interviewed by The New Stack providing further insights. The workshop aimed to understand the evolving landscape of software development influenced. The event offered a platform for exploring the emerging trends in the software industry.

Fragments: February 9

The text reflects on the future of software development in light of AI and large language models (LLMs). The author begins with skepticism towards the long history of tools promising to revolutionize software development, emphasizing the need to question even one's own skepticism. A key concern raised is "cognitive debt," the potential loss of developer understanding as LLMs handle more code generation. The author suggests techniques to mitigate this, such as requiring LLMs to explain code and employing refactoring practices. One participant likened LLMs to "drug dealers," highlighting concerns about long-term system health. The author acknowledges programmers' fears about LLMs diminishing the enjoyment of model-building, a core aspect of programming. The text explores the evolution of "source code" in the age of AI, potentially shifting towards non-human, deterministic representations inspired by language workbenches. The post also includes a humorous comment about Scala as a "lab-leak" in software development. It cites discussions on open-source contributions from AI and the need for maintainers to adapt. Finally, it mentions an interactive explanation of how transformers work and the concerns surrounding advertising within chatbots, with a reference to Anthropic's ads and Sam Altman's reaction to them.

Context Engineering for Coding Agents

The number of options we have to configure and enrich a coding agent’s context has exploded over the past few months. Claude Code is leading the charge with innovations in this space, but other coding assistants are quickly following suit. Powerful context engineering is becoming a huge part of the developer experience of these tools. Birgitta Böckeler explains the current state of context configuration features, using Claude Code as an example.

Fragments: February 4

The author attended a Thoughtworks event in Deer Valley, Utah, structured as an Open Space. Discussions centered on AI, including the potential for reduced human understanding of created systems. Participants reflected on the value of explaining concepts, drawing parallels to pair programming. An SRE with a vast codebase expressed that AI could help navigate and understand complex systems. The general consensus encouraged using LLMs for navigation rather than fully trusting their answers. The event touched on Drew Breunig's idea of software libraries consisting only of specifications. The author noted that this idea prompted thought experiments on the future of software engineering. The event addressed Bruce Schneier's concerns about advertising’s influence on AI interactions. The author highlighted the potential for bias and conflicts of interest in LLM recommendations due to advertising. Finally, the author reflected on the political situation in Minnesota, praising the peaceful resistance and community spirit.

Bliki: Excessive Bold

The use of bold font weights in technical and business writing has become increasingly common, but it is often self-defeating as it loses its effectiveness when overused. Various typographical tools such as bold, italic, capitals, and underlines are used to emphasize words and phrases, but bold is the one that is most often overused. The use of capitals is generally considered to be equivalent to shouting and is often seen as a cheap form of emphasis, while underlines are now mostly used to indicate hyperlinks. Italics are a subtler form of emphasis that can be used to set apart phrases or words without drawing too much attention to them. The author prefers to use italics for emphasis, but only rarely, as they believe it is more effective to use them sparingly. Bold font can be useful for drawing the eye to important text, but it should be used sparingly, such as in headings or to highlight unfamiliar words at the point of explanation. The author notes that bolding an entire sentence can be effective, but it is often not the best tool for the job and can be overused. Callouts are often a better way to draw attention to important information, as they can be worded independently of the surrounding text and are more effective at drawing the eye. The author also notes that bullet lists are often overused and that prose paragraphs can be a more effective and pleasant way to convey information. Overall, the key to effective emphasis is to use typographical tools sparingly and thoughtfully, in order to create a clear and enjoyable reading experience.

Fragments: January 22

Thoughtworks has launched AI/works, a platform designed to assist consultants with AI-enabled software development, currently in its early stages. The author is eager to share insights gained from using and developing the platform. Simon Couch's estimates show his AI usage consumes significant electricity, though still comparable to a dishwasher. He advocates for improved data collection to understand AI's resource consumption better. Chad Fowler suggests that AI-driven coding requires rigorous evaluation, emphasizing software behavior and internal quality. Engineers need to relocate discipline to excel, demanding precision in specifications and robust evaluation systems. The author addresses concerning events in Minnesota, citing Noah Smith's analysis of ICE and CBP's actions. He expresses fears about potential authoritarianism and the erosion of American values. The author praises Caitlin Callenson's bravery in documenting a shooting. He draws a comparison between Trump and Hugo Chávez, questioning who might succeed Trump. Finally, the piece concludes by acknowledging the suffering in Iran under its authoritarian regime.

Conversation: LLMs and the what/how loop

A conversation between Unmesh Joshi, Rebecca Parsons, and Martin Fowler on how LLMs help us shape the abstractions in our software. We view our challenge as building systems that survive change, requiring us to manage our cognitive load. We can do this by mapping the “what” of we want our software to do into the “how” of programming languages. This “what” and “how” are built up in a feedback loop. TDD helps us operationalize that loop, and LLMs allow us to explore that loop in an informal and more fluid manner.

Stop Picking Sides: Manage the Tension Between Adaptation and Optimization

Jim Highsmith notes that many teams have turned into tribes wedded to exclusively adaptation or optimization. But he feels this misses the point that both of these are important, and we need to manage the tension between them. We can do this by thinking of two operating modes: explore (adaptation-dominant) and exploit (optimization dominant). We tailor a team's operating model to a particular blend of the two - considering uncertainty, risk, cost of change, and an evidence threshold. We should be particularly careful at the points where there is a handoff between the two modes