← Atlassian Interview Insights

Atlassian·Software Engineer·Onsite - System Design / Architecture·Senior

SeniorPrefer not to say
May 2026

Summary

Atlassian system design round focused on a greeting card web app, MVP scope only. Pretty scoped down compared to what I expected but the follow-ups on scaling and auth made it more interesting than the prompt let on.

Questions Asked (5)

Q1

Design a web application for a basic greeting card service. Users should be able to write a new card and view the cards they've written. Cards only support text. Walk through the frontend, backend API, and datastore.

System DesignTechnical Trade-offsData Modeling
Author's notes

I started with the datastore because that felt most concrete, which in hindsight was a bit backwards.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and scale, then propose a simple three-tier architecture: a React SPA frontend, a RESTful API backend, and a relational database. Walk through each layer, emphasizing data modeling, API design, and trade-offs like pagination and authentication.

Pro tip: Proactively discuss how you would evolve the design for scale and new features (e.g., images, sharing) to show forward-thinking and avoid over-engineering upfront.

1. Clarify Requirements and Scope

Ask about expected user scale, authentication needs, and whether cards are private or shareable. Confirm that only text is supported and that users can create and view their own cards.

2. Design the Data Model

Define a simple schema: a User table (id, username, password_hash) and a Card table (id, user_id, content, created_at). Discuss indexing on user_id for efficient retrieval.

3. Define the Backend API

Outline REST endpoints: POST /cards to create a card, GET /cards to list the user's cards (with pagination), and optionally GET /cards/{id}. Include authentication via JWT or session tokens.

4. Design the Frontend

Propose a React SPA with two main views: a form to compose a new card and a list view to display existing cards. Use state management (e.g., React Query) for API calls and handle loading/error states.

5. Discuss Trade-offs and Scalability

Address trade-offs like SQL vs NoSQL, pagination strategies, and caching. Mention how to scale (e.g., load balancer, read replicas) and potential future features like sharing or images.

Key Points to Mention

  • RESTful API design with proper HTTP methods and status codes
  • Data modeling with a relational database and indexing for performance
  • Authentication and authorization to ensure users only access their own cards
  • Pagination for listing cards to handle large datasets
  • Frontend state management and error handling
  • Trade-offs between SQL and NoSQL, and when to choose each

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q2

What does the data model look like for User and Card entities in this system?

Data Modeling
Author's notes

This was the easiest part for me.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the scope and requirements of the system, then describe the User and Card entities with their key attributes, relationships, and constraints. Emphasize how the model supports scalability, data integrity, and common access patterns.

Pro tip: Show awareness of trade-offs: for example, embedding vs. referencing cards in a user document, and how that affects query performance and consistency. Mentioning real-world constraints like pagination or rate limiting demonstrates production maturity.

1. Clarify requirements and assumptions

Ask about expected scale, read/write patterns, and whether the system is relational or NoSQL. State your assumptions to frame the answer.

2. Define the User entity

List core attributes (e.g., userId, email, name, createdAt) and note any sensitive fields. Mention indexes on frequently queried fields like email.

3. Define the Card entity

List core attributes (e.g., cardId, userId, cardNumber, expiry, status) and explain how it relates to User. Discuss whether card data is tokenized or stored directly.

4. Describe relationships and cardinality

Explain that a User can have many Cards (1:N) and how this is modeled (foreign key or embedded array). Mention cascade deletes or soft deletes.

5. Discuss indexing, constraints, and scalability

Cover indexes on foreign keys, unique constraints, and how the model handles growth (sharding, partitioning). Mention any denormalization for performance.

Key Points to Mention

  • Primary keys and unique identifiers for both entities
  • One-to-many relationship between User and Card
  • Indexing strategy for frequent queries (e.g., userId on Card)
  • Data integrity constraints (foreign keys, unique card numbers)
  • Security considerations for sensitive card data (tokenization, encryption)
  • Scalability patterns (sharding, read replicas, caching)

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q3

Define the API endpoints needed to create a card, list all cards for a user, and view a single card.

API & IntegrationsSystem Design
Author's notes

POST /cards, GET /cards, GET /cards/:id.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the resource model and relationships (e.g., cards belong to a user), then define RESTful endpoints with appropriate HTTP methods, paths, and status codes. For each endpoint, specify request/response schemas, authentication, and error handling, and briefly discuss pagination for the list endpoint.

Pro tip: Mention idempotency for POST requests using an Idempotency-Key header to prevent duplicate card creation, and discuss how you'd version the API (e.g., /v1/) to support future changes without breaking clients.

1. Clarify requirements and resource model

Ask clarifying questions about card attributes, user-card relationship, and expected scale. Define the card resource and its fields (e.g., id, title, description, userId, createdAt).

2. Define endpoints for create and list

For creation, use POST /v1/cards with a request body containing card details and userId. For listing, use GET /v1/users/{userId}/cards to fetch all cards for a user, supporting pagination via query parameters like limit and offset.

3. Define endpoint for retrieving a single card

Use GET /v1/cards/{cardId} to fetch a specific card. Ensure the endpoint validates that the card belongs to the authenticated user or that the user has permission to view it.

