System Design Interview: Design TurboTax

You don't design a system like that in one shot, unless you want to fail miserably. It's a highly complex domain, you need to learn the domain first.

The first thing I'd do is set up some sort of a session with key stakeholders and SMEs to get a general idea about what value we are aiming to provide. You can do that with a very high level discussion, maybe some event storming if you can narrow it down sufficiently. You're mostly a moderator of a discussion and a listener. You need to understand which things are important to solve, and which are not. Are you aiming at individuals or companies first? Do you want to apply pareto rule and handle 80% of cases (common deductions), or is the value in having wide support for everything?

Then when you understand where you make money and grow your customer base, you'd probably try to get an idea about what kind of things happen in the system and figure out what things are related and form individual domains (use common language, solve similar problems), figure out which are key to the business, which are not, and how they communicate (it's going to tell you a lot about the quality of your design). You are highly unlikely to nail it down in the first go, so that's also a good time to build some very limited prototypes/PoC to get a general idea. You also need to figure out what future can bring, so that you don't shoot yourself in the foot, but at the same time don't build an overly abstract piece of crap.

Only then you can think about implementing the individual processes, again depending on the domain you might take COTS software (auth, payments, invoicing, common crap like that) and the rest you'll implement according to the strategy you worked out with key stakeholders and SMEs.

It's a completely different thing requiring a completely different skillset to what system design interviews provide. In system design you are already at the piece of system which is fairly isolated and simplified and you are there to show some of your soft skills and design thinking.

/r/ExperiencedDevs Thread