
The ultimate architect's playbook - 97 bite-sized wisdom bombs from industry legends like Neal Ford and Michael Nygard. While tech evolves, these principles endure, shaping modern development practices from Agile to Domain-Driven Design. What architectural blind spot is costing your team right now?
Richard Monson-Haefel, author of 97 Things Every Software Architect Should Know, is a renowned software architect and bestselling authority on enterprise Java development. With over 26 years of experience, he has shaped industry standards as a co-founder of Apache Geronimo and OpenEJB, and served on Java Community Process (JCP) expert groups.
His book distills practical insights for software architects, reflecting his deep expertise in Java EE, JMS, and web services—themes central to his five technical titles, including Enterprise JavaBeans and Java Message Service (O’Reilly).
A former senior analyst at Burton Group (now Gartner), Monson-Haefel combines hands-on development experience with strategic analysis. He has authored acclaimed Pluralsight courses on Jakarta EE and React Native, earning a 4.4/5 average rating from thousands of learners.
His work is recommended by institutions like Apache and Oracle, and his frameworks underpin enterprise systems globally. 97 Things Every Software Architect Should Know has become a seminal resource, endorsed for its actionable advice and translated into multiple languages.
The book’s concise, principle-driven approach mirrors Monson-Haefel’s reputation for transforming complex concepts into accessible tools for developers.
97 Things Every Software Architect Should Know is a curated collection of actionable insights from over 40 leading software architects. Focused on non-technical challenges, it covers communication, stakeholder management, complexity reduction, and balancing business needs with technical decisions. Key themes include prioritizing simplicity, quantifying requirements, and fostering collaboration between developers and stakeholders.
Aspiring and experienced software architects, senior developers transitioning to architectural roles, and technical leads will benefit most. The book is ideal for professionals seeking practical advice on managing cross-functional teams, aligning technical decisions with business goals, and avoiding common pitfalls in large-scale system design.
Yes—it distills decades of real-world experience into concise, actionable essays. Unlike technical manuals, it emphasizes soft skills like leadership and communication, making it a unique resource for architects navigating organizational dynamics. Critics praise its focus on practical over theoretical solutions.
The book advocates embedding performance considerations early—e.g., defining response-time thresholds (like “≤1500ms under normal load”) during requirements gathering. It stresses iterative testing and aligning metrics with business outcomes rather than technical vanity.
While Clean Architecture focuses on technical patterns, 97 Things emphasizes human-centric challenges: stakeholder negotiation, team empowerment, and business alignment. Both stress modularity, but 97 Things offers broader organizational strategies.
Some note its fragmented structure due to multiple contributors, which may lack depth on specific topics. However, this format provides diverse perspectives, making it a practical reference over a linear guide.
It teaches architects to articulate technical decisions in business terms, a critical skill for advancing to leadership roles. Essays like “Don’t Put Your Resume Ahead of the Requirements” underscore the importance of delivering customer value over personal tech preferences.
It advises architects to demand concrete scalability criteria (e.g., user growth projections) and stress-test architectures against realistic benchmarks. Avoiding premature optimization, it emphasizes scalable design patterns like loose coupling.
As agile and DevOps dominate, the book’s lessons on collaboration, incremental delivery, and balancing innovation with stability remain critical—especially for cloud-native and distributed systems.
Почувствуйте книгу через голос автора
Превратите знания в увлекательные, богатые примерами идеи
Захватите ключевые идеи мгновенно для быстрого обучения
Наслаждайтесь книгой в весёлой и увлекательной форме
Simplicity before generality is a virtue.
The real foundation for success or failure is people.
When someone seems to be 'not doing it right,' it's conversation.
Accept that failures will happen and design your system's reaction.
Our duty as architects is to solve essential complexity.
Разбейте ключевые идеи 97 things every software architect should know на понятные тезисы, чтобы понять, как инновационные команды создают, сотрудничают и растут.
Погрузитесь в 97 things every software architect should know через яркие истории, превращающие уроки инноваций в запоминающиеся и применимые моменты.
Задавайте любые вопросы, выбирайте свой стиль обучения и создавайте идеи, которые действительно вам подходят.

