← Atlassian Interview Insights

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

Senior
May 2026

Summary

System design round at Atlassian for a software engineer role, focused entirely on building a cloud document storage service with deduplication. Pretty deep dive, lots of follow-ups on things I hadn't fully thought through beforehand.

Questions Asked (8)

Q1

Design a cloud document storage service that deduplicates identical and near-identical documents at scale.

System DesignTechnical Trade-offs
Author's notes

I started with full-file SHA-256 hashing and the interviewer immediately pushed back on what happens when two files differ by one line.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and scale, then propose a multi-tier architecture that uses content-defined chunking and cryptographic hashing for exact deduplication, and locality-sensitive hashing or embeddings for near-duplicate detection. Discuss trade-offs between storage savings, compute cost, and latency, and outline how to handle updates and deletions.

Pro tip: Emphasize that deduplication is a storage-layer concern and should be transparent to the application; also highlight the importance of a garbage collection strategy to reclaim space when documents are deleted or updated.

1. Clarify Requirements and Scale

Ask about expected document types, size distribution, update frequency, and scale (e.g., petabytes, millions of users). Establish consistency, latency, and durability requirements.

2. Design Core Storage and Exact Deduplication

Propose a chunk-based storage system using content-defined chunking (e.g., Rabin fingerprinting) and SHA-256 hashes to identify identical chunks. Store chunks in a distributed object store with a metadata service mapping documents to chunk lists.

3. Add Near-Duplicate Detection

Use locality-sensitive hashing (e.g., MinHash, SimHash) or embeddings to generate signatures for documents or chunks. Compare signatures to find near-duplicates and store only one canonical copy with references.

4. Address Scalability and Trade-offs

Discuss partitioning, indexing strategies (e.g., inverted index for signatures), and caching. Trade-offs: exact dedup is cheap and precise but misses near-duplicates; near-dup detection saves more space but adds compute and false positives.

5. Handle Updates, Deletions, and Garbage Collection

Explain how to manage document versions, reference counting for chunks, and background garbage collection to reclaim space. Ensure consistency and avoid data loss during concurrent updates.

Key Points to Mention

  • Content-defined chunking (e.g., Rabin fingerprinting) for variable-size chunk boundaries
  • Cryptographic hashing (SHA-256) for exact duplicate detection and integrity
  • Locality-sensitive hashing (MinHash, SimHash) or embeddings for near-duplicate detection
  • Trade-offs: storage savings vs. compute overhead, latency, and false positives
  • Reference counting and garbage collection for safe deletion of shared chunks
  • Scalability considerations: distributed storage, partitioning, and indexing of hashes/signatures

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

Q2

How would you handle hash collisions and verify that two chunks with the same hash are actually identical?

System DesignAlgorithms & Data Structures
Author's notes

Blanked for a second.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by explaining that hash collisions are inevitable, so you need a strategy to handle them and verify chunk identity. Describe using a strong cryptographic hash for initial comparison, then a byte-by-byte comparison or a secondary hash to confirm equality. Emphasize the trade-offs between performance and accuracy, and how this applies to deduplication or data integrity systems.

Pro tip: Mention that in practice, you'd use a Merkle tree or similar structure to efficiently verify large datasets, and that cryptographic hashes like SHA-256 make collisions so rare that they're negligible for most applications—but you still need a fallback for absolute certainty.

1. Acknowledge collision possibility

Explain that hash functions map arbitrary data to fixed-size values, so collisions are possible. State that you must handle them to ensure correctness.

2. Use a strong hash for initial check

Choose a cryptographic hash like SHA-256 to minimize collision probability. Use it as a fast, probabilistic filter to identify potential duplicates.

3. Verify with byte-by-byte comparison

When hashes match, perform a direct byte comparison of the chunks to confirm they are identical. This guarantees correctness at the cost of speed.

4. Optimize with secondary techniques

For large-scale systems, consider using a Merkle tree or a second independent hash to reduce the need for full comparisons, balancing performance and accuracy.

5. Discuss trade-offs and real-world application

Explain when to use each method: e.g., for deduplication, a strong hash alone may suffice; for critical data, always verify. Mention how this applies to systems like Git or backup software.

