Utkrusht

Report shared by Naman Muley

Utkrusht

Naman Muley

55SKILL SCORE
Assessment dateDecember 11, 2025
Duration25m 16s
RecommendationConsider
FlagsNone

Recommendation Summary

The candidate navigated the task requirements and utilized Cursor AI to generate a multi-stage Dockerfile and .dockerignore file. However, the candidate delegated the solution definition entirely to the assistant without technical direction and pushed changes to the repository without any local build or runtime verification.

Tools used
CursorCursor AIGitHub+2

Cursor

Cursor AI

GitHub

macOS Terminal

Google Chrome

Tap an insight above to jump to the criteria it informs in the analysis below.

Task

Optimize Java REST API and Docker Efficiency

Java Developer

Problem Statement

You are given a fully functional Java Spring Boot REST API for tracking tasks, already containerized using Docker. The API has noticeable response delays and the container image is large with slow rebuilds. The Java code holds completed tasks in an ArrayList that's never cleared (causing high memory usage), and background statistics updates run synchronously, blocking main threads. The Dockerfile uses an oversized base image, copies all source files unnecessarily, and lacks .dockerignore. Your task: Refactor the Java API to (1) clean up memory leaks in task management, (2) implement background stats updates using basic async patterns (ExecutorService), and (3) containerize efficiently with Docker best practices (.dockerignore, slim image, improved build layering, JVM limits). Your improvements should address BOTH Java (concurrency, async patterns, performance) and Docker (image size, build speed, resource control) equally.

  • Reduce API response times so requests complete faster and users wait less.
  • Stabilize memory use to prevent crashes and keep the service running smoothly.
  • Implement asynchronous task handling so background jobs run without slowing the app.
  • Make Docker images smaller to speed up deployments and save storage.
  • Speed up rebuilds so updates can be tested and released more quickly.
  • Tune JVM settings to balance CPU and memory for predictable performance.
  • Combine these changes to deliver a reliable, production-ready system for long-term use.
  • Write production level clean code with best practices including proper design patterns, naming conventions, exception handling, logging and observability etc.

Candidate Response

What are chapters?
What are highlights?
Chapters
00:00
-00:00
Skill
Developing2.2/5
Codebase3/5Critique4/5Verify1/5Technical3/5Tests0/5Each axis is a criterion graded at this level; the candidate's polygon shows their score on each.

Steered the AI with specific Java concurrency knowledge, rejecting its initial suggestions for a more controlled implementation. However, no verification was performed on any changes to the application logic or the Dockerfile. The final code quality was mixed, with some architectural issues in the Java code but a clean, AI-generated container configuration.

What we looked at
Codebase familiarization
Competent3/5

Systematically read through key Java files like TaskController and TaskService before prompting for changes. Later, the existing Dockerfile was also inspected across multiple intervals before asking the AI for optimizations. Familiarization was achieved through static code review rather than running the application.

Plan correction and adaptation
3/5
Not graded at this level

Corrected course on the implementation by explicitly rejecting the AI's proposed Spring @Async pattern and directing it to use an ExecutorService instead. Early on, git clone authentication failures were also successfully diagnosed and resolved by switching GitHub accounts and accepting a repository invitation.

AI output critique
Strong4/5

Provided substantive, correct redirection on the AI's Java implementation. After the AI suggested using Spring's @Async, the candidate correctly identified that a direct ExecutorService was more appropriate and explicitly instructed the AI to make the change, demonstrating strong technical judgement.

Debugging and verification
Weak1/5

The only debugging performed was resolving a git clone authentication failure early in the session. All subsequent changes to Java concurrency logic and the Docker build process were accepted and committed without any verification, such as running a build, executing tests, or hitting an endpoint.

Technical skill
Competent3/5

Showed a solid understanding of Java concurrency by directing the AI away from Spring's @Async to use a specific ExecutorService. This demonstrated specific technical knowledge. In contrast, Docker optimization prompts were high-level, asking for general improvements rather than specifying techniques like multi-stage builds.

Test design quality
Weak0/5

No tests were designed, authored, or executed at any point. Significant changes to the application's threading model, business logic for handling duplicates, and the entire container build process were made without any form of testing to verify correctness or performance.

Code quality
3/5
Not graded at this level

The final code quality was mixed. The AI-generated Dockerfile was clean, using a proper multi-stage build and a minimal base image. However, the Java code directed by the candidate introduced an unbounded cached thread pool and an unnecessary asynchronous wrapper on a simple list read, which are questionable architectural patterns.

AI Usage
Strong4.0/5
Engage4/5Prompts5/5Context4/5Brainstorm3/5Each axis is a criterion graded at this level; the candidate's polygon shows their score on each.

Highly specific prompts and active steering defined the early use of AI, with the candidate rejecting an initial suggestion for asynchronous code and directing a more specific `ExecutorService` implementation. The candidate consistently paused to review AI-generated code before accepting it, both for Java implementation and later for Dockerfile optimizations.

