#9 The Two A's Framework đď¸
Engineer's Guide to developing the Archaeologist and Architect Mindset
Early in my career, I saw (and made) the mistake of jumping into some technical decisions without fully understanding the problem at hand. This often happened either because people, including myself, thought we knew âeverythingâ needed to solve the problem, or because we were pressured by time constraints to come up with a quick solution. The latter is especially common in technical interviews.
I've conducted 90+ interviews in the past 4-ish years and I have seen many candidates rush into making decisions during system design interviews. My friends and I have shared stories about times when we accidentally rushed to a specific solution or maintained complex solutions without considering simpler ones (no KISS principle there). And the list goes on.
Situations can vary a lot, but they all share a common issue: A weak decision tree.
Engineers face many technical decisions and are responsible for âbuilding their own decision treesâ before entering the design or implementation phase. If they donât have a strong decision tree, chances are theyâll end up making suboptimal decisions, leading to unwanted maintenance or potentially exhausting sacred resources like time, budget, or developer effort.
For example, which one is more âawkwardâ or harder to maintain?
Designing an âokayâ internal app for 10-20 users? Or
Designing an âokayâ real-time analytics platform for 60,000-80,000 users?
At each decision point, there is a risk of either:
Not solving the right problem (i.e., building the wrong thing), or
Solving a future problem rather than today's problem (i.e., over-engineering).
Thatâs where the Two Aâs comes in. In this post, I'll introduce the Two Aâs framework and explain how we can apply it to both our daily work and technical interviews, using a system design interview scenario.
What is Two Aâs?
Two Aâs is short for Archaeologist & Architect. The framework is simple. As an engineer, whenever youâre working on a problem, there are two hats you need to wear, in the following order:
Archaeologist: Ask clarifying questions until you reach the core value.
Architect: Design a solution for that core value.
I. Archaeologist
As an Archaeologist, your role is to dig into the problem by asking clarifying questions until you understand exactly what needs to be solved. Youâre âbuilding your own decision treeâ so you can leave the room and focus on building a solution for the core value that stakeholders are waiting for.
As a rule of thumb, you should not take a generic problem at face value. If youâre in a room with clients or stakeholders and they tell you they want X, ask clarifying questions to narrow down the problem space to a specific pain point, XYZ. If youâre not sure what they meant when they said Y, communicate with them. Make sure you understand whatâs being asked and highlight any engineering risks associated with it. If it takes some time to identify and share the risks, so be it.
Remember, youâre not only an executor (i.e., a coder); youâre also a problem solver. You help others figure out the solutions they need. Users often tell you what they think they want, but may not know what they actually need.
Notice the no parking sign? Donât stop until you have all the answers you need to start the engineering work. Make sure everything is crystal clear before you leave the room. Sometimes asking clarifying questions can shift the conversation from solving one problem to another.
II. Architect
Now that youâve left the room with all your questions answered, itâs time to wear the Architect hat and start building!
You have a clear vision of the projectâs goals, timeline, and available resources. Itâs time to focus on designing / building the solution. Depending on your role and the situation, this might involve one of the following:
Write a design document to share with your team or leadership to get buy-in.
(more on this in a future post).
Build a small prototype and present it to your stakeholders.
(Think MVP here)
Develop the actual solution (if itâs a small one) and ship it.
(For Scrum folks, think of it as a sprint)
Now, letâs see the Two Aâs in action, before and after a system design interview.
Picture the following scenario: Alice, the interviewer, and Bob, the interviewee.
Scenario: Bobâs System Design Interview
Alice: Hey, Iâd like for you to design YouTube.
Bob: Uhhh, sure (đą). Weâll need a blob storage for storing the videos, a PostgreSQL database for storing the metadata⌠and maybe another database for the comments section.
Alice: Wait, why do we need a PostgreSQL?
Bob: Because its a relational database.
Alice: Okay⌠but why do we need a relational database?
Bob: Because itâs âgreatâ for storing the videosâ metadata.
Alice: Okay, letâs take a step back. Could you tell me more about the data model you want to store? Also, donât worry about the comments feature; this is out of scope.
Do you see what happened? Bob jumped into wearing the Architectâs hat and started designing things, while Alice now has to wear the Archaeologistâs hat and keep asking him for clarifications.
Now letâs playback the same scenario using the Two Aâs framework.
Bob The Archaeologist
Alice: Hey, Iâd like for you to design YouTube.
Bob: Sure. *pauses for few seconds* Just to set the scope, I have some questions:
What are the core set of features our YouTube must support?
Can I assume the system only requires video uploading and streaming?
Can I assume that comments, likes, and monetisation is out of scope?
How many users do we expect to use the system?
Is it fair to say around 10K daily active users (DAU)?
How many videos do we have?
Can I assume our system has ~100K videos and new ~10K videos every year?
As Bob asks for clarification and communicates his assumptions, he is able to narrow down the massive YouTube system into a minimum viable product (MVP) for a streaming platform that he can now design.
Bob: Okay, based on our discussion, here is the list of requirements I have to design our system. Does that look good?
Alice: Yes, sounds good.
Quick Interview Tip: Voicing what is in / out of scope highlights your product thinking skill đ
Bob The Architect
Bob: So based on the requirements, hereâs my design proposal. The system has two flows: (1) user upload flow and (2) user watch flow. Let me walk you through each of them.
Sample Design (feel free to ignore the writing)
Since Bob did the legwork by gathering all the information he needed, he was able to sketch out a design for the core value that Alice wants. He can walk-through the high-level design, and go into the details when needed. As an Architect, he did his homework by designing a specific solution for that specific problem.
Conclusion
Two Aâs framework is a powerful guide for approaching technical problems. This can be applied for both your daily work and technical interviews.
Archaeologist: keep digging until you reach the core value.
Architect: design only to serve that core value.
Two Aâs help you make better decisions, and the bigger the decision, the more critical it becomes for you and your team to manage its complexity.
Take some time to fully understand the problem before solving it.
Users will come to you with problems, and your role is to ask clarifying questions to pinpoint the exact issue they want you to solve.
Interesting read! As a pracademic in entrepreneurship, I find my students as well struggle to articulate what exactly is the "core value" they are after. The Two A's sounds like a useful stop-and-reflect solution that you can apply whether you have 5mins or 5 days to make a decision and test it.