Key Points to Mention

  • Hash collision probability and the birthday paradox
  • Cryptographic vs. non-cryptographic hash functions (e.g., SHA-256 vs. MD5)
  • Byte-by-byte comparison as the definitive verification
  • Merkle trees for efficient verification of large data sets
  • Trade-offs between performance and accuracy
  • Real-world examples: Git, rsync, deduplication systems

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

Q3

Walk me through the storage layout for a chunk-based dedup system, specifically the chunk store and manifest structure.

System DesignData Modeling
Author's notes

This went fine.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and scale, then describe the chunk store layout (how chunks are stored and indexed) and the manifest structure (how files are represented as sequences of chunk references). Explain how deduplication is achieved through content-addressed chunk IDs and reference counting, and discuss trade-offs like chunk size, metadata overhead, and garbage collection.

Pro tip: Emphasize that the manifest is the source of truth for file reconstruction and must be versioned and immutable; also mention that chunk store should be append-only for performance and simplicity, with garbage collection handled separately.

1. Clarify requirements and assumptions

Ask about scale (number of files, average file size, dedup ratio), consistency needs, and whether the system is distributed. State assumptions to scope the design.

2. Describe chunk store layout

Explain that chunks are stored in a content-addressable store, keyed by cryptographic hash (e.g., SHA-256) of chunk content. Discuss physical storage (e.g., flat files, object storage) and indexing (e.g., hash table, B-tree) for fast lookup.

3. Describe manifest structure

Explain that a manifest represents a file as an ordered list of chunk IDs, along with metadata (file size, permissions, timestamps). Discuss manifest storage (e.g., database, object store) and versioning for snapshots.

4. Explain deduplication and reference counting

Detail how identical chunks are stored once and referenced multiple times. Describe reference counting to track chunk usage and enable safe deletion during garbage collection.

5. Discuss trade-offs and optimizations

Cover chunk size trade-offs (smaller chunks = better dedup but more metadata), compression, encryption, and how to handle chunk store scalability (sharding, replication). Mention garbage collection strategies.

Key Points to Mention

  • Content-addressable storage using cryptographic hashes (e.g., SHA-256) for chunk IDs
  • Manifest as an ordered list of chunk IDs with file metadata, stored separately from chunks
  • Reference counting for chunks to manage lifecycle and garbage collection
  • Chunk size trade-offs: smaller chunks improve dedup ratio but increase metadata overhead
  • Append-only chunk store for write performance and simplicity
  • Versioning of manifests to support snapshots and point-in-time recovery

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

Q4

How does encryption at rest interact with deduplication, and what is convergent encryption?

System DesignTechnical Trade-offs
Author's notes

This one got me.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by defining encryption at rest and deduplication, then explain the fundamental conflict: encryption randomizes data, preventing identical plaintext from producing identical ciphertext, which breaks deduplication. Introduce convergent encryption as a solution that derives the encryption key from the plaintext hash, enabling identical plaintext to produce identical ciphertext while maintaining confidentiality. Conclude by discussing trade-offs and practical considerations.

Pro tip: Mention that convergent encryption is vulnerable to confirmation-of-a-file attacks, where an attacker can verify if a known file exists in the system by comparing hashes. Also note that Atlassian products like Bitbucket and Jira may use deduplication in storage layers, so understanding this trade-off is crucial for designing efficient and secure systems.

1. Define the concepts

Briefly define encryption at rest (protecting stored data) and deduplication (eliminating redundant copies of data).

2. Explain the conflict

Describe how standard encryption with random keys or IVs produces different ciphertext for identical plaintext, defeating deduplication.

3. Introduce convergent encryption

Explain that convergent encryption derives the key from the plaintext (e.g., via a hash), so identical plaintext yields identical ciphertext, enabling deduplication.

4. Discuss trade-offs and attacks

Mention security implications like confirmation-of-a-file attacks and the need for additional measures (e.g., proof of ownership).

5. Relate to system design

Connect to real-world systems (e.g., backup services, Atlassian products) and discuss when to prioritize deduplication vs. strong encryption.

