Files
awesome-awesomeness/html/softwarearchitecture.md2.html
2025-07-18 23:13:11 +02:00

282 lines
13 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div data-align="center">
<p><img src="./banner.png" /></p>
<h1 id="awesome-software-architecture">Awesome Software
Architecture<br/></h1>
<p><a href="https://awesome.re"><img src="https://awesome.re/badge.svg"
alt="awesome-badge" /></a></p>
<p><a
href="https://en.wikipedia.org/wiki/Software_architecture">Software
architecture</a> aims to describe the high level structures of software
as well as the discipline of creating them. As this topic is pretty
broad, it might contain some resources that are also present in more
niche lists.</p>
<p><i> If you like this list, consider showing your support by following
<a href="https://twitter.com/0x12b/"><span class="citation"
data-cites="0x12b">@0x12b</span></a> on Twitter. </i></p>
</div>
<h2 id="contents">Contents</h2>
<ul>
<li><a href="#principles">Principles</a></li>
<li><a href="#design-patterns">Design Patterns</a>
<ul>
<li><a href="#scalability-and-resilience">Scalability and
Resilience</a></li>
</ul></li>
<li><a href="#methodology">Methodology</a></li>
<li><a href="#documentation">Documentation</a></li>
<li><a href="#workshop-formats">Workshop formats</a></li>
<li><a href="#modeling">Modeling</a></li>
<li><a href="#tools">Tools</a></li>
<li><a href="#frameworks">Frameworks</a>
<ul>
<li><a href="#agile">Agile</a></li>
<li><a href="#lean-software-development">Lean software
development</a></li>
<li><a href="#extreme-programming">Extreme programming</a></li>
<li><a href="#devops">DevOps</a></li>
</ul></li>
<li><a href="#bonus">Bonus</a></li>
</ul>
<h2 id="principles">Principles</h2>
<ul>
<li><a
href="https://medium.com/faun/flexibility-a-software-architecture-principle-6eafe045a1d4">Flexibility</a>
- Able to adapt to changes in both environment and usability
requirements without encompassing structural changes.</li>
<li><a
href="https://www.digitalocean.com/community/conceptual-articles/s-o-l-i-d-the-first-five-principles-of-object-oriented-design">SOLID</a>
- Lend to developing software with considerations for maintaining and
extending as the project grows</li>
</ul>
<h2 id="design-patterns">Design Patterns</h2>
<ul>
<li><a
href="https://jmgarridopaz.github.io/content/hexagonalarchitecture.html">Ports
and adapters pattern</a> - Decouple the application core logic from the
services it uses.</li>
<li><a
href="https://medium.com/datadriveninvestor/design-patterns-a-quick-guide-to-observer-pattern-d0622145d6c2">Observer
pattern</a> - One-to-many state change notification.</li>
<li><a
href="https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/">Design
Patterns: Elements of Reusable Object-Oriented Software, by Gamma et
al</a> - The one that started it all :orange_book:.</li>
<li><a
href="https://airbrake.io/blog/design-patterns/software-design-patterns-guide">Software
Design Patterns: A Guide</a> - Introduction to common software design
patterns.</li>
<li><a href="https://www.youtube.com/watch?v=WV2Ed1QTst8">Software
Design Patterns and Principes (quick overview)</a> - Reasons about
common design patterns as well as their upsides and downsides 🎥.</li>
<li><a
href="https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs">CQRS</a>
- Segregate operations that read data from operations that update data
by using separate interfaces.</li>
<li><a
href="https://docs.microsoft.com/en-us/azure/architecture/patterns/event-sourcing">Event
Sourcing</a> - 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.</li>
<li><a
href="https://www.martinfowler.com/articles/feature-toggles.html">Feature
Toggles</a> - Feature Toggles (often also refered to as Feature Flags)
are a powerful technique, allowing teams to modify system behavior
without changing code.</li>
<li><a
href="https://medium.com/javascript-scene/behavior-driven-development-bdd-and-functional-testing-62084ad7f1f2">Behavior
Driven Development (BDD) and Functional Testing</a> - BDD uses
human-readable descriptions of software user requirements as the basis
for software tests.</li>
<li><a
href="https://docs.microsoft.com/en-us/azure/architecture/guide/architecture-styles/n-tier">N-tier
architecture style</a> - Layers are a way to separate responsibilities
and manage dependencies.</li>
</ul>
<h3 id="scalability-and-resilience">Scalability and Resilience</h3>
<ul>
<li><a href="https://martinfowler.com/bliki/CircuitBreaker.html">Circuit
Breaker</a> - Protecting failing resources to prevent cascading
failures.</li>
<li><a
href="https://docs.microsoft.com/en-us/azure/architecture/patterns/bulkhead">Bulkhead</a>
- Partition resources to isolate failures.</li>
<li><a
href="https://docs.microsoft.com/en-us/azure/architecture/patterns/leader-election">Leader
Election</a> - Coordinate distributed workloads by electing a
leader.</li>
</ul>
<h2 id="methodology">Methodology</h2>
<ul>
<li><a href="http://worrydream.com/refs/Brooks-NoSilverBullet.pdf">No
silver bullet, by Brooks</a> - Making a case for growing software in
small increments :orange_book:.</li>
<li><a
href="https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164">Clean
Architecture, by Martin</a> - Key principles and concepts for building
sustainable and maintainable software :orange_book:.</li>
<li><a
href="https://martinfowler.com/bliki/TechnicalDebt.html">Technical Debt,
by Fowler</a> - Cost and impact of accumulating technical debt.</li>
<li><a href="https://www.youtube.com/watch?v=URSWYvyc42M">The Magic
Tricks of Testing, by Metz</a> - Minimalistic ideals as a practical and
pragmatic approach to software testing 🎥.</li>
<li><a href="https://www.infoq.com/presentations/tdd-original/">TDD,
Where did it all go wrong?, by Cooper</a> - Suggestion on TDD practices
and boundaries to reduce coupling 🎥.</li>
</ul>
<h2 id="documentation">Documentation</h2>
<ul>
<li><a href="https://arc42.org/">arc42</a> - Template for documentation
and communication of software and system architectures.</li>
<li><a href="https://adr.github.io/">Architectural Decision Records</a>
- Version and document architectural decisions the same way you do with
code.</li>
<li><a
href="https://dzone.com/articles/documenting-architecture-1">Documenting
architecture</a> - Pragmatic tips on how to effectively document
software architecture.</li>
</ul>
<h2 id="workshop-formats">Workshop formats</h2>
<ul>
<li><a href="https://www.eventstorming.com/">Event Storming</a> - Format
for exploring domain driven-design.</li>
<li><a
href="https://www.knowledgehut.com/blog/agile/how-to-prioritise-requirements-with-the-moscow-technique">MoSCoW
Prioritization</a> - Fast and dead-simple way of prioritizing
requirements.</li>
<li><a
href="https://www.jpattonassociates.com/wp-content/uploads/2015/03/story_mapping.pdf">Story
mapping</a> - Visualize your requirements by creating story maps.</li>
<li><a href="https://www.impactmapping.org/">Impact mapping</a> - A
strategic planning technique used for building products and delivering
projects.</li>
<li><a
href="https://en.wikipedia.org/wiki/Business_Model_Canvas">Business
Model Canvas</a> - Business plans made simple and visual.</li>
<li><a
href="https://www.amazon.com/Business-Model-Generation-Visionaries-Challengers/dp/0470876417">Business
Model Generation, by Osterwalder &amp; Pigneur</a> - Easily visualize
your value proposition, costs and revenue streams :orange_book:.</li>
</ul>
<h2 id="modeling">Modeling</h2>
<ul>
<li><a href="https://c4model.com/">The C4 Model</a> - Describe software
using Context, Containers, Components and Code.</li>
<li><a href="https://en.wikipedia.org/wiki/Data_modeling">Wikipedia:
Data modeling</a> - Great, short, introduction to data modeling.</li>
</ul>
<h2 id="tools">Tools</h2>
<ul>
<li><a href="https://sparxsystems.com/products/ea/index.html">Sparx
Systems Enterprise Architect</a> - Object-oriented modelling suite. Only
available natively for Windows.</li>
<li><a href="https://www.visual-paradigm.com/">Visual Paradigm</a> -
Similar to Enterprise Architect. Available for multiple platforms.</li>
<li><a href="https://www.lucidchart.com">Lucidchart</a> - Paid
cloud-based diagram editor. Available on all common platforms.</li>
<li><a href="https://www.draw.io">Draw.io</a> - Free and simple diagram
editor. Comparable to Visio and its likes. Available on all common
platforms.</li>
<li><a href="https://structurizr.com">Structurizr</a> - Modelling tool
based on the C4 Model (see above).</li>
<li><a href="http://plantuml.com/">PlantUML</a> - Like markdown for
diagrams, PlantUML renders an english-like grammer into diagrams.</li>
<li><a
href="https://marketplace.atlassian.com/apps/1215115/plantuml-for-confluence-cloud?hosting=cloud&amp;tab=overview">PlantUML
for Atlassian</a> - Adds support for PlantUML-based diagrams in the
atlassian suite.</li>
<li><a href="https://sketchboard.io/">Sketchboard.io</a> - Collaborative
sketchboarding.</li>
<li><a href="https://www.erdlab.io/">ERD Lab</a> - Free cloud based
entity relationship diagram (ERD) tool made for developers.</li>
</ul>
<h2 id="frameworks">Frameworks</h2>
<h3 id="agile">Agile</h3>
<ul>
<li><p><a href="https://www.scrumguides.org/">Scrum</a> - Framework for
developing and maintaining complex products.</p></li>
<li><p><a href="https://www.scaledagileframework.com/">SAFe</a> -
Scalable agile framework.</p></li>
<li><p><a href="https://www.scrum.org/resources/scaling-scrum">Nexus</a>
- Scalable Scrum according to Ken Schwaber, co-creator of
Scrum.</p></li>
<li><p><a
href="https://www.youtube.com/watch?v=HZyRQ8Uhhmk&amp;feature=youtu.be">The
death of Agile, by Allen Holub</a> - How “Agile” has moved away from the
basic principles of agility, and what we need to do to fix things
🎥.</p></li>
<li><p><a href="https://www.youtube.com/watch?v=0kRCFVGpX7k">Agile
Architecture Pt. 1, by Allen Holub</a> - How do we work with
architecture in a agile world 🎥.</p></li>
<li><p><a href="https://www.youtube.com/watch?v=txbS0WJC1bo">Agile
Architecture Pt. 2, by Allen Holub</a> - How do we work with
architecture in a agile world 🎥. ### Lean software development</p></li>
<li><p><a
href="https://en.wikipedia.org/wiki/Lean_software_development">Wikipedia:
Lean Software Development</a> - Translation of lean manufacturing for
the software development domain.</p></li>
<li><p><a
href="https://www.amazon.com/Rolling-Rocks-Downhill-Software-Projects/dp/1505446511">Rolling
rocks downhill, by Clarke Ching</a> - Business novel about agile and
lean software development :orange_book:.</p></li>
<li><p><a
href="https://www.amazon.com/Goal-Process-Ongoing-Improvement/dp/0884270610">The
Goal: A Process of Ongoing Improvement, by Goldratt</a> - Business novel
about contiuous improvements in a manufacturing setting. Easily
adaptable to software development as well :orange_book:. ### Extreme
programming</p></li>
<li><p><a href="http://www.extremeprogramming.org/">Extreme
Programming</a> - The most specific of the popular agile processes,
focusing on engineering and development practices.</p></li>
</ul>
<h3 id="devops">DevOps</h3>
<ul>
<li><p><a href="https://en.wikipedia.org/wiki/DevOps">Wikipedia:
DevOps</a> - Combining software development and operations practices to
shorten time to market while maintaining high quality.</p></li>
<li><p><a
href="https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/0988262592">The
Phoenix Project, by Gene Kim et al</a> - IT, Devops and helping your
Business win :orange_book:.</p></li>
<li><p><a
href="https://www.amazon.com/Unicorn-Project-Developers-Disruption-Thriving-ebook/dp/B07QT9QR41">The
Unicorn Project, by Gene Kim</a> - Developers, Digital Disruption and
Thriving in the Age of Data :orange_book:.</p></li>
<li><p><a
href="https://dwpdigital.blog.gov.uk/2019/03/25/keep-calms-and-carry-on-how-we-do-devops/">Keep
CALMS and carry on</a> - How BPDTS use the CALMS model as a reference
for their devops adaptations.</p></li>
<li><p><a href="https://www.youtube.com/watch?v=6ilMZqKdMMU">Chaos
Engineering at Netfix</a> - Chaos Engineering is a new discipline within
Software Engineering, building confidence in the behavior of distributed
systems at scale 🎥.</p></li>
<li><p><a
href="https://github.com/adidas/adidas-devops-maturity-framework">Adidas
DevOps Maturity Framework</a> - 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. ## Bonus</p></li>
<li><p><a href="https://www.freecodecamp.org/news/software-design/">How
to learn software design and architecture - a roadmap</a> - Additional
things helpful to learn to get a firm understanding of software
architecture.</p></li>
<li><p><a href="https://roadmap.sh/software-architect">Software
Architect Roadmap</a> - A complete and structured guide to become a
Software Architect.</p></li>
</ul>
<h2 id="contributing">Contributing</h2>
<p>Want to contribute into making this list even better? Yay, thats
awesome! Before you get started though, please have a look at our
<a href="code_of_conduct.md">code of conduct</a> and
<a href="contributing.md">contribution guidelines</a>.</p>
<h2 id="license">License</h2>
<p><a href="https://creativecommons.org/publicdomain/zero/1.0/"><img
src="http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg"
alt="CC0" /></a></p>
<p>To the extent possible under law, <a
href="https://github.com/simskij">simskij</a> has waived all copyright
and related or neighboring rights to this work.</p>
<p><a
href="https://github.com/simskij/awesome-software-architecture">softwarearchitecture.md
Github</a></p>