← eBay Interview Insights

eBay·Software Engineer·Technical Phone Screen·Intermediate

Intermediate
Apr 2026

Summary

eBay full-stack round that ended with a surprise API design segment after the coding portion wrapped up early. No implementation, just a conversation, but it covered a lot of ground fast.

Questions Asked (6)

Q1

How would you turn your coding solution into a production API?

API & IntegrationsSystem Design
Author's notes

I hadn't thought about this at all during the coding part, so pivoting felt a bit abrupt.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the requirements and constraints of a production API, then walk through the key layers: API design, implementation, deployment, and operations. Emphasize scalability, reliability, security, and observability, tying each back to eBay's high-traffic, distributed environment.

Pro tip: Show that you think about the API as a product: versioning, documentation, and developer experience matter as much as the code. Mention how you'd handle backward compatibility and deprecation to avoid breaking clients.

1. Define the API contract

Specify endpoints, request/response schemas, status codes, and versioning strategy. Use OpenAPI/Swagger to document and generate client SDKs.

2. Design for scalability and reliability

Plan for horizontal scaling, load balancing, caching, rate limiting, and graceful degradation. Consider idempotency and retry semantics for critical operations.

3. Implement security and authentication

Choose an auth mechanism (e.g., OAuth 2.0, JWT), enforce HTTPS, validate inputs, and apply least-privilege access. Include audit logging for sensitive actions.

4. Set up deployment and CI/CD

Containerize the service, define infrastructure as code, and automate testing, building, and deployment. Use blue-green or canary deployments to reduce risk.

5. Add observability and operations

Instrument metrics, logs, and traces; set up alerts and dashboards. Define SLIs/SLOs and runbooks for incident response and capacity planning.

Key Points to Mention

  • API versioning and backward compatibility
  • Rate limiting, throttling, and quota management
  • Authentication, authorization, and input validation
  • Caching strategies (e.g., Redis, CDN) for performance
  • Monitoring, logging, and distributed tracing
  • CI/CD pipelines and infrastructure as code

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

Q2

Where would you store per-user ad state in this system?

System DesignData Modeling
Author's notes

This one tripped me up a little.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the requirements: what ad state needs to be stored (e.g., impressions, clicks, frequency caps), the read/write patterns, latency and consistency needs, and scale. Then propose a storage solution that balances performance, scalability, and cost, such as a distributed key-value store like Redis for low-latency access, with a durable backing store like Cassandra or DynamoDB for persistence. Explain how you would shard and replicate the data to handle eBay's scale.

Pro tip: Demonstrate awareness of trade-offs: for example, using Redis for speed but acknowledging its persistence limitations, and proposing a write-behind cache to a durable store. Also, mention the importance of idempotency and handling out-of-order events in ad state updates.

1. Clarify requirements

Ask questions to understand what ad state is stored (e.g., impressions, clicks, frequency caps), the expected read/write QPS, latency requirements, and consistency needs (strong vs. eventual).

2. Choose storage technology

Select a storage system based on requirements: e.g., Redis for low-latency reads/writes, Cassandra for scalable writes and durability, or a combination. Consider using a cache in front of a database.

3. Design data model and sharding

Define the key structure (e.g., user_id + ad_id) and how to shard data across nodes to distribute load evenly. Consider using consistent hashing for scalability.

4. Address consistency and durability

Explain how to handle consistency (e.g., eventual consistency with conflict resolution) and durability (e.g., replication, write-ahead logs). Discuss trade-offs between latency and durability.

5. Discuss scaling and operational concerns

Outline how the system scales horizontally, handles failures, and supports monitoring and maintenance. Mention TTLs for ephemeral data and archiving strategies.