Key Points to Mention

  • Encryption at rest: protects data confidentiality when stored.
  • Deduplication: reduces storage by storing only unique data blocks.
  • Conflict: encryption randomizes data, preventing deduplication.
  • Convergent encryption: key derived from plaintext hash, enabling deterministic ciphertext.
  • Security trade-off: confirmation-of-a-file attacks and need for proof of ownership.
  • Practical examples: backup systems (e.g., restic, Borg) and cloud storage.

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

Q5

How would you implement garbage collection for orphaned chunks that are no longer referenced by any manifest?

System DesignTechnical Trade-offs
Author's notes

Reference counting was my first answer.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the system context—what are chunks, manifests, and how references work—then propose a mark-and-sweep garbage collection approach that periodically scans all manifests to identify live chunks and deletes the rest. Discuss trade-offs between batch vs. incremental collection, consistency guarantees, and how to avoid deleting chunks that are still being written or referenced.

Pro tip: Emphasize safety and idempotency: use a grace period or reference counting with tombstones to prevent race conditions where a chunk is marked for deletion but a new manifest references it before deletion completes. Also, mention monitoring and alerting on orphaned chunk growth to catch leaks early.

1. Clarify the data model and requirements

Ask questions to understand what chunks and manifests are, how references are stored, and what consistency guarantees are needed (e.g., can manifests be updated concurrently?).

2. Choose a garbage collection strategy

Propose a mark-and-sweep approach: periodically scan all manifests to build a set of live chunk IDs, then compare against all stored chunks to find orphans. Consider incremental or generational variants if scale is large.

3. Address concurrency and safety

Explain how to avoid deleting chunks that become referenced during the scan: use a grace period, reference counting, or a two-phase commit with tombstones. Ensure the GC process is idempotent and can resume after failure.

4. Discuss trade-offs and optimizations

Compare batch vs. continuous GC, impact on system performance, storage cost savings, and complexity. Mention using bloom filters or time-based expiration for efficiency.

5. Outline implementation and monitoring

Describe how to implement the GC (e.g., a scheduled job), how to test it, and what metrics to track (orphan count, GC duration, false positives).

Key Points to Mention

  • Mark-and-sweep algorithm: mark live chunks from manifests, sweep unreferenced ones.
  • Concurrency control: grace periods, reference counting, or tombstones to prevent race conditions.
  • Trade-offs: batch vs. incremental GC, performance impact, storage savings vs. complexity.
  • Idempotency and fault tolerance: GC should be safe to retry and resume after failures.
  • Monitoring and alerting: track orphaned chunk growth, GC success rate, and false positives.
  • Scalability considerations: distributed scanning, sharding, and using efficient data structures like bloom filters.

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

Q6

How would you measure the deduplication ratio across your storage system, and what metrics matter?

System DesignProduct Analytics & Metrics
Author's notes

Logical bytes stored divided by physical bytes on disk was my answer.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by defining deduplication ratio clearly (logical data size divided by physical data size) and explain how you would instrument the system to collect the necessary metrics. Then discuss the key metrics that matter, such as space savings, read/write amplification, and performance impact, and how they relate to Atlassian's scale and reliability needs.

Pro tip: Emphasize that deduplication ratio alone is misleading without context—always pair it with latency and throughput metrics to ensure you're not sacrificing performance for space savings.

1. Define the metric

Clearly state that deduplication ratio = logical data size / physical data size, and clarify whether it's measured at block, file, or object level.

2. Instrumentation

Explain how to collect data: track unique blocks/chunks written, total logical bytes, and physical bytes stored, using counters or metadata from the deduplication engine.

3. Calculate and aggregate

Describe how to compute the ratio over time and across nodes, considering factors like sampling, aggregation windows, and handling of edge cases (e.g., empty data).

4. Key metrics to monitor

List metrics beyond the ratio: space savings percentage, deduplication hit rate, read/write amplification, CPU/memory overhead, and latency impact.

5. Trade-offs and context

Discuss how deduplication affects performance, scalability, and cost, and how to balance these factors in a system like Atlassian's.

