System Design Playbook:
Giveaway Alert!!
• System design fundamentals.
• Condensed notes to read before the system design interview.
• Must know concepts from real-world software engineering case studies.
(24 hours only!)
To get it:
1. Like, Retweet & Follow @systemdesignone
2. Reply "Playbook"
Then I'll DM you the details.
𝗧𝗵𝗲 𝗔𝗿𝗰𝗵𝗶𝘁𝗲𝗰𝘁𝘂𝗿𝗲 𝗢𝗳 𝗢𝗽𝗲𝗻 𝗦𝗼𝘂𝗿𝗰𝗲 𝗔𝗽𝗽𝗹𝗶𝗰𝗮𝘁𝗶𝗼𝗻𝘀 (𝗙𝗿𝗲𝗲 𝗘-𝗯𝗼𝗼𝗸)
The authors of 40 open-source apps explain the structure of their software and its purpose in these two publications. What are the main elements of each program? How do they communicate? And what did their creators discover as they evolved?
The authors of these works offer fascinating insights into their thought processes in their responses to these questions.
You can learn here about the architecture of:
- 𝗙𝗶𝗿𝗲𝗳𝗼𝘅 𝗥𝗲𝗹𝗲𝗮𝘀𝗲 𝗘𝗻𝗴𝗶𝗻𝗲𝗲𝗿𝗶𝗻𝗴
- 𝗚𝗶𝘁
- 𝗡𝗴𝗻𝗶𝘅
- 𝗣𝘂𝗽𝗽𝗲𝘁
- 𝗭𝗲𝗿𝗼𝗠𝗤
- 𝗖𝗠𝗮𝗸𝗲
- 𝗧𝗵𝗲 𝗛𝗮𝗱𝗼𝗼𝗽 𝗗𝗶𝘀𝘁𝗿𝗶𝗯𝘂𝘁𝗲𝗱 𝗙𝗶𝗹𝗲 𝗦𝘆𝘀𝘁𝗲𝗺
- 𝗧𝗵𝗲 𝗡𝗼𝗦𝗤𝗟 𝗘𝗰𝗼𝘀𝘆𝘀𝘁𝗲𝗺
- 𝗦𝗲𝗹𝗲𝗻𝗶𝘂𝗺 𝗪𝗲𝗯𝗗𝗿𝗶𝘃𝗲𝗿
- 𝗛𝗶𝗴𝗵-𝗣𝗲𝗿𝗳𝗼𝗿𝗺𝗮𝗻𝗰𝗲 𝗡𝗲𝘁𝘄𝗼𝗿𝗸𝗶𝗻𝗴 𝗶𝗻 𝗖𝗵𝗿𝗼𝗺𝗲
👉 Check the complete book here: https://t.co/bE1YpF4IeG
This paper didn’t go viral but it should have.
A tiny AI model called HRM just beat Claude 3.5 and Gemini.
It doesn’t even use tokens.
They said it was just a research preview.
But it might be the first real shot at AGI.
Here’s what really happened and why OpenAI should be worried: 🧵
90% of C# projects don't need in the beginning:
- Kubernetes
- Microservices
- Separate read/write databases
Instead, you need a simple and organized structure.
So you can move fast.
And get feedback from the market and the actual customers.
But you want to have some upfront design.
So you can evolve the application when the time comes for it.
A few months ago, I stumbled upon the following GitHub repository:
"Evolutionary Architecture by Example"
Link to the repo: https://t.co/ouWHBJ2TZT
This repository shows you how to evolve the .NET architecture of a web project.
It has 4 phases:
1. Initial Architecture: Focus On Simplicity
2. Modules Separation: Focus On Maintainability
3. Microservice Extraction: Focus On Growth
4. Applying Tactical Domain-Driven Design: Focus On Complexity
So, the application architecture starts small.
But over time, it grows as new requirements appear.
Remember:
Simple scales. Complexity fails.
Most developers think graphs are not important for their daily work.
But the reason is that they don't know graph algorithms and their use cases.
You will change your mind once you know these 5 algorithms: ↓
The Christmas Tree of Gubbio, Italy, entered the Guinness World Records in 1991 as the world's largest.
Covering 130,000 m² with a height of 750m, it requires 800+ lights, 7,500m of cable, and 1,300 hours of work yearly.
Solar panels power its energy-saving LED lights.
𝗛𝗼𝘄 𝘁𝗼 𝗱𝗿𝗶𝘃𝗲 𝘆𝗼𝘂𝗿 𝗮𝗿𝗰𝗵𝗶𝘁𝗲𝗰𝘁𝘂𝗿𝗲 𝗱𝗲𝗰𝗶𝘀𝗶𝗼𝗻𝘀 𝘄𝗶𝘁𝗵 𝗮 𝘀𝗶𝗺𝗽𝗹𝗲 𝗳𝗿𝗮𝗺𝗲𝘄𝗼𝗿𝗸
I held a talk last year at the Heapcon conference on how to communicate your software architecture efficiently. 𝗔𝗿𝗰𝗵𝗶𝘁𝗲𝗰𝘁𝘂𝗿𝗮𝗹 𝗱𝗲𝗰𝗶𝘀𝗶𝗼𝗻𝘀 shape our projects, embodying the technical vision and laying the groundwork for systems' long-term sustainability and adaptability.
Those decisions can be as simple as choosing a code style to more important ones, such as which architectural style we select or which database type. After months of engineering, remembering the 𝗿𝗮𝘁𝗶𝗼𝗻𝗮𝗹𝗲 𝗯𝗲𝗵𝗶𝗻𝗱 𝗮 𝗱𝗲𝗰𝗶𝘀𝗶𝗼𝗻 can be tricky because you need more context that influenced it.
Here is our 𝘀𝗶𝗺𝗽𝗹𝗲 𝗳𝗿𝗮𝗺𝗲𝘄𝗼𝗿𝗸 𝗳𝗼𝗿 𝗮𝗿𝗰𝗵𝗶𝘁𝗲𝗰𝘁𝘂𝗿𝗮𝗹 𝗱𝗲𝗰𝗶𝘀𝗶𝗼𝗻𝘀:
𝟭. 𝗗𝗶𝘀𝗰𝘂𝘀𝘀𝗶𝗼𝗻
When some of the requirements came up, we needed to discuss them first. We have weekly recurring places for conversation, where we discuss spikes, challenges, and decisions.
Some discussions led to the Request for Comments (RFC) process.
𝟮. 𝗥𝗲𝗾𝘂𝗲𝘀𝘁 𝗳𝗼𝗿 𝗖𝗼𝗺𝗺𝗲𝗻𝘁𝘀 (𝗥𝗙𝗖)
In this process, we create RFC documents, a formal approach to proposing changes, improvements, or introducing new features within a project. These documents have the following structure:
🔹 Summary - what is it about
🔹 Scope - what is our scope
🔹 Participants - who work on this
🔹 Status - in which status it is
🔹 Proposal - the central part, what we propose as a solution
🔹 Pros/Cons - what are the pros/cons of our approach
🔹 Alternatives - what are alternatives to our proposal
🔹 Questions - if we have some open questions
🔹 Conclusion - what we conclude in the end
The RFC process usually goes in three steps:
1. Creation of the RFC
2. Comments
3. Conclusion
When working on RFC, we also include two things:
🔹 Our internal 𝗧𝗲𝗰𝗵 𝗥𝗮𝗱𝗮𝗿 (you can also use Thoughworks radar or some other)
🔹 Our internal 𝗧𝗲𝗰𝗵 𝘀𝘁𝗮𝗻𝗱𝗮𝗿𝗱𝘀 (e.g., how do we do logging, exception handling, etc.)
𝟯. 𝗔𝗿𝗰𝗵𝗶𝘁𝗲𝗰𝘁𝘂𝗿𝗮𝗹 𝗗𝗲𝗰𝗶𝘀𝗶𝗼𝗻 𝗥𝗲𝗰𝗼𝗿𝗱𝘀 (𝗔𝗗𝗥)
When we have a conclusion from the RFC document, we use those to create ADRs. ADRs are documents that capture essential decisions about a software system's architecture. Usually, we store it in the codebase, close to the issues they describe. They record the decision itself, the context in which it was made, the factors considered, and the expected impact. By providing a historical record, ADRs help communicate decisions to stakeholders, ensure consistency in decision-making, and promote transparency and accountability.
ADRs usually have the following 𝘀𝘁𝗿𝘂𝗰𝘁𝘂𝗿𝗲:
🔹 Title
🔹 Status
🔹 Context
🔹 Decision
🔹 Consequences
When we finish the process, we can continue implementing our requirements.
#softwareengineering #programming #softwaredesign