Overview of the ADM Process
Application Dependency Mapping goes beyond simply listing code libraries
👋 Hi, this is Thomas. Welcome to a new edition of Beyond Runtime, where I dive into the messy, fascinating world of distributed systems, debugging, AI, and system design. All through the lens of a CTO with 20+ years in the backend trenches.
QUOTE OF THE WEEK:
“[…] software architecture is a set of abstractions.” - George Fairbanks
Application dependency mapping (ADM) is a comprehensive approach to understanding the intricate relationships between the various components of a software system. By creating a detailed topological map of the system's elements, including components, channels, apps, ports, and services, ADM provides developers with a clear picture of how everything fits together.
This process goes beyond simply listing the code libraries used in an application; it also encompasses external tools and services that the system relies on, such as managed service providers, monitoring tools, and logging systems.
The ADM process consists of the following steps:
System Discovery: The first step in ADM is to identify all the components and dependencies within the system. This can be achieved through a combination of manual mapping, automated mapping using specialized tools, server agent data collection, orchestration platform configuration analysis, and network monitoring.
Visualization: Once the components and dependencies have been identified, the next step is to create visual representations of the system, showcasing the relationships between the various elements. By creating clear, accessible diagrams that represent the system's layers, components, and connections, teams can make abstract ideas more tangible and improve communication.
Documentation: Detailed information about each component and dependency should be recorded, including their purpose, configuration, and any potential risks or limitations. This documentation serves as a valuable reference for both technical and non-technical personnel, helping to streamline application development and the system design process.
Monitoring: By implementing monitoring tools and processes, teams can keep track of any changes in the system's components and dependencies, as well as monitor overall system health. This allows for proactive identification and resolution of potential issues before they escalate into more significant problems.
Maintenance: As the system evolves, it is crucial to regularly update the ADM to reflect any changes or additions. This ongoing maintenance process helps keep the ADM relevant and ensures that it remains a valuable tool for the development team.
By following these key steps in the application dependency mapping process, development teams can create a comprehensive, up-to-date representation of their software system, enabling them to make informed decisions, optimize performance, and mitigate potential risks.
💜 This newsletter is sponsored by Multiplayer.app. AI-powered debugging for distributed systems.
I originally wrote about this topic in this article:
I explored these topics:
System discovery techniques
The role of architecture diagrams
Application dependency mapping example
Application dependency mapping best practices
📚 Interesting Articles & Resources
Rearchitecting core services at X
This post details how X (formerly Twitter) restructured its core service, Tweetypie, by separating the read and write paths. The new architecture involves the Tweet Entity Service, which enhances scalability and speed by utilizing optimized RPC batching, a reusable entity platform, and Strato's federated ecosystem.
Exactly-Once Payments At Airbnb - Alvaro Duran
Airbnb's payment system avoids duplicate charges while guaranteeing that every transaction is processed precisely once. Key learnings for software engineers include the importance of handling failures gracefully, using idempotency to prevent double processing, and the value of strong coordination between services to maintain accuracy and reliability.
Design a Scalable Notification Service - System Design Interview - Ashish Pratap Singh
This is a detailed guide for building a robust notification service that can handle large volumes of messages efficiently. It emphasizes the importance of decoupling components to enable scalability, using message queues for asynchronous processing, and implementing horizontal scaling to accommodate traffic spikes.