Second order effects
Explores the unpredictable second-order effects of AI evolution, focusing on how AI coding tools may reshape developer choices and business models.
Explores the unpredictable second-order effects of AI evolution, focusing on how AI coding tools may reshape developer choices and business models.
A weekly collection of curated articles on software architecture, development, DevOps, code quality, and tech leadership.
A conversation on how LLMs help shape software abstractions and manage cognitive load in building systems that survive change.
Explores Abstraction of Thought (AoT), a structured reasoning method that uses multiple abstraction levels to improve AI reasoning beyond linear Chain-of-Thought approaches.
Armin Ronacher discusses challenges in AI agent design, including abstraction issues, testing difficulties, and API synchronization problems.
A developer shares lessons on building AI agents, discussing SDK abstractions, caching, reinforcement, and tooling challenges.
A podcast episode discussing best practices for migrating test automation frameworks, focusing on abstraction layers and AI assistance.
Martin Fowler argues that LLMs represent a fundamental shift in software development, comparable to the move from assembler to high-level languages.
Explores common pitfalls in software abstraction like DRY misuse, lasagna code, and util files, offering advice for scalable design.
The article critiques the DRY principle, explaining how its overzealous application can lead to complex, hard-to-maintain code and bad abstractions.
A critique of over-engineering in software development, arguing that excessive abstraction can create complex, unmaintainable code.
Explains how to use protocol-oriented programming in Swift to design flexible applications by focusing on what entities can do rather than what they are.
Explains the 'No Duplication' rule in software design, detailing its benefits for maintainability and enabling change.
Explains how to use Rust's Newtype pattern to safely abstract file name extraction from paths, replacing error-prone code.
Explores the true definition of a 'class' in programming, critiquing Java/C# overreach and distinguishing classes from namespaces.
Explains the key differences between abstraction and encapsulation, two fundamental object-oriented programming concepts.
Principles for designing and maintaining clean, modular core APIs in research software libraries, focusing on deep learning and experimental code.
A developer analyzes what makes a good developer experience, focusing on the inconsistent and 'lumpy' nature of the Web Platform's APIs and abstractions.
Explores the difference between high-level intent and low-level requirements in software engineering and how to effectively navigate between them.
Argues for organizing code with the most abstract functions first to improve readability and debugging efficiency.