What we looked at
Output engagement
Strong4/5

AI-generated code and explanations were consistently reviewed before acceptance. This was evident when evaluating asynchronous Java patterns and later when inspecting a multi-stage Dockerfile, with pauses often exceeding 10 seconds, allowing for careful consideration of the proposed changes.

Prompt specificity
Strong5/5

A high degree of specificity was demonstrated in early prompts that encoded precise engineering decisions. The candidate explicitly rejected one concurrency model (@Async) for another (ExecutorService), dictated the thread pool implementation (newCachedThreadPool), and specified idempotency logic. Later prompts for Docker optimization were more generic.

Context augmentation
Strong4/5

File-level context was consistently provided by keeping the relevant file active in the editor before prompting. This was augmented with specific technical constraints, such as rejecting one concurrency pattern for another and dictating the thread pool implementation, grounding the AI effectively.

AI agentic steering
5/5
Not graded at this levelExceeds level

Excellent agentic steering was demonstrated early in the session. When the AI suggested using Spring's @Async, the candidate explicitly rejected it and redirected the implementation to use a specific ExecutorService and thread pool. Later, they accepted an AI suggestion for Docker optimization without similar redirection.

Brainstorming with AI
Competent3/5

The AI was used for some brainstorming, primarily by asking for an alternative to the AI's initial suggestion for asynchronous processing. The candidate also explored applying the new pattern to other methods. This was more directive than open-ended, and a later query about Docker optimization was accepted without further exploration.

Problem Solving
Developing2.2/5
Decompose3/5Explore3/5Plan2/5Iterate3/5Time2/5Solution0/5Each axis is a criterion graded at this level; the candidate's polygon shows their score on each.

Problems were broken down into smaller pieces, such as isolating asynchronous execution and then optimizing the Docker build. The candidate iterated effectively, resolving Git issues and refining the Java implementation, but failed to plan ahead or allocate time for verification, submitting the work without ever running or testing it.

What we looked at
Problem decomposition
Competent3/5

The problem was consistently broken down into manageable sub-tasks. Early on, the focus was correctly placed on asynchronous execution, steering the implementation from `@Async` to `ExecutorService`. Later, the Docker optimization task was similarly decomposed into the dual goals of reducing image size and improving build speed.

Approach exploration
Competent3/5

A clear exploration of approaches was demonstrated when the initial AI-generated `@Async` solution was deliberately replaced with a more explicit `ExecutorService`. This was refined by specifying `newCachedThreadPool`. However, this level of exploration was not applied later when the first Docker optimization suggested by the AI was accepted without considering alternatives.

Planning before coding
Developing2/5

An overarching plan was not established before implementation began. Instead, the candidate worked reactively, prompting the AI for specific, method-level changes and then building upon the generated code. The sequence of actions emerged step-by-step rather than from a pre-defined technical roadmap.

Iteration quality
Competent3/5

Technical issues were diagnosed and resolved effectively throughout the session. Early on, Git authentication failures were methodically addressed. Later, a non-fast-forward push rejection was correctly identified and resolved with a force push. Code iterations also showed deliberate refinement without thrashing.

Time allocation
Developing2/5

Time was not balanced across the required phases of the task. A large portion of the initial time was spent on setup and reading documentation. Subsequently, time was focused heavily on implementation, leaving no time at the end for crucial verification steps like running tests or building the Docker image.

Solution verification
Weak0/5

No verification was performed at any point in the session. Despite implementing significant changes to asynchronous processing and Docker configuration, the candidate never compiled the code, ran automated tests, or attempted to build or run the container to confirm functionality.

Areas to develop

Gaps and recommendations aggregated across all criteria.

Skill

Debugging and verification: The only debugging performed was resolving a git clone authentication failure early in the session. All subsequent changes to Java concurrency logic and the Docker build process were accepted and committed without any verification, such as running a build, executing tests, or hitting an endpoint.

Skill

Test design quality: No tests were designed, authored, or executed at any point. Significant changes to the application's threading model, business logic for handling duplicates, and the entire container build process were made without any form of testing to verify correctness or performance.

Problem Solving

Planning before coding: An overarching plan was not established before implementation began. Instead, the candidate worked reactively, prompting the AI for specific, method-level changes and then building upon the generated code. The sequence of actions emerged step-by-step rather than from a pre-defined technical roadmap.

Problem Solving

Time allocation: Time was not balanced across the required phases of the task. A large portion of the initial time was spent on setup and reading documentation. Subsequently, time was focused heavily on implementation, leaving no time at the end for crucial verification steps like running tests or building the Docker image.

Problem Solving

Solution verification: No verification was performed at any point in the session. Despite implementing significant changes to asynchronous processing and Docker configuration, the candidate never compiled the code, ran automated tests, or attempted to build or run the container to confirm functionality.

Comments

Loading comments…