{"slug": "simskij--awesome-software-architecture", "title": "Software Architecture", "description": "A curated list of resources on software architecture", "github_url": "https://github.com/simskij/awesome-software-architecture", "stars": "1.8K", "tag": "Miscellaneous", "entry_count": 67, "subcategory_count": 6, "subcategories": [{"name": "General", "parent": "", "entries": [{"name": "Principles", "url": "#principles", "description": ""}, {"name": "Design Patterns", "url": "#design-patterns", "description": ""}, {"name": "Methodology", "url": "#methodology", "description": ""}, {"name": "Documentation", "url": "#documentation", "description": ""}, {"name": "Workshop formats", "url": "#workshop-formats", "description": ""}, {"name": "Modeling", "url": "#modeling", "description": ""}, {"name": "Tools", "url": "#tools", "description": ""}, {"name": "Frameworks", "url": "#frameworks", "description": ""}, {"name": "Bonus", "url": "#bonus", "description": ""}, {"name": "Flexibility", "url": "https://medium.com/faun/flexibility-a-software-architecture-principle-6eafe045a1d4", "description": "Able to adapt to changes in both environment and usability requirements without encompassing structural changes."}, {"name": "SOLID", "url": "https://www.digitalocean.com/community/conceptual-articles/s-o-l-i-d-the-first-five-principles-of-object-oriented-design", "description": "Lend to developing software with considerations for maintaining and extending as the project grows"}, {"name": "Ports and adapters pattern", "url": "https://jmgarridopaz.github.io/content/hexagonalarchitecture.html", "description": "Decouple the application core logic from the services it uses."}, {"name": "Observer pattern", "url": "https://medium.com/datadriveninvestor/design-patterns-a-quick-guide-to-observer-pattern-d0622145d6c2", "description": "One-to-many state change notification."}, {"name": "Design Patterns: Elements of Reusable Object-Oriented Software, by Gamma et al", "url": "https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/", "description": "The one that started it all :orange\\_book:."}, {"name": "Software Design Patterns: A Guide", "url": "https://airbrake.io/blog/design-patterns/software-design-patterns-guide", "description": "Introduction to common software design patterns."}, {"name": "Software Design Patterns and Principes (quick overview)", "url": "https://www.youtube.com/watch?v=WV2Ed1QTst8", "description": "Reasons about common design patterns as well as their upsides and downsides \ud83c\udfa5."}, {"name": "CQRS", "url": "https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs", "description": "Segregate operations that read data from operations that update data by using separate interfaces."}, {"name": "Event Sourcing", "url": "https://docs.microsoft.com/en-us/azure/architecture/patterns/event-sourcing", "description": "Instead of storing just the current state of the data in a domain, use an append-only store to record the full series of actions taken on that data."}, {"name": "Feature Toggles", "url": "https://www.martinfowler.com/articles/feature-toggles.html", "description": "Feature Toggles (often also refered to as Feature Flags) are a powerful technique, allowing teams to modify system behavior without changing code."}, {"name": "Behavior Driven Development (BDD) and Functional Testing", "url": "https://medium.com/javascript-scene/behavior-driven-development-bdd-and-functional-testing-62084ad7f1f2", "description": "BDD uses human-readable descriptions of software user requirements as the basis for software tests."}, {"name": "N-tier architecture style", "url": "https://docs.microsoft.com/en-us/azure/architecture/guide/architecture-styles/n-tier", "description": "Layers are a way to separate responsibilities and manage dependencies."}]}, {"name": "Scalability and Resilience", "parent": "Design Patterns", "entries": [{"name": "Circuit Breaker", "url": "https://martinfowler.com/bliki/CircuitBreaker.html", "description": "Protecting failing resources to prevent cascading failures."}, {"name": "Bulkhead", "url": "https://docs.microsoft.com/en-us/azure/architecture/patterns/bulkhead", "description": "Partition resources to isolate failures."}, {"name": "Leader Election", "url": "https://docs.microsoft.com/en-us/azure/architecture/patterns/leader-election", "description": "Coordinate distributed workloads by electing a leader."}, {"name": "No silver bullet, by Brooks", "url": "http://worrydream.com/refs/Brooks-NoSilverBullet.pdf", "description": "Making a case for growing software in small increments :orange\\_book:."}, {"name": "Clean Architecture, by Martin", "url": "https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164", "description": "Key principles and concepts for building sustainable and maintainable software :orange\\_book:."}, {"name": "Technical Debt, by Fowler", "url": "https://martinfowler.com/bliki/TechnicalDebt.html", "description": "Cost and impact of accumulating technical debt."}, {"name": "The Magic Tricks of Testing, by Metz", "url": "https://www.youtube.com/watch?v=URSWYvyc42M", "description": "Minimalistic ideals as a practical and pragmatic approach to software testing \ud83c\udfa5."}, {"name": "TDD, Where did it all go wrong?, by Cooper", "url": "https://www.infoq.com/presentations/tdd-original/", "description": "Suggestion on TDD practices and boundaries to reduce coupling \ud83c\udfa5."}, {"name": "arc42", "url": "https://arc42.org/", "description": "Template for documentation and communication of software and system architectures."}, {"name": "Architectural Decision Records", "url": "https://adr.github.io/", "description": "Version and document architectural decisions the same way you do with code."}, {"name": "Documenting architecture", "url": "https://dzone.com/articles/documenting-architecture-1", "description": "Pragmatic tips on how to effectively document software architecture."}, {"name": "Event Storming", "url": "https://www.eventstorming.com/", "description": "Format for exploring domain driven-design."}, {"name": "MoSCoW Prioritization", "url": "https://www.knowledgehut.com/blog/agile/how-to-prioritise-requirements-with-the-moscow-technique", "description": "Fast and dead-simple way of prioritizing requirements."}, {"name": "Story mapping", "url": "https://www.jpattonassociates.com/wp-content/uploads/2015/03/story_mapping.pdf", "description": "Visualize your requirements by creating story maps."}, {"name": "Impact mapping", "url": "https://www.impactmapping.org/", "description": "A strategic planning technique used for building products and delivering projects."}, {"name": "Business Model Canvas", "url": "https://en.wikipedia.org/wiki/Business_Model_Canvas", "description": "Business plans made simple and visual."}, {"name": "Business Model Generation, by Osterwalder & Pigneur", "url": "https://www.amazon.com/Business-Model-Generation-Visionaries-Challengers/dp/0470876417", "description": "Easily visualize your value proposition, costs and revenue streams :orange\\_book:."}, {"name": "The C4 Model", "url": "https://c4model.com/", "description": "Describe software using Context, Containers, Components and Code."}, {"name": "Wikipedia: Data modeling", "url": "https://en.wikipedia.org/wiki/Data_modeling", "description": "Great, short, introduction to data modeling."}, {"name": "Sparx Systems Enterprise Architect", "url": "https://sparxsystems.com/products/ea/index.html", "description": "Object-oriented modelling suite. Only available natively for Windows."}, {"name": "Visual Paradigm", "url": "https://www.visual-paradigm.com/", "description": "Similar to Enterprise Architect. Available for multiple platforms."}, {"name": "Lucidchart", "url": "https://www.lucidchart.com", "description": "Paid cloud-based diagram editor. Available on all common platforms."}, {"name": "Draw.io", "url": "https://www.draw.io", "description": "Free and simple diagram editor. Comparable to Visio and its likes. Available on all common platforms."}, {"name": "Structurizr", "url": "https://structurizr.com", "description": "Modelling tool based on the C4 Model (see above)."}, {"name": "PlantUML", "url": "http://plantuml.com/", "description": "Like markdown for diagrams, PlantUML renders an english-like grammer into diagrams."}, {"name": "PlantUML for Atlassian", "url": "https://marketplace.atlassian.com/apps/1215115/plantuml-for-confluence-cloud?hosting=cloud\\&tab=overview", "description": "Adds support for PlantUML-based diagrams in the atlassian suite."}, {"name": "Sketchboard.io", "url": "https://sketchboard.io/", "description": "Collaborative sketchboarding."}, {"name": "ERD Lab", "url": "https://www.erdlab.io/", "description": "Free cloud based entity relationship diagram (ERD) tool made for developers."}]}, {"name": "Agile", "parent": "Frameworks", "entries": [{"name": "Scrum", "url": "https://www.scrumguides.org/", "description": "Framework for developing and maintaining complex products."}, {"name": "SAFe", "url": "https://www.scaledagileframework.com/", "description": "Scalable agile framework."}, {"name": "Nexus", "url": "https://www.scrum.org/resources/scaling-scrum", "description": "Scalable Scrum according to Ken Schwaber, co-creator of Scrum."}, {"name": "The death of Agile, by Allen Holub", "url": "https://www.youtube.com/watch?v=HZyRQ8Uhhmk\\&feature=youtu.be", "description": "How \"Agile\" has moved away from the basic principles of agility, and what we need to do to fix things \ud83c\udfa5."}, {"name": "Agile Architecture Pt. 1, by Allen Holub", "url": "https://www.youtube.com/watch?v=0kRCFVGpX7k", "description": "How do we work with architecture in a agile world \ud83c\udfa5."}, {"name": "Agile Architecture Pt. 2, by Allen Holub", "url": "https://www.youtube.com/watch?v=txbS0WJC1bo", "description": "How do we work with architecture in a agile world \ud83c\udfa5."}]}, {"name": "Lean software development", "parent": "Frameworks", "entries": [{"name": "Wikipedia: Lean Software Development", "url": "https://en.wikipedia.org/wiki/Lean_software_development", "description": "Translation of lean manufacturing for the software development domain."}, {"name": "Rolling rocks downhill, by Clarke Ching", "url": "https://www.amazon.com/Rolling-Rocks-Downhill-Software-Projects/dp/1505446511", "description": "Business novel about agile and lean software development :orange\\_book:."}, {"name": "The Goal: A Process of Ongoing Improvement, by Goldratt", "url": "https://www.amazon.com/Goal-Process-Ongoing-Improvement/dp/0884270610", "description": "Business novel about contiuous improvements in a manufacturing setting. Easily adaptable to software development as well :orange\\_book:."}]}, {"name": "Extreme programming", "parent": "Frameworks", "entries": [{"name": "Extreme Programming", "url": "http://www.extremeprogramming.org/", "description": "The most specific of the popular agile processes, focusing on engineering and development practices."}]}, {"name": "DevOps", "parent": "Frameworks", "entries": [{"name": "Wikipedia: DevOps", "url": "https://en.wikipedia.org/wiki/DevOps", "description": "Combining software development and operations practices to shorten time to market while maintaining high quality."}, {"name": "The Phoenix Project, by Gene Kim et al", "url": "https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/0988262592", "description": "IT, Devops and helping your Business win :orange\\_book:."}, {"name": "The Unicorn Project, by Gene Kim", "url": "https://www.amazon.com/Unicorn-Project-Developers-Disruption-Thriving-ebook/dp/B07QT9QR41", "description": "Developers, Digital Disruption and Thriving in the Age of Data :orange\\_book:."}, {"name": "Keep CALMS and carry on", "url": "https://dwpdigital.blog.gov.uk/2019/03/25/keep-calms-and-carry-on-how-we-do-devops/", "description": "How BPDTS use the CALMS model as a reference for their devops adaptations."}, {"name": "Chaos Engineering at Netfix", "url": "https://www.youtube.com/watch?v=6ilMZqKdMMU", "description": "Chaos Engineering is a new discipline within Software Engineering, building confidence in the behavior of distributed systems at scale \ud83c\udfa5."}, {"name": "Adidas DevOps Maturity Framework", "url": "https://github.com/adidas/adidas-devops-maturity-framework", "description": "Based in the C.A.L.M.S. definition of DevOps, the framework defines a set of capabilities and guidelines that when adopted, increases efficiency, effectiveness and happiness of the team.", "stars": "538"}, {"name": "How to learn software design and architecture - a roadmap", "url": "https://www.freecodecamp.org/news/software-design/", "description": "Additional things helpful to learn to get a firm understanding of software architecture."}, {"name": "Software Architect Roadmap", "url": "https://roadmap.sh/software-architect", "description": "A complete and structured guide to become a Software Architect."}]}], "name": ""}