Designing for the Worst Day
An essay on designing software tools with compassion for users experiencing mental health crises or cognitive impairment, arguing it leads to better software for everyone.
An essay on designing software tools with compassion for users experiencing mental health crises or cognitive impairment, arguing it leads to better software for everyone.
A software developer draws parallels between designing the Requests HTTP library and maintaining a healthy marriage, focusing on system design principles.
Steve Yegge discusses evolving the Beads CLI for AI agents by implementing their 'hallucinations' to create a natural interface.
Explores strategies for implementing and testing complex data filtering logic, balancing correctness and performance between in-memory and database queries.
Analysis of Apple's Creator Studio app icons and the broader software design philosophy at Apple, using icon changes as a case study.
A manifesto advocating for AI-powered software that is personalized, private, and user-centric, moving beyond one-size-fits-all design.
Explores 'context plumbing' for AI agents, the engineering needed to move relevant context from various sources to where AI systems run.
Explores software design philosophy of minimizing user effort, using Google Calendar as an example of optimizing for common cases while supporting edge cases.
A comprehensive series on Event Storming Big Picture, a collaborative workshop technique for aligning business and tech teams on complex domains.
Explores error handling and data guarantees in Fortran using a polyline type, focusing on enforcing constraints through private components and factory functions.
Explores using Fortran types and private components to prevent edge cases and ensure safe function calls, focusing on error handling for non-empty lists.
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.
Explores the concept of 'Design Pressure' in software architecture, examining invisible forces that shape code and discussing coupling, types, and ORMs.
Analyzes the negative long-term effects of Postel's Law on software ecosystems, arguing it creates a 'ratchet' of increasing specification deviance.
Explores using onion architecture, separation of concerns, and cohesion to build adaptable, maintainable software under tight deadlines.
Learn how to use architecture tests and the NetArchTest library to enforce clean architecture rules and prevent technical debt in .NET applications.
A critical analysis of the Instability-Abstractness-Relationship, a software design quality metric for measuring package maintainability.
A developer's critique of inheritance misuse in OOP, comparing abstract classes vs. interfaces and advocating for better design patterns.
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.