Cracking the Atlassian Code Design Interview: A Senior Engineer's Guide to LLD, Concurrency, and Live Refactoring

AAcePrompt Team·July 4, 2026·10 min read
Cracking the Atlassian Code Design Interview: A Senior Engineer's Guide to LLD, Concurrency, and Live Refactoring

The Atlassian Code Design interview, internally known as the Code Craft round, is notoriously one of the toughest low-level design assessments in the tech industry. It doesn't look like a traditional algorithmic interview. Instead of hyper-focusing on abstract data structures or dynamic programming puzzles, Atlassian wants to see if you can write production-grade, extensible, and thread-safe code while racing against the clock. You aren't just solving a math puzzle here. You're architecting a robust micro-system entirely from scratch. If you're interviewing for a senior software, data, or engineering role, consider this round the ultimate litmus test of your engineering maturity. Passing it demands a deep understanding of object-oriented design, a firm grip on concurrency primitives, and the foresight to anticipate shifting business requirements. Acing your Atlassian coding interview preparation means shifting your mindset away from competitive programming and focusing entirely on real-world software engineering.

What Exactly is the Atlassian Code Design (Craft) Round?

During the Code Craft round, you'll typically use your own Integrated Development Environment (IDE) to solve a seemingly simple problem that scales up in complexity incredibly fast. The interviewer hands you a base requirement—maybe building a generic voting system, an in-memory file system, a custom collections library, or a rate limiter. From there, you'll need to define the interfaces, implement the core business logic, and write functional tests, all within a tight 45 to 60-minute window. Here's the catch: the initial requirements are intentionally incomplete. As you type, the interviewer will start throwing new constraints and edge cases your way to test how extensible your design actually is in real-time. If you hardcode your logic or tightly couple your classes early on, this mid-interview pivot will force a complete rewrite. That usually kills your chances of passing. To survive, your foundational architecture has to lean heavily on SOLID principles, especially the Open/Closed Principle. You need to be able to inject new behaviors without touching the existing, tested code.

The Core Evaluation Signals: Extensibility, Concurrency, and Clean Abstractions

Hitting the mark on Atlassian LLD questions means optimizing for three primary evaluation signals. Your interviewers will grade your solution based on how well you balance these competing concerns, all while keeping your code highly readable and easy to maintain.

  • Extensibility and Modular Design: Can you add new features without breaking what already works? Expect to lean on the Strategy pattern for interchangeable algorithms, the Factory pattern for object creation, and Dependency Injection to decouple your components.
  • Concurrency and Thread Safety: Atlassian builds highly distributed, concurrent enterprise software like Jira and Confluence, so your code has to handle simultaneous requests gracefully. You need to show you understand synchronization, atomic variables, concurrent collections, and locking mechanisms—without accidentally causing deadlocks or massive performance bottlenecks.
  • Clean Abstractions and Domain Modeling: How well do you translate business nouns and verbs into actual classes and methods? Poorly named variables, massive monolithic classes, and messy interface boundaries are immediate red flags. You have to encapsulate state and expose only what's strictly necessary.
  • Testability and Edge Case Handling: Production code is tested code. You'll be expected to write unit tests for your implementation on the fly to prove it handles edge cases, null inputs, and boundary conditions effectively.

Deep Dive: Classic Atlassian Code Design Prompts

Let's look at a classic Atlassian Code Design prompt: The Rate Limiter. The interviewer asks you to implement a rate-limiting library that restricts the number of requests a user can make within a specific time window. A naive approach might just use a simple HashMap to store timestamps, but that falls apart almost instantly under concurrent load and high throughput. A senior engineer will step back and clarify the constraints first: Are we optimizing for memory or precision? If memory is the main constraint, a Token Bucket algorithm is a great fit. You'd define a RateLimiter interface, implemented by a TokenBucketRateLimiter class. The state needs an AtomicInteger for available tokens and a thread-safe mechanism to track the last refill timestamp. But if precision is the top priority, you'd likely need a Sliding Window Log using a ConcurrentSkipListMap or a Deque guarded by a ReentrantLock. You have to articulate these trade-offs out loud. Tell the interviewer that the Sliding Window Log consumes memory proportional to the number of requests, while the Token Bucket uses constant memory but allows brief spikes in traffic.

Tip: When dealing with time-based logic in LLD interviews, always inject a Clock or TimeProvider interface into your classes instead of calling system time functions directly. Doing this makes your time-dependent logic deterministically testable since you can mock time progression in your unit tests.

Architectural Breakdown: The In-Memory File System

Cracking the Atlassian Code Design Interview: A Senior Engineer's Guide to LLD, Concurrency, and Live Refactoring

Designing an in-memory file system or a hierarchical router is another frequent Atlassian LLD question. This prompt specifically tests your grasp of the Composite design pattern and tree-based data structures like Tries. You'll likely need to design an abstract FileSystemNode class, which is then extended by File and Directory classes. A Directory will need to contain a thread-safe collection of child nodes, like a ConcurrentHashMap. The real complexity hits when the interviewer asks you to implement search functionality or recursively calculate the total size of a directory. A senior candidate spots the risk of a stack overflow on deeply nested directories right away and might opt for an iterative Breadth-First Search (BFS) using a thread-safe queue instead. When you're handling concurrent reads and writes, you have to implement granular locking. Slapping a global lock on the entire file system will completely destroy throughput. Instead, use lock striping or a ReentrantReadWriteLock at the directory level so you can allow concurrent reads while exclusively locking during structural modifications.

Handling the Live Pivot: Surviving Mid-Interview Requirement Changes