Создано выпускниками Колумбийского университета в Сан-Франциско
"Instead of endless scrolling, I just hit play on BeFreed. It saves me so much time."
"I never knew where to start with nonfiction—BeFreed’s book lists turned into podcasts gave me a clear path."
"Perfect balance between learning and entertainment. Finished ‘Thinking, Fast and Slow’ on my commute this week."
"Crazy how much I learned while walking the dog. BeFreed = small habits → big gains."
"Reading used to feel like a chore. Now it’s just part of my lifestyle."
"Feels effortless compared to reading. I’ve finished 6 books this month already."
"BeFreed turned my guilty doomscrolling into something that feels productive and inspiring."
"BeFreed turned my commute into learning time. 20-min podcasts are perfect for finishing books I never had time for."
"BeFreed replaced my podcast queue. Imagine Spotify for books — that’s it. 🙌"
"It is great for me to learn something from the book without reading it."
"The themed book list podcasts help me connect ideas across authors—like a guided audio journey."
"Makes me feel smarter every time before going to work"
Создано выпускниками Колумбийского университета в Сан-Франциско

Получите резюме книги «97 things every software architect should know» в формате PDF или EPUB бесплатно. Распечатайте или читайте офлайн в любое время.
Software architecture is a delicate dance between business needs and technical possibilities. Unlike the rigid world of building architecture, software demands flexibility and adaptability while maintaining structural integrity. The most successful architects stand with one foot firmly in each world-understanding business priorities while mastering technical implementation. This dual perspective allows them to create solutions that not only function technically but deliver genuine business value. What makes this challenge particularly difficult is that we naturally gravitate toward complexity. There's something intellectually stimulating about crafting intricate solutions, and let's be honest-they make us look clever. But complexity breeds more complexity. Consider air traffic control systems that have become so convoluted they're nearly impossible to update. The essential complexity (coordinating thousands of aircraft) gets buried under layers of accidental complexity (the solutions we build to address the core problem). The true art of software architecture isn't showcasing technical prowess-it's solving essential complexity without introducing unnecessary complications. When faced with a problem like inventory tracking, resist the urge to implement sophisticated event-sourcing systems when a straightforward database would suffice. Remember that simplicity before generality is a virtue, not a compromise. Frameworks derived from working code almost always outperform theoretical ones in real-world applications.
Most project failures stem from people problems, not technology choices. When someone seems to be "doing it wrong," the solution is a conversation, not new technology. Treating team members with respect transforms technically brilliant architects into effective ones. The ivory tower approach where specifications are dictated from above leads to developer revolts and project failure. Instead, focus on clear communication and leadership. Keep kickoffs simple with visual diagrams rather than lengthy documents. Capture whiteboard sessions digitally and share via wiki. Create a collaborative environment where architectural decisions are validated with developers, generating buy-in rather than resistance. Many architects evolve from technical roles where success came from talking to machines, but architectural effectiveness depends on communicating with humans. You must "sell" your ideas through effective communication. One powerful technique: stand up when addressing groups about architectural guidance - this naturally communicates authority. To increase conversational effectiveness, approach situations as dialogues rather than confrontations, manage your emotions before engaging, and establish mutually agreed-upon goals. Starting with shared purpose transforms potentially adversarial interactions into collaborative problem-solving.
Hardware fails. Software fails. Networks fail. Humans make mistakes. These aren't pessimistic observations - they're fundamental realities that shape good architecture. Every safety mechanism we add introduces new failure modes, like clustering software that can cause "split-brain syndrome" when networks falter. Netflix's Chaos Monkey - which randomly terminates production instances - exemplifies the right approach. Rather than trying to prevent all failures, design for resilience. Accept that failures will happen and plan your system's reaction to specific breakdowns. Create safe failure modes that contain damage and protect the system. When facing "budgetecture" - where sound technology choices are sacrificed for cost-cutting - resist the engineer's instinct to immediately explain technical trade-offs. When a project sponsor asks "Do we really need X?" in that patronizing tone, counter-negotiate instead: "Without redundancy, the system will crash during board demonstrations. We actually need more resources to maintain capacity during maintenance." This shifts the conversation from cutting corners to managing requirements.
Vague terms like "fast" or "responsive" aren't requirements - they lack objective success metrics. Every quality attribute needs specific quantification: how many, in what period, how often, at what rate? A proper requirement is precise: "Must respond to user input in no more than 1,500 milliseconds. Under normal load, average response time must be between 750-1,250 milliseconds." This creates clear success criteria and focuses efforts on measurable outcomes. While business users typically specify functional requirements, architects must address non-functional aspects like performance and resiliency. Performance testing should begin by the third iteration, not at development's end. Early testing identifies when performance degraded, narrows troubleshooting to recent changes, establishes baselines, and validates architectural choices. Despite vendor claims, switching infrastructure products rarely solves fundamental problems. Vendor-claimed performance improvements mean little if the underlying architecture is inefficient. Meaningful improvements require thoughtful architectural work, not silver-bullet solutions.
Software architects must develop "contextual sense" - knowledge of what's reasonable in a given situation. Rechtin noted architects typically need about 10 years of education and experience before handling system-level problems. The crucial architectural skill isn't knowing patterns but understanding when to apply them. There are no universal solutions; architects must balance stakeholder interests including contractual obligations, revenue, customer satisfaction, cost containment, and creating valuable technology assets. When developers "commit-and-run" with untested code that breaks the build, they halt team flow. Architects should support fast automated testing through mocks or in-memory databases rather than external systems. Invest in making the system faster to work with through simulators or modularized components to improve development speed. System builders often discover that one data model can't serve all business needs equally well. While technical domains allow forced uniqueness, business domains reflect the messy real world. Rather than imposing a single solution, accept multiple, overlapping representations where appropriate, allowing different views to coexist within natural boundaries.
Your database is the permanent home of your most valuable asset - your data. While interfaces and logic evolve rapidly, data structures remain relatively stable, making a solid initial data model critical. Though agile methods popularize designing applications on the fly, this approach risks your data layer. Schema migrations are difficult and error-prone. A fortress-like data model provides security through referential integrity and domain constraints, rejecting invalid data as a final defense against bugs. When evaluating design options, treat uncertainty as a key design driver that determines where to defer commitment and where to partition. Good architecture reduces the significance of design decisions rather than amplifying them. In enterprise development, architects must bridge business and technology, letting business objectives drive technical decisions. Understanding the desired ROI prevents overspending. Create transparency through visible charts and frequent releases. Without clear business direction, developers inadvertently make business decisions by default.
Many passionate architectural frameworks eventually become irrelevant. The greatest risk is solving the wrong problem - no matter how hard we work, our efforts are wasted if we miss what's truly needed. We advocate for simplicity but rarely practice it, justifying complexity with claims of agility or future-proofing. Time inevitably exposes these misguided choices. True simplicity emerges only through perspective. Software architecture carries ethical dimensions. Every architectural decision dictates what users can and cannot do, often more rigidly than law. Consider the multiplier effect: making fields required might save development time but forces countless users to gather additional information. Burdening others for your convenience is unethical. Performance is critical yet frequently deprioritized. Systems must balance implementation team productivity, human interaction efficiency, and non-interactive component performance. Architects must address all these dimensions. Architectural success is measured by how well it serves human needs while adapting to change. Great architecture creates spaces where both software and people thrive. Build with humility, flexibility, and appreciation for technology's human dimension.