Design a system like Jira. It should have the following functionalities :
MediumLet's dive into designing a simplified issue tracking system, similar to Jira. Our focus will be on the core domain model and how to structure the classes effectively. We're not building a production-ready Jira, but rather a robust and extensible foundation that demonstrates solid object-oriented principles. Think of this as the heart of Jira, focusing on issues, workflows, and users without the complexities of distributed systems, scaling, or UI concerns.
At the core, we need to manage "Issues" – bug reports, feature requests, tasks, etc. Each issue progresses through a "Workflow", which defines the states an issue can be in and the transitions between those states (e.g., "Open" -> "In Progress" -> "Resolved" -> "Closed"). Users interact with these issues, creating them, assigning them, and transitioning them through the workflow.
We also need to support different types of issues (e.g., Bug, Task, Story), each potentially requiring custom fields or behavior. A key requirement is the ability to define custom workflows and associate them with different project types or issue types.
Imagine a scenario where a new team joins the organization and their project requires a different workflow than existing teams. The system should easily adapt to this change without requiring significant code modifications. Similarly, consider an organization-wide policy change that requires the addition of a new "Compliance Review" step in existing workflows. The system should allow for the workflow to be updated without breaking existing projects.
Requirements
Think like an Architect
Before revealing the requirements, imagine you're in the interview right now."How would you clarify the scope with your interviewer?"