Key Points to Mention

  • Low-latency access using in-memory stores like Redis for real-time ad serving decisions
  • Durability and scalability with distributed databases like Cassandra or DynamoDB
  • Data sharding strategy (e.g., by user_id) to distribute load and enable horizontal scaling
  • Consistency models: eventual consistency for performance, with idempotent updates to handle duplicates
  • TTL and data lifecycle management for ad state (e.g., frequency caps reset daily)
  • Trade-offs between different storage options (e.g., Redis vs. Cassandra) in terms of latency, cost, and complexity

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

Q3

What error responses should this API expose to callers?

API & IntegrationsTechnical Trade-offs
Author's notes

Talked about 4xx vs 5xx, validation errors, auth failures.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the API's purpose and consumers, then propose a consistent error response structure that includes HTTP status codes, machine-readable error codes, and human-readable messages. Emphasize trade-offs between exposing detailed internal errors versus security and usability, and suggest standard formats like RFC 7807.

Pro tip: Align your error design with industry standards (e.g., RFC 7807) and eBay's public API conventions to demonstrate awareness of ecosystem consistency and developer experience.

1. Clarify API context and consumers

Ask about the API's domain, whether it's public or internal, and who the callers are (e.g., third-party developers, internal services). This determines the level of detail and security considerations.

2. Define a consistent error schema

Propose a standard error response body with fields like type, title, status, detail, and instance (RFC 7807). Ensure it's machine-readable and human-friendly.

3. Map HTTP status codes to error categories

Outline common status codes (400, 401, 403, 404, 409, 429, 500, 503) and when to use each, ensuring they align with the error type.

4. Address trade-offs and security

Discuss what to expose (e.g., validation errors) versus what to hide (e.g., stack traces, internal IDs) to balance debuggability and security.

5. Include extensibility and documentation

Mention adding custom error codes, links to docs, and ensuring errors are documented in the API spec (e.g., OpenAPI) for developer ease.

Key Points to Mention

  • Use standard HTTP status codes appropriately (e.g., 400 for client errors, 500 for server errors).
  • Adopt a consistent error response format like RFC 7807 (Problem Details for HTTP APIs).
  • Include a machine-readable error code and a human-readable message for each error.
  • Avoid exposing sensitive information (e.g., stack traces, database errors) in production.
  • Consider rate limiting (429) and authentication/authorization errors (401/403).
  • Document all possible error responses in the API specification (e.g., OpenAPI/Swagger).

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

Q4

How would you design the schema for this API?

API & IntegrationsData Modeling
Author's notes

Request and response shapes, what fields are required vs optional, versioning.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the API's purpose, key use cases, and access patterns to ensure the schema aligns with business needs. Then, propose a data model that balances normalization for consistency with denormalization for performance, considering eBay's scale and read-heavy workload. Finally, discuss how the schema supports scalability, evolution, and integration with existing systems.

Pro tip: Demonstrate awareness of eBay's specific challenges, such as handling high-volume transactions and diverse product listings, by mentioning how your schema design addresses sharding, caching, or eventual consistency. This shows you understand the company's domain and can tailor solutions accordingly.

1. Clarify Requirements

Ask questions to understand the API's purpose, expected load, data access patterns, and consistency requirements. This ensures the schema meets functional and non-functional needs.

2. Identify Core Entities and Relationships

Define the main entities (e.g., users, items, orders) and their relationships, using ER diagrams or similar tools to visualize the model.

3. Choose Data Modeling Approach

Decide between normalized and denormalized structures based on read/write ratios, query patterns, and scalability needs. Consider SQL vs. NoSQL options.

4. Define Schema Details

Specify tables/collections, fields, data types, indexes, and constraints. Ensure primary keys, foreign keys, and indexes support efficient queries.

5. Address Scalability and Evolution

Plan for horizontal scaling (e.g., sharding), caching, and schema versioning to handle growth and future changes without downtime.

Key Points to Mention

  • Normalization vs. denormalization trade-offs for consistency and performance
  • Indexing strategies to optimize query performance
  • Scalability considerations like sharding, partitioning, and replication
  • Data consistency models (ACID vs. BASE) and their implications
  • Schema evolution and backward compatibility for API versioning
  • Integration with existing eBay systems and data sources

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

