LLMs: Opportunities and Challenges Await

2025-08-29
LLMs: Opportunities and Challenges Await

Before a short break, the author shares some thoughts on the current state of LLMs and AI. He points out flaws in current surveys on LLMs' impact on software development, arguing they neglect the varied workflows of LLM usage. The author believes the future of LLMs is unpredictable, encouraging experimentation and shared experiences. He also discusses the inevitability of an AI bubble and the 'hallucination' characteristic of LLMs, stressing the importance of asking questions multiple times for validation. Finally, the author warns of the security risks posed by LLMs, particularly the vulnerabilities of agents operating within browsers.

Read more
AI

Build Your Own CLI Coding Agent: A Practical Guide with Pydantic-AI and MCP

2025-08-29
Build Your Own CLI Coding Agent: A Practical Guide with Pydantic-AI and MCP

This article details how the author built a command-line coding agent using the Pydantic-AI framework and the Model Context Protocol (MCP). By integrating the Claude model, test runners, a code execution sandbox, documentation search, and AWS tools, the agent enables code testing, debugging, documentation lookup, and code modification, significantly boosting development efficiency. The author highlights the importance of MCP in extending agent capabilities and the benefits of building a custom agent to fit specific project needs. Ultimately, the agent acts as an intelligent programming partner, collaborating with developers to write, debug, and test code.

Read more
Development

Generative AI: A Paradigm Shift in Programming

2025-06-28
Generative AI: A Paradigm Shift in Programming

Large Language Models (LLMs) are revolutionizing software development, a change comparable to the shift from assembly language to high-level programming languages. The author argues that LLMs not only raise the level of abstraction but also introduce non-determinism, fundamentally altering the nature of programming. The evolution from Fortran to Ruby improved efficiency but didn't change the core essence of programming. The non-determinism introduced by LLMs requires programmers to adapt, presenting both challenges and opportunities.

Read more
Development

Agentic Coding Assistants: Impressive Progress, Persistent Challenges

2025-03-26
Agentic Coding Assistants: Impressive Progress, Persistent Challenges

Generative AI, particularly LLMs, is revolutionizing software development. This memo details the author's experience using AI coding assistants over several months, revealing significant efficiency gains alongside persistent challenges. The AI frequently misdiagnoses problems, uses brute-force fixes, lacks code reusability, and generates redundant code, impacting team workflow and long-term maintainability. The author categorizes these issues into three impact radiuses: time to commit, team flow, and long-term maintainability, and offers mitigation strategies such as careful code review, regular reflection, and establishing code quality monitoring mechanisms. The core message is that despite rapid AI advancements, developer experience and skills remain crucial.

Read more
Development

Conway's Law: Software Architecture Mirrors Organizational Structure

2025-02-05
Conway's Law: Software Architecture Mirrors Organizational Structure

A prevailing consensus among software architects is the significance of Conway's Law: any organization that designs a system will produce a design whose structure is a copy of the organization's communication structure. This means software architecture often reflects the development team's organization. Ignoring this leads to conflicts between system architecture and organizational structure, increasing development complexity. The article explores three strategies for addressing Conway's Law: ignoring, accepting, and the Inverse Conway Maneuver (adjusting the organizational structure to guide software architecture). The author emphasizes that system architecture and organizational structure evolution should be synchronized throughout software development, and suggests using methods like Domain-Driven Design to aid organizational design.

Read more
Development Conway's Law

The Two Hardest Things in Computer Science: A Deep Dive

2025-01-20
The Two Hardest Things in Computer Science: A Deep Dive

A classic programmer joke states: "There are only two hard things in Computer Science: cache invalidation and naming things." This article traces the origin and evolution of this witty phrase, exploring its humor and deeper meaning. From its initial concise form to variations incorporating 'off-by-one errors' and more, the joke reflects the numerous challenges programmers face daily, highlighting the complexity and amusement inherent in programming.

Read more
Development

Automating API Changes with Codemods: A Refactoring Revolution

2025-01-11
Automating API Changes with Codemods: A Refactoring Revolution

This article explores how codemods automate large-scale code changes, especially when dealing with breaking API changes. Leveraging Abstract Syntax Trees (ASTs), codemods precisely automate code transformations, significantly reducing the burden of manual refactoring. The article uses examples like removing stale feature toggles and refactoring complex React components, detailing the process using jscodeshift, and discusses potential pitfalls and solutions when scaling codemods. It highlights codemods' role in improving code quality and maintainability, showcasing a real-world case study of refactoring an Avatar component.

Read more
Development API changes codemod

Design Tokens: The Key to Scalable and Consistent UI Architectures

2024-12-18
Design Tokens: The Key to Scalable and Consistent UI Architectures

This article explores the role of design tokens in modern UI architecture. By representing design decisions as data, design tokens serve as a single source of truth, enabling automated code generation across platforms for faster updates and improved design consistency. It details the layered organization of design tokens (option, decision, and component tokens), automated distribution processes, and how to choose the appropriate number of layers and token scope. Finally, it discusses when design tokens are appropriate and their limitations, helping readers determine their suitability for their projects.

Read more