Full Stack Java Developer Skills Challenge
The Scenario You are a full-stack developer on the Digital Lending team at a large financial services firm. Your team owns the retail mortgage loan origination platform — the system that processes applications from initial intake through…
Create a free account to upload your work. Your progress saves as a draft until you submit.
What You'll Be Doing
The Scenario
You are a full-stack developer on the Digital Lending team at a large financial services firm. Your team owns the retail mortgage loan origination platform — the system that processes applications from initial intake through to underwriting decision.
The Platform
The platform currently consists of three microservices:
- Application Service — handles loan application intake, applicant data, and status tracking. Exposes a RESTful API consumed by the Angular dashboard.
- Document Service — manages document upload, storage, and metadata. Loan officers upload applicant documents (pay stubs, W-2s, bank statements) which are stored in S3 and indexed in PostgreSQL.
- Underwriting Service — owned by a separate team. Receives a structured underwriting packet and returns a decision. You cannot modify this service's API — you can only consume it.
The frontend is an Angular loan officer dashboard where staff review applications, upload documents, and track pipeline status.
The Initiative
The firm is piloting a GenAI-assisted document review feature. Today, loan officers manually read each uploaded document, extract key data points (employer name, income figures, pay period, YTD totals), and enter them into the application record by hand. This is slow, error-prone, and creates a bottleneck in the pipeline.
Your task is to build a proof-of-concept that uses an LLM API to automatically extract structured data from uploaded pay stubs and flag discrepancies (e.g., income on the pay stub doesn't match what the applicant self-reported). The extracted data and any flagged discrepancies should surface in the Angular dashboard for the loan officer to review and approve before the data flows downstream to underwriting.
What Exists Today
- Backend: Java 17, Spring Boot 3.x, Spring Security with role-based access (loan officers, underwriters, admins)
- Frontend: Angular 15, TypeScript, NgRx for state management
- Database: PostgreSQL (application and document metadata), S3 (raw document files)
- Infrastructure: AWS — ECS for services, RDS for PostgreSQL, S3 for storage. CI/CD via GitHub Actions.
- The Underwriting Service API is documented: it accepts a structured JSON packet with validated financial data and returns an underwriting decision. You cannot modify this contract.
Constraints
Honor these constraints in your solution. They reflect the real operating environment.
- Infrastructure: Work within the existing stack — Java 17, Spring Boot 3.x, Angular 15, PostgreSQL, AWS (ECS, RDS, S3). Do not introduce new infrastructure components (e.g., no new message brokers, no switching to a different database). You may add new services within the existing technology choices.
- PII / Regulatory: No raw PII (Social Security numbers, account numbers, or unredacted income figures tied to an identified individual) may be sent to any external LLM API. The compliance team has mandated this. Your solution must demonstrate how PII is handled before the LLM sees it.
- Scope: The proof-of-concept must focus on one document type: pay stubs. Do not attempt to solve for all document types (W-2s, bank statements) in this iteration. Identify what you would extend in a second sprint, but deliver a working POC for pay stubs only.
- Service boundaries: The Underwriting Service is owned by another team. You cannot modify its API contract. Your GenAI extraction service must produce output compatible with the existing underwriting packet format. Design your service boundaries accordingly.
- Produce three deliverables. This is a proof-of-concept, not production-ready code — prioritize design clarity and architectural reasoning over polish.
What You'll Accomplish
Integrate an LLM API into an existing microservices architecture with proper PII handling
Build a full-stack GenAI-assisted document review feature across Java/Spring Boot and Angular
Design a human-in-the-loop approval workflow for AI-extracted financial data
Reason through production readiness concerns for AI features in regulated financial services
Demonstrate critical evaluation and iterative use of AI coding tools
How Your Work Will Be Scored
What to Submit
Code Artifact
Format: no restrictions
The Task
Build a proof-of-concept demonstrating the GenAI document review feature integrated into the existing platform. Your code must include both backend and frontend:
Backend (Java / Spring Boot)
- A new service or module that accepts an uploaded pay stub, sends the relevant content to an LLM API for extraction, and returns structured data (employer, income, pay period, YTD totals, discrepancy flags)
- RESTful API endpoint(s) that the Angular frontend will consume
- Integration with the existing Application Service and Document Service — show how the extracted data connects to the application record
- PII handling: demonstrate how sensitive data is redacted or protected before being sent to the LLM API
Frontend (Angular)
- A dashboard component where loan officers can see the AI-extracted data alongside the applicant's self-reported data
- Visual flagging of discrepancies (e.g., income mismatch between pay stub and application)
- An approval workflow: the loan officer reviews the AI extraction, can accept, edit, or reject each extracted field before it flows to underwriting
You may use mock data and stub external service calls (S3, LLM API) where needed. The proof-of-concept should demonstrate the design, data flow, and integration points — it does not need to run against live infrastructure.
Sign in to upload files
README Document with Sections A, B, and C
Format: .pdf, .doc, .docx, .rtf, .txt, .md
Written Document
A written document with three sections:
Section A — Architecture & Design Rationale (300–500 words)
- How does your GenAI document review service fit into the existing microservices architecture? Where does it sit relative to the Application, Document, and Underwriting services?
- What were the key design decisions and trade-offs you made? What alternatives did you consider?
- How does data flow from document upload through AI extraction to loan officer review to underwriting? Include a simple diagram if helpful.
- How did you handle the PII redaction requirement, and what are the trade-offs of your approach?
Section B — Production Readiness & Leadership (200–400 words)
- Part B1: What would need to change before this proof-of-concept goes to production? Cover at minimum: error handling for LLM failures or hallucinations, monitoring and observability, security hardening, and rollback strategy if the AI extraction produces bad results at scale.
- Part B2 — Required reasoning question (answer without AI assistance): Describe a scenario where an AI coding assistant would give you a plausible but incorrect answer for this type of problem — and explain specifically how you would catch it. What would the incorrect output look like, and what would you check to identify the error before acting on it?
Section C — AI Usage Log (Mandatory)
This is not a trick. We want to see how you work with AI — not whether you used it.
In a short section of your README, document your AI collaboration process. For each significant interaction with an AI tool, briefly note:
- What you asked the AI to help with
- What it gave you
- What you kept, changed, or rejected — and why
Three interactions documented is sufficient. The log does not need to be exhaustive.
Sign in to upload files
Video Walkthrough
Format: .mp4, .mov, .webm
Video Walkthrough
Record a screen-share video walking through your submission. Upload it as an MP4 or MOV file directly on the Provn platform as a separate file. Structure your video as follows:
- Summary (~1 minute): The problem and your approach
- Code walkthrough (~3–4 minutes): Walk through your code — both backend and frontend. Explain your design decisions, not just what the code does. How do the services interact? Why did you structure it this way?
- Architecture & production reasoning (~2–3 minutes): How does your service fit into the microservices architecture? What would you prioritize for production readiness? How would you mentor a junior developer working on this codebase?
- Mandatory AI question (~1–2 minutes): Walk me through one moment where you disagreed with, pushed back on, or redirected what the AI gave you — and what you did instead. Name the specific moment. Explain what the AI produced that didn't meet the bar, what you did differently, and why.
- Reflection (~30–60 seconds): What would you do differently with more time?
Speak naturally. Communication is assessed on clarity of technical ideas and logical structure — not verbal polish, accent, or filler words.
Sign in to upload files
Create a free account to upload your work. Your progress saves as a draft until you submit.
On this page