Q5

Would you use REST for this API, or something else, and why?

API & IntegrationsTechnical Trade-offs
Author's notes

Said REST and gave the usual reasons.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the API's requirements—such as data access patterns, latency, and client diversity—before recommending an architectural style. Then, compare REST with alternatives like GraphQL, gRPC, or event-driven approaches, and justify your choice based on trade-offs relevant to eBay's scale and use case.

Pro tip: Acknowledge that REST is often the default, but show maturity by discussing when it's not ideal—e.g., for real-time or highly connected data—and mention eBay's specific context like high-volume, read-heavy workloads.

1. Clarify Requirements

Ask about the API's purpose, expected load, data relationships, and client types to ground your recommendation in concrete needs.

2. Evaluate REST Suitability

Assess whether REST's statelessness, resource-oriented design, and HTTP caching align with the requirements, especially for CRUD operations.

3. Compare Alternatives

Briefly contrast REST with GraphQL (flexible queries), gRPC (performance), or WebSockets (real-time), highlighting when each excels.

4. Consider eBay's Context

Factor in eBay's scale, existing infrastructure, and team expertise—e.g., REST may be preferred for public APIs due to ubiquity and tooling.

5. Recommend and Justify

State your choice clearly, summarizing the trade-offs and why it best fits the scenario, while remaining open to hybrid approaches.

Key Points to Mention

  • REST's strengths: simplicity, statelessness, caching, and wide adoption
  • REST's limitations: over-fetching/under-fetching, multiple round trips for related data
  • Alternatives: GraphQL for flexible data fetching, gRPC for low-latency internal services, event-driven for async
  • eBay's scale: high traffic, read-heavy workloads, and potential need for caching and CDN integration
  • Trade-offs: development speed vs. performance, flexibility vs. standardization
  • Hybrid approaches: using REST for public APIs and gRPC internally, or GraphQL for specific clients

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

Q6

When should you use PUT versus GET for this API, and how would you structure the URLs?

API & IntegrationsTechnical Trade-offs
Author's notes

GET for reading ad state, PUT for updating it.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the API's purpose and the resource being manipulated, then explain that GET is for safe, idempotent read operations while PUT is for idempotent full updates or replacements. Structure URLs around resources (nouns) with clear hierarchies, using path parameters for identifiers and query parameters for filtering or pagination.

Pro tip: Mention that PUT should be idempotent and used for full resource replacement, while PATCH is for partial updates—this shows you understand the nuance beyond just GET vs PUT. Also, emphasize that URL design should be consistent and predictable, which is crucial for large-scale systems like eBay's.

1. Clarify the operation

Determine whether the operation is reading data (GET) or creating/updating a resource (PUT). Consider if the operation is safe and idempotent.

2. Apply HTTP semantics

Explain that GET retrieves data without side effects, while PUT replaces the entire resource at a known URL. Note that PUT is idempotent, so repeated calls have the same effect.

3. Design resource-oriented URLs

Use nouns for resources, plural forms for collections, and hierarchical paths for relationships. For example, /items/{itemId} for a specific item and /items for the collection.

4. Handle identifiers and parameters

Place resource identifiers in the path (e.g., /users/123) and use query parameters for filtering, sorting, or pagination (e.g., /items?category=electronics&limit=10).

5. Consider edge cases and consistency

Discuss how to handle partial updates (use PATCH instead of PUT), and ensure URL patterns are consistent across the API for maintainability.

Key Points to Mention

  • GET is safe and idempotent; PUT is idempotent but not safe.
  • PUT replaces the entire resource; use PATCH for partial updates.
  • URLs should be resource-oriented, using nouns and hierarchical structure.
  • Use path parameters for resource identifiers and query parameters for filtering/pagination.
  • Consider idempotency and side effects when choosing between GET and PUT.
  • Consistency in URL design improves API usability and maintainability.

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