144 lines
18 KiB
Plaintext
144 lines
18 KiB
Plaintext
|
||
|
||
|
||
|
||
[38;5;12m [39m[38;2;255;187;0m[1m[4mAwesome Software Architecture[0m
|
||
[38;5;12m [39m
|
||
[38;5;14m[1m![0m[38;5;12mawesome-badge[39m[38;5;14m[1m (https://awesome.re/badge.svg)[0m[38;5;12m (https://awesome.re)[39m
|
||
[38;5;12m [39m
|
||
[38;5;14m[1mSoftware architecture[0m[38;5;12m (https://en.wikipedia.org/wiki/Software_architecture) aims to describe the high level [39m
|
||
[38;5;12mstructures of software as well as the discipline of creating them. As this topic is pretty broad, it might [39m
|
||
[38;5;12mcontain some resources that are also present in more niche lists. [39m
|
||
|
||
|
||
[38;5;12m If you like this list, consider showing your support by following on Twitter. [39m
|
||
|
||
[38;5;12m [39m
|
||
|
||
|
||
[38;2;255;187;0m[4mContents[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mPrinciples[0m[38;5;12m (#principles)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDesign Patterns[0m[38;5;12m (#design-patterns)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mScalability and Resilience[0m[38;5;12m (#scalability-and-resilience)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mMethodology[0m[38;5;12m (#methodology)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocumentation[0m[38;5;12m (#documentation)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mWorkshop formats[0m[38;5;12m (#workshop-formats)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mModeling[0m[38;5;12m (#modeling)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mTools[0m[38;5;12m (#tools)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mFrameworks[0m[38;5;12m (#frameworks)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mAgile[0m[38;5;12m (#agile)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mLean software development[0m[38;5;12m (#lean-software-development)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mExtreme programming[0m[38;5;12m (#extreme-programming)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mDevOps[0m[38;5;12m (#devops)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBonus[0m[38;5;12m (#bonus)[39m
|
||
|
||
[38;2;255;187;0m[4mPrinciples[0m
|
||
[38;5;12m- [39m[38;5;14m[1mFlexibility[0m[38;5;12m (https://medium.com/faun/flexibility-a-software-architecture-principle-6eafe045a1d4) - Able to adapt to changes in both environment and usability requirements without encompassing structural changes.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSOLID[0m[38;5;12m (https://www.digitalocean.com/community/conceptual-articles/s-o-l-i-d-the-first-five-principles-of-object-oriented-design) - Lend to developing software with considerations for maintaining and extending as the project grows[39m
|
||
|
||
[38;2;255;187;0m[4mDesign Patterns[0m
|
||
[38;5;12m- [39m[38;5;14m[1mPorts and adapters pattern[0m[38;5;12m (https://jmgarridopaz.github.io/content/hexagonalarchitecture.html) - Decouple the application core logic from the services it uses.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mObserver pattern[0m[38;5;12m (https://medium.com/datadriveninvestor/design-patterns-a-quick-guide-to-observer-pattern-d0622145d6c2) - One-to-many state change notification.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDesign Patterns: Elements of Reusable Object-Oriented Software, by Gamma et al[0m[38;5;12m (https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/) - The one that started it all :orange_book:.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSoftware Design Patterns: A Guide[0m[38;5;12m (https://airbrake.io/blog/design-patterns/software-design-patterns-guide) - Introduction to common software design patterns.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSoftware Design Patterns and Principes (quick overview)[0m[38;5;12m (https://www.youtube.com/watch?v=WV2Ed1QTst8) - Reasons about common design patterns as well as their upsides and downsides 🎥.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mCQRS[0m[38;5;12m (https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs) - Segregate operations that read data from operations that update data by using separate interfaces.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mEvent Sourcing[0m[38;5;12m (https://docs.microsoft.com/en-us/azure/architecture/patterns/event-sourcing) - 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.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mFeature Toggles[0m[38;5;12m (https://www.martinfowler.com/articles/feature-toggles.html) - Feature Toggles (often also refered to as Feature Flags) are a powerful technique, allowing teams to modify system behavior without changing code.[39m
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mBehavior[0m[38;5;14m[1m [0m[38;5;14m[1mDriven[0m[38;5;14m[1m [0m[38;5;14m[1mDevelopment[0m[38;5;14m[1m [0m[38;5;14m[1m(BDD)[0m[38;5;14m[1m [0m[38;5;14m[1mand[0m[38;5;14m[1m [0m[38;5;14m[1mFunctional[0m[38;5;14m[1m [0m[38;5;14m[1mTesting[0m[38;5;12m [39m[38;5;12m(https://medium.com/javascript-scene/behavior-driven-development-bdd-and-functional-testing-62084ad7f1f2)[39m[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;12mBDD[39m[38;5;12m [39m[38;5;12muses[39m[38;5;12m [39m[38;5;12mhuman-readable[39m[38;5;12m [39m[38;5;12mdescriptions[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12msoftware[39m[38;5;12m [39m[38;5;12muser[39m[38;5;12m [39m[38;5;12mrequirements[39m[38;5;12m [39m[38;5;12mas[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mbasis[39m
|
||
[38;5;12mfor[39m[38;5;12m [39m[38;5;12msoftware[39m[38;5;12m [39m[38;5;12mtests.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mN-tier architecture style[0m[38;5;12m (https://docs.microsoft.com/en-us/azure/architecture/guide/architecture-styles/n-tier) - Layers are a way to separate responsibilities and manage dependencies.[39m
|
||
|
||
[38;2;255;187;0m[4mScalability and Resilience[0m
|
||
[38;5;12m- [39m[38;5;14m[1mCircuit Breaker[0m[38;5;12m (https://martinfowler.com/bliki/CircuitBreaker.html) - Protecting failing resources to prevent cascading failures.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBulkhead[0m[38;5;12m (https://docs.microsoft.com/en-us/azure/architecture/patterns/bulkhead) - Partition resources to isolate failures.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mLeader Election[0m[38;5;12m (https://docs.microsoft.com/en-us/azure/architecture/patterns/leader-election) - Coordinate distributed workloads by electing a leader.[39m
|
||
|
||
[38;2;255;187;0m[4mMethodology[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mNo silver bullet, by Brooks[0m[38;5;12m (http://worrydream.com/refs/Brooks-NoSilverBullet.pdf) - Making a case for growing software in small increments :orange_book:.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mClean Architecture, by Martin[0m[38;5;12m (https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164) - Key principles and concepts for building sustainable and maintainable software :orange_book:.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mTechnical Debt, by Fowler[0m[38;5;12m (https://martinfowler.com/bliki/TechnicalDebt.html) - Cost and impact of accumulating technical debt.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mThe Magic Tricks of Testing, by Metz[0m[38;5;12m (https://www.youtube.com/watch?v=URSWYvyc42M) - Minimalistic ideals as a practical and pragmatic approach to software testing 🎥.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mTDD, Where did it all go wrong?, by Cooper[0m[38;5;12m (https://www.infoq.com/presentations/tdd-original/) - Suggestion on TDD practices and boundaries to reduce coupling 🎥.[39m
|
||
|
||
[38;2;255;187;0m[4mDocumentation[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1marc42[0m[38;5;12m (https://arc42.org/) - Template for documentation and communication of software and system architectures.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mArchitectural Decision Records[0m[38;5;12m (https://adr.github.io/) - Version and document architectural decisions the same way you do with code.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDocumenting architecture[0m[38;5;12m (https://dzone.com/articles/documenting-architecture-1) - Pragmatic tips on how to effectively document software architecture.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mWorkshop formats[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mEvent Storming[0m[38;5;12m (https://www.eventstorming.com/) - Format for exploring domain driven-design.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mMoSCoW Prioritization[0m[38;5;12m (https://www.knowledgehut.com/blog/agile/how-to-prioritise-requirements-with-the-moscow-technique) - Fast and dead-simple way of prioritizing requirements.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mStory mapping[0m[38;5;12m (https://www.jpattonassociates.com/wp-content/uploads/2015/03/story_mapping.pdf) - Visualize your requirements by creating story maps.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mImpact mapping[0m[38;5;12m (https://www.impactmapping.org/) - A strategic planning technique used for building products and delivering projects.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBusiness Model Canvas[0m[38;5;12m (https://en.wikipedia.org/wiki/Business_Model_Canvas) - Business plans made simple and visual.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBusiness Model Generation, by Osterwalder & Pigneur[0m[38;5;12m (https://www.amazon.com/Business-Model-Generation-Visionaries-Challengers/dp/0470876417) - Easily visualize your value proposition, costs and revenue streams :orange_book:.[39m
|
||
|
||
[38;2;255;187;0m[4mModeling[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mThe C4 Model[0m[38;5;12m (https://c4model.com/) - Describe software using Context, Containers, Components and Code.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mWikipedia: Data modeling[0m[38;5;12m (https://en.wikipedia.org/wiki/Data_modeling) - Great, short, introduction to data modeling.[39m
|
||
|
||
[38;2;255;187;0m[4mTools[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mSparx Systems Enterprise Architect[0m[38;5;12m (https://sparxsystems.com/products/ea/index.html) - Object-oriented modelling suite. Only available natively for Windows.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mVisual Paradigm[0m[38;5;12m (https://www.visual-paradigm.com/) - Similar to Enterprise Architect. Available for multiple platforms.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mLucidchart[0m[38;5;12m (https://www.lucidchart.com) - Paid cloud-based diagram editor. Available on all common platforms.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDraw.io[0m[38;5;12m (https://www.draw.io) - Free and simple diagram editor. Comparable to Visio and its likes. Available on all common platforms.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mStructurizr[0m[38;5;12m (https://structurizr.com) - Modelling tool based on the C4 Model (see above).[39m
|
||
[38;5;12m- [39m[38;5;14m[1mPlantUML[0m[38;5;12m (http://plantuml.com/) - Like markdown for diagrams, PlantUML renders an english-like grammer into diagrams.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mPlantUML for Atlassian[0m[38;5;12m (https://marketplace.atlassian.com/apps/1215115/plantuml-for-confluence-cloud?hosting=cloud&tab=overview) - Adds support for PlantUML-based diagrams in the atlassian suite.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSketchboard.io[0m[38;5;12m (https://sketchboard.io/) - Collaborative sketchboarding.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mERD Lab[0m[38;5;12m (https://www.erdlab.io/) - Free cloud based entity relationship diagram (ERD) tool made for developers.[39m
|
||
|
||
[38;2;255;187;0m[4mFrameworks[0m
|
||
|
||
[38;2;255;187;0m[4mAgile[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mScrum[0m[38;5;12m (https://www.scrumguides.org/) - Framework for developing and maintaining complex products.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSAFe[0m[38;5;12m (https://www.scaledagileframework.com/) - Scalable agile framework.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mNexus[0m[38;5;12m (https://www.scrum.org/resources/scaling-scrum) - Scalable Scrum according to Ken Schwaber, co-creator of Scrum. [39m
|
||
[38;5;12m- [39m[38;5;14m[1mThe death of Agile, by Allen Holub[0m[38;5;12m (https://www.youtube.com/watch?v=HZyRQ8Uhhmk&feature=youtu.be) - How "Agile" has moved away from the basic principles of agility, and what we need to do to fix things 🎥.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mAgile Architecture Pt. 1, by Allen Holub[0m[38;5;12m (https://www.youtube.com/watch?v=0kRCFVGpX7k) - How do we work with architecture in a agile world 🎥. [39m
|
||
[38;5;12m- [39m[38;5;14m[1mAgile Architecture Pt. 2, by Allen Holub[0m[38;5;12m (https://www.youtube.com/watch?v=txbS0WJC1bo) - How do we work with architecture in a agile world 🎥. [39m
|
||
[38;2;255;187;0m[4mLean software development[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mWikipedia: Lean Software Development[0m[38;5;12m (https://en.wikipedia.org/wiki/Lean_software_development) - Translation of lean manufacturing for the software development domain.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mRolling rocks downhill, by Clarke Ching[0m[38;5;12m (https://www.amazon.com/Rolling-Rocks-Downhill-Software-Projects/dp/1505446511) - Business novel about agile and lean software development :orange_book:.[39m
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mThe[0m[38;5;14m[1m [0m[38;5;14m[1mGoal:[0m[38;5;14m[1m [0m[38;5;14m[1mA[0m[38;5;14m[1m [0m[38;5;14m[1mProcess[0m[38;5;14m[1m [0m[38;5;14m[1mof[0m[38;5;14m[1m [0m[38;5;14m[1mOngoing[0m[38;5;14m[1m [0m[38;5;14m[1mImprovement,[0m[38;5;14m[1m [0m[38;5;14m[1mby[0m[38;5;14m[1m [0m[38;5;14m[1mGoldratt[0m[38;5;12m [39m[38;5;12m(https://www.amazon.com/Goal-Process-Ongoing-Improvement/dp/0884270610)[39m[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;12mBusiness[39m[38;5;12m [39m[38;5;12mnovel[39m[38;5;12m [39m[38;5;12mabout[39m[38;5;12m [39m[38;5;12mcontiuous[39m[38;5;12m [39m[38;5;12mimprovements[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mmanufacturing[39m[38;5;12m [39m[38;5;12msetting.[39m[38;5;12m [39m[38;5;12mEasily[39m[38;5;12m [39m[38;5;12madaptable[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12msoftware[39m[38;5;12m [39m[38;5;12mdevelopment[39m[38;5;12m [39m
|
||
[38;5;12mas[39m[38;5;12m [39m[38;5;12mwell[39m[38;5;12m [39m[38;5;12m:orange_book:.[39m
|
||
[38;2;255;187;0m[4mExtreme programming[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mExtreme Programming[0m[38;5;12m (http://www.extremeprogramming.org/) - The most specific of the popular agile processes, focusing on engineering and development practices.[39m
|
||
|
||
[38;2;255;187;0m[4mDevOps[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mWikipedia: DevOps[0m[38;5;12m (https://en.wikipedia.org/wiki/DevOps) - Combining software development and operations practices to shorten time to market while maintaining high quality.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mThe Phoenix Project, by Gene Kim et al[0m[38;5;12m (https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/0988262592) - IT, Devops and helping your Business win :orange_book:.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mThe Unicorn Project, by Gene Kim[0m[38;5;12m (https://www.amazon.com/Unicorn-Project-Developers-Disruption-Thriving-ebook/dp/B07QT9QR41) - Developers, Digital Disruption and Thriving in the Age of Data :orange_book:.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mKeep CALMS and carry on[0m[38;5;12m (https://dwpdigital.blog.gov.uk/2019/03/25/keep-calms-and-carry-on-how-we-do-devops/) - How BPDTS use the CALMS model as a reference for their devops adaptations. [39m
|
||
[38;5;12m- [39m[38;5;14m[1mChaos Engineering at Netfix[0m[38;5;12m (https://www.youtube.com/watch?v=6ilMZqKdMMU) - Chaos Engineering is a new discipline within Software Engineering, building confidence in the behavior of distributed systems at scale 🎥. [39m
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mAdidas[0m[38;5;14m[1m [0m[38;5;14m[1mDevOps[0m[38;5;14m[1m [0m[38;5;14m[1mMaturity[0m[38;5;14m[1m [0m[38;5;14m[1mFramework[0m[38;5;12m [39m[38;5;12m(https://github.com/adidas/adidas-devops-maturity-framework)[39m[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;12mBased[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mC.A.L.M.S.[39m[38;5;12m [39m[38;5;12mdefinition[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mDevOps,[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mframework[39m[38;5;12m [39m[38;5;12mdefines[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mset[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mcapabilities[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mguidelines[39m[38;5;12m [39m[38;5;12mthat[39m[38;5;12m [39m[38;5;12mwhen[39m[38;5;12m [39m[38;5;12madopted,[39m[38;5;12m [39m[38;5;12mincreases[39m[38;5;12m [39m[38;5;12mefficiency,[39m[38;5;12m [39m
|
||
[38;5;12meffectiveness[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mhappiness[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mteam.[39m
|
||
[38;2;255;187;0m[4mBonus[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mHow to learn software design and architecture - a roadmap[0m[38;5;12m (https://www.freecodecamp.org/news/software-design/) - Additional things helpful to learn to get a firm understanding of software architecture.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSoftware Architect Roadmap[0m[38;5;12m (https://roadmap.sh/software-architect) - A complete and structured guide to become a Software Architect.[39m
|
||
|
||
[38;2;255;187;0m[4mContributing[0m
|
||
|
||
[38;5;12mWant to contribute into making this list even better? Yay, that's awesome! Before you get started though, please have a look at our .[39m
|
||
|
||
[38;2;255;187;0m[4mLicense[0m
|
||
|
||
[38;5;14m[1m![0m[38;5;12mCC0[39m[38;5;14m[1m (http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)[0m[38;5;12m (https://creativecommons.org/publicdomain/zero/1.0/)[39m
|
||
|
||
[38;5;12mTo the extent possible under law, [39m[38;5;14m[1msimskij[0m[38;5;12m (https://github.com/simskij) has waived all copyright and related or neighboring rights to this work.[39m
|
||
|
||
[38;5;12msoftwarearchitecture Github: https://github.com/simskij/awesome-software-architecture[39m
|