4. Specify request/response formats and status codes

For each endpoint, detail the JSON schema for requests and responses, and list appropriate HTTP status codes (e.g., 201 for creation, 200 for successful GET, 400 for bad request, 404 for not found, 401/403 for auth issues).

5. Address cross-cutting concerns

Discuss authentication (e.g., OAuth 2.0 or API keys), rate limiting, error response structure, and versioning strategy. Mention pagination, filtering, and sorting for the list endpoint.

Key Points to Mention

  • Use RESTful conventions: nouns for resources, HTTP methods for actions, and plural resource names.
  • Include pagination for the list endpoint to handle large datasets efficiently (e.g., limit/offset or cursor-based).
  • Specify authentication and authorization mechanisms (e.g., OAuth 2.0 scopes) to secure endpoints.
  • Define clear error responses with consistent structure and appropriate HTTP status codes.
  • Consider idempotency for POST to avoid duplicate cards on retries.
  • Version the API (e.g., /v1/) to manage changes without breaking existing clients.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q4

How would you handle authentication for this service at the MVP stage?

System DesignTechnical Trade-offs
Author's notes

Said session tokens stored server-side with a simple login endpoint, since JWT felt like overkill for an MVP with no third-party clients.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the MVP's goals and constraints, then propose a simple, secure authentication solution that balances speed of delivery with future scalability. Emphasize trade-offs and justify your choices based on the MVP context.

Pro tip: Show awareness of Atlassian's ecosystem by mentioning integration with Atlassian's existing identity providers (e.g., Atlassian Account) or using a managed service like Auth0 to offload complexity, while noting the trade-off of vendor lock-in.

1. Clarify MVP Requirements

Ask about the MVP's target users, security needs, and timeline to understand the constraints. This ensures your solution aligns with business goals.

2. Evaluate Authentication Options

Consider build vs. buy: using a managed service (e.g., Auth0, AWS Cognito) vs. rolling your own (e.g., JWT with OAuth2). Discuss pros and cons of each.

3. Propose a Solution

Recommend a specific approach, such as OAuth2 with a third-party provider or a simple email/password with JWT, and explain why it fits the MVP.

4. Address Security and Scalability

Highlight security best practices (e.g., HTTPS, hashing, token expiration) and how the solution can scale or evolve post-MVP.

5. Summarize Trade-offs

Recap the key trade-offs (e.g., speed vs. control, cost vs. maintenance) and confirm alignment with MVP goals.

Key Points to Mention

  • Use of OAuth2/OpenID Connect for standardized authentication
  • Managed services (e.g., Auth0, Cognito) to reduce development overhead
  • JWT for stateless authentication and session management
  • Security considerations: password hashing (bcrypt), HTTPS, token expiration
  • Scalability: how the solution can evolve to support SSO, MFA, etc.
  • Integration with Atlassian's existing identity systems if applicable

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q5

What would need to change architecturally if this service had to scale well beyond the MVP?

System DesignProduct StrategyTechnical Trade-offs
Author's notes

Caching reads, moving to a CDN for static assets, maybe pulling the card creation into an async queue if volume gets high.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the current architecture and the expected scale (e.g., users, requests per second, data volume) to ground your answer. Then systematically walk through each layer—from client to data storage—identifying bottlenecks and proposing changes that align with Atlassian's product goals and engineering principles. Emphasize trade-offs and incremental evolution rather than a complete rewrite.

Pro tip: Tie your architectural changes to business impact and customer experience—Atlassian values pragmatic solutions that balance scalability with maintainability and cost. Also, mention how you would measure success and validate the changes with load testing and monitoring.

1. Clarify Requirements and Assumptions

Ask questions to understand the expected scale, performance targets, and constraints (e.g., latency, consistency, budget). State your assumptions explicitly to ensure your answer is relevant.

2. Identify Current Bottlenecks

Analyze the existing MVP architecture to pinpoint likely bottlenecks at each layer: client, API, services, database, and infrastructure. Consider both technical and operational limits.

3. Propose Architectural Changes

Suggest specific changes such as horizontal scaling, caching, database sharding, asynchronous processing, and microservices decomposition. Explain how each addresses a bottleneck.

4. Discuss Trade-offs and Alternatives

For each proposed change, discuss trade-offs (e.g., complexity, cost, consistency) and why you prefer one approach over another. Show awareness of Atlassian's scale and product needs.

5. Plan for Incremental Evolution

Outline a phased approach to implement changes without disrupting the MVP. Include monitoring, testing, and rollback strategies to ensure reliability.

Key Points to Mention

  • Horizontal scaling of stateless services and load balancing
  • Database scaling strategies: read replicas, sharding, and choosing the right database (SQL vs NoSQL)
  • Caching layers (CDN, application cache, database cache) to reduce latency and load
  • Asynchronous processing and message queues for decoupling and handling spikes
  • Microservices decomposition and API gateway for modularity and independent scaling
  • Observability: monitoring, logging, and distributed tracing to identify bottlenecks and validate improvements

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.