Key Points to Mention

  • Logical vs. physical data size and how to measure each
  • Deduplication ratio formula and its limitations
  • Impact on read/write latency and throughput
  • Space savings vs. performance trade-offs
  • Monitoring and alerting on deduplication effectiveness
  • Consideration of data types (e.g., backups, logs, user content) and their dedup potential

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

Q7

Compare full-file hashing versus chunk-level deduplication for a workload of typical office documents.

Technical Trade-offsSystem Design
Author's notes

Full-file dedup is simpler but misses partial overlaps, like two versions of the same doc with minor edits.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the workload characteristics of typical office documents—small size, frequent edits, and high redundancy across versions. Then compare full-file hashing and chunk-level deduplication on dimensions like storage efficiency, CPU/memory overhead, and implementation complexity, and conclude with a recommendation tailored to the workload.

Pro tip: Mention that chunk-level deduplication can be combined with full-file hashing as a fast-path check to avoid unnecessary chunking for unchanged files, showing you understand hybrid approaches and real-world trade-offs.

1. Clarify workload characteristics

Describe typical office documents: small size (KB to low MB), frequent small edits, and high similarity across versions. This sets the context for the comparison.

2. Define full-file hashing

Explain that full-file hashing computes a single hash for the entire file, enabling exact duplicate detection but missing partial changes.

3. Define chunk-level deduplication

Explain that chunk-level deduplication splits files into chunks (fixed or variable size), hashes each chunk, and stores unique chunks, enabling storage savings across similar files and versions.

4. Compare on key dimensions

Analyze storage efficiency, CPU/memory overhead, latency, and implementation complexity. For office documents, chunk-level dedup offers better storage savings but higher overhead.

5. Recommend based on trade-offs

Conclude that for typical office documents, a hybrid approach or chunk-level dedup with small chunk sizes may be optimal, balancing savings and performance.

Key Points to Mention

  • Storage efficiency: chunk-level dedup saves more space for similar documents and versions.
  • CPU and memory overhead: full-file hashing is cheaper; chunk-level dedup requires more processing and metadata.
  • Latency and throughput: full-file hashing is faster for writes/reads; chunk-level dedup may introduce latency.
  • Implementation complexity: full-file hashing is simpler; chunk-level dedup needs chunking, indexing, and garbage collection.
  • Workload specifics: office documents are small and edited frequently, so chunk-level dedup with small chunks can capture edits well.
  • Hybrid approaches: use full-file hash as a fast-path check before chunking, or combine both for optimal performance.

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

Q8

How would you scale the metadata service that tracks chunk manifests and user file mappings?

System DesignData Modeling
Author's notes

Talked about sharding by user ID and caching hot manifests.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the requirements and scale (e.g., number of files, users, QPS, read/write ratio, latency SLOs). Then propose a horizontally scalable, sharded metadata store with caching and asynchronous replication, and discuss trade-offs between consistency, availability, and performance.

Pro tip: Emphasize that metadata services are typically read-heavy, so focus on caching and read replicas first; also mention that chunk manifests and user file mappings may have different access patterns and could be stored separately.

1. Clarify Requirements and Scale

Ask about expected data volume, request rate, read/write ratio, latency and consistency requirements, and growth projections.

2. Design Data Model and Storage

Propose a schema for chunk manifests and user file mappings, and choose a distributed database (e.g., Cassandra, DynamoDB) that supports horizontal scaling and tunable consistency.

3. Partition and Replicate

Explain sharding strategies (e.g., by user ID or file ID) to distribute load, and replication for fault tolerance and read scalability.

4. Add Caching and Optimize Reads

Introduce multi-level caching (client, CDN, in-memory) to reduce latency and database load, especially for hot metadata.

5. Address Consistency and Failover

Discuss trade-offs between strong and eventual consistency, and how to handle failures, rebalancing, and monitoring.

Key Points to Mention

  • Sharding strategy (e.g., consistent hashing) to distribute metadata across nodes
  • Replication for high availability and read scalability
  • Caching layers (e.g., Redis, Memcached) to handle read-heavy workloads
  • Choice of database (e.g., NoSQL for scalability vs. SQL for transactions)
  • Consistency models (strong vs. eventual) and their impact on user experience
  • Monitoring, alerting, and capacity planning for metadata service

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