Roadmaps · L2
Middle Java Developer
A middle developer delivers a medium-sized task end to end on their own: analysis, code, tests, deployment and support. They think not only about whether the code works, but about how it behaves under load and when something fails.
How it differs from the previous level
A junior carries out a task whose details are clear. A middle developer clarifies a vague requirement, compares options, anticipates risks and can review other people's code. They need occasional alignment rather than supervision.
Expected knowledge
- Concurrency: threads, ExecutorService, visibility, synchronized vs volatile, ConcurrentHashMap
- How Spring @Transactional works through proxies, plus propagation and rollback rules
- JPA: the N+1 problem, fetch strategies, DTO projections, optimistic locking
- SQL: choosing indexes, reading EXPLAIN, the basics of isolation levels
- Testing strategy: balancing unit, slice and integration tests, Testcontainers
- REST API design: versioning, pagination, a consistent error format (ProblemDetail)
- Authentication basics: sessions vs JWT, the most common authorization mistakes
- CI/CD, Docker and basic observability: structured logs, metrics, health checks
Practical skills
- Find a slow query and fix it with an index or a query change
- Write integration tests against a real PostgreSQL
- Investigate a customer-reported failure using logs, metrics and traces
- Prepare a backward-compatible API and database migration
- Set transaction boundaries correctly and avoid long transactions
- Review someone else's Pull Request constructively
Common mistakes
- Calling a @Transactional method from the same class and expecting a transaction
- Reading a lazy collection in a loop and creating N+1 queries
- Making an external HTTP call inside a transaction
- Writing tests that mock everything and verify no real integration
- Calling an external service without timeouts or retry policy
Learning priorities
- 1Understand transactions and the database deeplyPropagation, isolation, locking and indexes. Most production failures start here.
- 2Improve performance by measuringWork with SQL logs, EXPLAIN and a profiler instead of guesses.
- 3Build a testing strategyChoose unit, slice and Testcontainers tests by purpose; avoid slow and brittle tests.
- 4Learn concurrency and asynchronous processing basicsSpot race conditions, write thread-safe code and know the basics of messaging such as Kafka.
- 5Own delivery and supportCI/CD, monitoring and learning after incidents. Be the owner of the code you write.
Architecture maturity
A middle developer is responsible for the internal design of one service: layers, module boundaries, the data model and the API contract. They prefer the simple solution and do not add complexity without a reason. They assess how a change affects other services and teams, and can turn the reasoning behind a decision into a short written note.
Example questions
- Why does @Transactional not work with self-invocation?
- How would you detect and fix an N+1 problem?
- What is the practical difference between REPEATABLE READ and READ COMMITTED?
- When would you choose a unit test, a slice test or an integration test?
- How is ordering preserved for the same key in Kafka?
- Why does column order matter in a composite index?
- Show a race condition and fix it.
Exercises you can do on your own
- Create an N+1 in an endpoint, prove it with SQL logs and fix it with a fetch join and a DTO projection.
- Write a lost update scenario with two transactions updating the same row and solve it with @Version.
- Add a Testcontainers integration test to a service and run it in CI.
- Add a timeout, retry and error mapping to an external call and test each of them.
- Review an open-source Pull Request and separate blocking comments from nits.
Articles for this level
- Advanced JavaJava concurrency basics
- Transactions and consistencySpring @Transactional pitfalls: proxies, propagation and rollback rules
- JPA / HibernateThe N+1 query problem in JPA and how to fix it
- Testing strategyIntegration tests with Testcontainers and a real PostgreSQL
- Spring BootValidation and error responses in Spring Boot with ProblemDetail
- KafkaKafka fundamentals for backend engineers
- CI/CDA CI/CD pipeline for a Java service
- Technical leadershipCode review culture that helps teams
Programs that fit
How close are you to this level?
The skills assessment builds a personal gap report from your answers. It is a recommendation, not a certificate.