The live pivot is the defining characteristic of the Atlassian Code Craft round. About 25 minutes into the interview, right after you've established your base implementation, the interviewer is going to alter the requirements. Imagine you just built a voting system where each user gets one vote. Suddenly, they ask you to support weighted voting based on user reputation, or maybe time-decaying votes. If your original design tightly coupled the vote-counting logic to the user model, you're going to struggle to adapt. To survive this pivot, you have to proactively defend your architecture by baking flexibility into your solution from the very first line of code.

  • Interface Segregation: Keep your interfaces small and highly focused. Don't build a massive VotingMachine interface. Instead, define an EligibilityValidator, a VoteWeightCalculator, and a VoteStore.
  • The Strategy Pattern: Anytime you find yourself writing a switch statement or a massive if-else chain based on a type or condition, refactor it into a Strategy pattern. When the pivot introduces a new condition, you can just create a new Strategy class without touching the core engine.
  • Favor Composition over Inheritance: Deep inheritance trees are incredibly brittle. By using composition, you can easily swap out behaviors at runtime by injecting different components. This makes your system infinitely more adaptable when requirements suddenly shift.

Concurrency in Depth: Avoiding Deadlocks and Race Conditions

Concurrency carries a ton of weight in Atlassian's grading rubric. You can't just slap a synchronized keyword on every method and call it a day. That shows a junior-level understanding of thread safety and usually results in a highly contended, painfully slow system. Senior engineers have to demonstrate nuanced synchronization strategies. Let's say you're building a thread-safe cache. Using a ConcurrentHashMap handles the thread safety of the internal buckets, but it won't protect compound actions like put-if-absent unless you actually use the specific atomic methods provided by the API. When you need to lock multiple resources simultaneously, you have to guarantee a consistent locking order to prevent deadlocks. Talk through your locking hierarchy out loud as you write the code. If you decide to use a ReentrantReadWriteLock, explain to your interviewer that it allows multiple threads to read shared state concurrently. Mention how this drastically improves throughput in read-heavy applications, but make sure to warn them about potential writer starvation if the read lock is held continuously by a high volume of incoming requests.

Tip: Always prefer higher-level concurrency utilities from your language's standard library over low-level wait and notify primitives. Reaching for constructs like CountDownLatch, Semaphore, or BlockingQueue shows that you understand modern, less error-prone concurrency paradigms.

Best Practices for Mock Testing and TDD in Your Own IDE

Since the Atlassian Code Design interview happens in your own IDE, you get the distinct advantage of using the testing frameworks you already know. Test-Driven Development (TDD) earns a lot of respect in this round. Start by writing a simple test case that defines the expected behavior of your public API. This forces you to think about the consumer of your code long before you get bogged down in implementation details. Write tests for the happy path, but spend just as much time on the edge cases. What happens if the input is null? What if the collection is empty? What if two threads try to modify the exact same record simultaneously? For concurrency testing, set up a thread pool to spawn multiple threads that hit your system concurrently, then use assertions to ensure data integrity. Showing the interviewer that you can write a failing test, implement the fix, and watch the test pass in real-time sends a massive positive signal. It proves you're a disciplined engineer who actually values code quality and reliability.

Mastering Atlassian LLD questions takes an immense amount of practice, but you don't have to tackle the live interview completely alone. AcePrompt AI acts as your real-time interview copilot, and it's specifically engineered to support senior candidates during these intense technical rounds. When the interviewer explains the mid-interview pivot, AcePrompt listens to the live conversation and instantly surfaces structured, personalized architectural suggestions right on your screen. If they ask for a thread-safe implementation of a complex tree structure, AcePrompt guides you toward the correct locking mechanisms and design patterns so you never freeze under pressure. It helps you articulate the exact trade-offs between different data structures and concurrency models, empowering you to communicate just like a seasoned architect. Because it integrates seamlessly into your interview workflow, AcePrompt lets you focus entirely on writing clean, extensible code while it handles the heavy cognitive load of rapid system design ideation. Give yourself the ultimate advantage and turn your Atlassian coding interview preparation into a guaranteed job offer.

Frequently asked questions

What is the difference between Atlassian Code Craft and standard LeetCode interviews?

Standard LeetCode interviews lean heavily on abstract algorithmic puzzles and dynamic programming. The Atlassian Code Craft round is much different. It focuses entirely on Object-Oriented Design, defining clean interfaces, ensuring extensibility, and implementing thread safety within a mini-project format.

Can I use my own IDE for the Atlassian Code Design interview?

Yes, Atlassian actually expects and encourages you to use your own IDE. Just make sure your local environment is completely set up with your preferred testing frameworks and language SDKs before the call begins.

How important is thread safety in the Atlassian LLD round?

It's critically important. Almost every prompt involves managing shared state, and interviewers explicitly evaluate your ability to handle concurrent reads and writes efficiently. You have to do this without introducing race conditions or deadlocks.

What happens if I do not finish all the requirements during the interview?

Atlassian evaluates the quality of your architecture rather than just pure feature completion. A clean, extensible, and well-tested partial solution always scores higher than a messy, hardcoded, and completely untested full solution.

How can AcePrompt AI help me during the Code Craft round?

AcePrompt AI listens to your live interview conversation and provides real-time suggestions for design patterns, concurrency handling, and architecture. It helps you adapt to those tricky mid-interview requirement pivots instantly so you always have the right technical answer ready to go.

Related comparisons

See AcePrompt in action

Watch how AcePrompt supports a real technical round - structured answers, tuned to your resume, in real time.

Ace your Atlassian Code Design interview with real-time AI guidance from AcePrompt.

Get started

See pricing →

Keep reading

Atlassian Code Design Interview Guide - AcePrompt AI