Companies post real engineering problems. You solve them. We evaluate your code, the decisions behind it, and how you think through a build. Top profiles get found by hiring teams.
Start your first buildFree to start. No credit card.
You built real things. The problem is, nobody ever looked at the engineering behind them — so it all blends into the same pile.
A stack of certificates says you finished the course. It doesn't say much about the choices you'd make when the problem isn't laid out for you.
A resume gets about seven seconds of attention. That's not enough time for anyone to see what you're actually good at.
The problem isn't your skill. It's that nothing you're doing right now actually proves it.
Here's what actually works. Three steps. No resumes. No algorithm quizzes.
Step 01
Browse open builds posted by real companies. Each one is a real engineering problem — not a DSA puzzle or a tutorial project.
Step 02
Work in your own IDE. When you’re done, submit your GitHub repo. That’s the entire submission process.
Step 03
XVal reviews your code and the decisions behind it. You get written feedback on what worked, what to sharpen, and which dimensions came through strongest.
Every submission gets one. Real feedback on the decisions you made, the tradeoffs you weighed, and where to sharpen next.
Stealth Fintech Startup
Engineering Assessment
A thoughtful engineer who uses AI as a collaborator.
AI clearly helped with first drafts and boilerplate, but the architectural choices — where to draw the abstractions, how to handle failure, what to pull out when the same logic kept appearing — came from the candidate. The adapter pattern, typed error hierarchy, and database-level duplicate prevention show genuine engineering judgment.
What They Built
Payment processing API ........ complete Adapter pattern for providers ... complete Error handling hierarchy ....... complete Batch processing .............. complete Duplicate prevention .......... complete Integration tests ............. partial — missing partial-failure scenarios
Ownership
The candidate owns the architecture end-to-end. The adapter pattern was introduced before any provider-specific code, showing upfront design thinking. Error hierarchy and duplicate prevention were refined iteratively over multiple sessions.
You kept the reconciliation logic separate from each payment provider, which is the right call. If you ever need to swap out Stripe for a new provider, you only change one file. One thing to work on: you wrote the retry logic three times, once per provider. Pull that into a shared function so you only have to maintain it in one place.
6 of 8 tests passed. 2 failures in batch processing suite.
Review Summary
You kept the reconciliation logic separate from each payment provider, which is the right call. If you ever need to swap out Stripe for a new provider, you only change one file. One thing to work on: you wrote the retry logic three times, once per provider. Pull that into a shared function so you only have to maintain it in one place.
Strengths
Areas for Improvement
Key Issues
src/adapters/StripeAdapter.ts:61, PayPalAdapter.ts:44, SquareAdapter.ts:52
→ Create a shared withRetry() function with configurable backoff. All three adapters should use it.
In production payment systems, retry logic is shared infrastructure. When it is duplicated, the copies drift apart over time and bugs only get fixed in one place.
tests/adapters/
→ Write a test where one provider goes down mid-batch. Make sure the transactions that already went through are safe.
Partial batch failures are the most common failure mode in payment systems. Testing for them is not optional.
src/handlers/BatchProcessor.ts:12–14
→ Pass adapters into the constructor. This makes testing easier and lets you add new providers without changing BatchProcessor.
This is called dependency injection. It is how production systems stay flexible when new integrations are added.
src/services/ReconciliationEngine.ts, src/adapters/StripeAdapter.ts, PayPalAdapter.ts, SquareAdapter.ts
src/services/DiscrepancyDetector.ts — event-driven flagging within reconciliation loop
Typed errors in src/errors/ but bare catch blocks in src/handlers/BatchProcessor.ts:92
src/handlers/BatchProcessor.ts — batching works but retry strategy inconsistent across adapters
No OpenAPI spec found — README.md covers features only
Code Files
18
Avg Lines/File
94.0
Max File Lines
312
Concentration
14%
Folder Depth
4
Comment Ratio
6%
Used AI tools? Good. We evaluate your engineering decisions, not who typed the code.
Feedback that shows where you're strong, where you're developing, and what to work on next.
| Build | Focus | Readability | Error Handling | Architecture |
|---|---|---|---|---|
| Build 1 | First real backend | fair | poor | fair |
| Build 2 | Learned to catch failures | good | fair | fair |
| Build 3 | Started thinking in layers | good | good | good |
| Build 4 | Design decisions, not just code | excellent | good | excellent |
Every review shows exactly where you stand and what to work on next.
Every build you complete adds to a profile that companies actually search. Not a resume. Not a certificate. Proof.
Based on 5 completed builds
Payment Reconciliation Service
Stealth Fintech Startup
Clean adapter pattern, typed error hierarchy
Multi-Tenant Notification Engine
Series A SaaS Company
Thoughtful tenant isolation, strong observability
Route Optimization API
B2B Logistics Platform
Solid core logic, lighter on edge-case handling
Real-Time Chat Backend
EdTech Scale-Up
Good concurrency model, clean backpressure handling
Inventory Sync Pipeline
D2C E-Commerce Startup
Pragmatic design, well-tested happy path
Companies post builds to find engineers to hire. When you rank in their challenge, you're on their shortlist. A company searching for “Node.js engineers with strong architecture” will see your profile. You don't apply. They find you.
Post a real engineering problem. Receive ranked candidates with full evaluation reports and GitHub proof.
Post a challenge →