Karan Singh
Available for freelance projects

Your app is slow. Here's where.

Full stack developer — React on the front, Java and Spring Boot at the back. Four years across telecom 5G, HR tech and e-commerce, and a specialism most teams don't have in-house: finding out where the time actually goes.

Flame graph — checkout request, 30s sample width = time spent

Read it upward: the base is the request, each row is one level deeper into the stack. The wide red frame at the top is a lock 28% of the request is spent waiting on — not the database everyone blamed. That's the job.

31%Response time cut
40%Test coverage gained
30%Fewer deploy failures
4Years in production

Mohali, India · IST (UTC+5:30), overlapping EU and US mornings · Replies within one business day

Services

What clients hire me for

Most start with the first. The second is what they call me about when something has already gone wrong.

Ship

Complete web applications

React interface, Spring Boot services, schema underneath. One person accountable, no hand-off gaps for bugs to hide in.

  • React components on REST APIs you own
  • Persistence and schema design
  • Tested, documented, deployed
Diagnose

JVM performance forensics

Slow endpoints, memory climbing until restart, throughput collapsing under load. I profile it and show you the code path responsible — with evidence.

  • YourKit and JMeter under real load
  • Heap dumps for leaks and OOM crashes
  • Thread contention and deadlock hunting
Restructure

Monolith to microservices

Incremental extraction, no big-bang rewrite. On my last e-commerce migration this cut response time 31% without a feature freeze.

  • Boundaries mapped before code moves
  • Integration testing across the seams
  • A rollback path at every step
Connect

Enterprise integrations

Getting your system to talk to someone else's — the work that always overruns, because the other side's spec is wrong.

  • SFTP, file-based exchange, REST
  • Telecom inventory and network data
  • Retry and failure handling that works
Harden

Monitoring and code quality

Finding problems before your users report them, and keeping the codebase from becoming the reason releases are slow.

  • Early warning systems for anomalies
  • SonarQube gates, complexity reduction
  • Jenkins CI/CD with test gates
Selected work

Five builds, five different problems

Open any one for the detail. Client names are withheld — I'll share them on a call.

E-commerce · monolith migration

31% faster, without a rewrite or a feature freeze

−31% response time
The problem

A Java monolith with slow responses, memory leaks under sustained traffic, and concurrency bugs that only appeared in production. Thin coverage and an unreliable pipeline made every release a risk.

What I did
  • Refactored into microservices incrementally, guided by profiling rather than guesswork
  • Found and fixed memory leaks with the YourKit profiler
  • Handled race conditions and optimised for thread safety
  • Led integration testing across the new boundaries
  • Implemented obfuscation compatible with Java 21
Outcome
−31%System response time, confirmed by profiling
+35%Test coverage via JUnit and Mockito
ZeroMajor integration issues after migration
FewerMemory leaks and concurrency defects
Java 21MicroservicesYourKit Multi-threadingJUnit / MockitoCI/CD
Telecom · 5G infrastructure

Network automation for a national 5G rollout

Vendor-scale integration
The problem

5G network automation generates high-volume operational data across systems never designed to talk to each other — internal platforms, vendor tooling and telecom inventory, each with its own transport and format.

What I built
  • Java microservices on Spring Boot and Maven, split for independent deployment
  • Integration adapters over SFTP, WinSCP, REST and UIV for cross-platform exchange
  • Hibernate/JPA persistence over MySQL, restructured to speed up data handling
  • Real-time processing paths sized for live 5G network volume
Why it matters to you

Production infrastructure for a telecom operator at national scale, under real vendor scrutiny. The work is unglamorous: making systems that don't want to talk to each other exchange data reliably, without a person in the loop.

What it demonstrates
  • Large enterprise environments with external stakeholders
  • Integration across protocols, not just HTTP
  • Distributed service design under high data volume
JavaSpring BootMaven Hibernate / JPAMySQLSFTP / WinSCPUIV
HR Tech · document parsing at scale

A resume parser that stopped surprising its customers

FIPS compliance shipped
The problem

A parsing engine used by HR platforms to turn resumes and job descriptions into structured data. Accuracy varied by format, production issues surfaced only via customer tickets, and thread contention was quietly capping throughput.

What I did
  • Refined parsing algorithms across diverse document formats
  • Built an Early Warning System so anomalies were caught before customers noticed
  • Profiled with YourKit to locate thread contention, then optimised those paths
  • Diagnosed memory problems from heap dumps and applied targeted fixes
  • Researched and implemented Java FIPS for cryptographic compliance
  • Refactored core modules to cut cyclomatic and cognitive complexity
Outcome
FewerIncidents reaching customers, via proactive monitoring
HigherParser accuracy across varied formats
FIPSCryptographic compliance achieved and shipped
LowerThread contention and code complexity
Note

This is the engagement that shaped how I work: most of the value came from measurement — profiler, heap dump, monitoring — not from writing new features.

JavaSpring BootYourKit Heap dump analysisMulti-threadingJava FIPSSonarQube
React · open-source tool

Thread Dump Reader — the tool I wanted while debugging

21 tests, 0 deps
Why it exists

A Java thread dump tells you what every thread is doing, but not what's wrong — the answer is in the edges between threads. The hosted analysers all want you to upload the dump, which contains your internal class names, hostnames and business logic.

What it does
  • Detects deadlocks by finding cycles in the lock graph
  • Ranks contended monitors by how many threads are queued behind them
  • Surfaces the hottest stack frames across runnable threads
  • Parses entirely in the browser — nothing leaves the page
How it's built
  • React with hooks; analysis memoised so a large dump isn't reparsed per keystroke
  • Parsing and graph logic kept pure and free of React, so it unit tests directly
  • Iterative cycle detection, not recursive — the pathological dumps this exists to read are exactly the ones that would blow a call stack
The detail I'm proudest of

A thread parked on a condition or inside Object.wait() has already released its monitor. Treating those as blocking edges is the standard way to report deadlocks that don't exist — so only true monitor entry creates an edge, and a regression test holds that line.

ReactJavaScriptVite Node test runnerJVM internalsMIT licensed
Full stack · booking platform

Two products in one app: a storefront and an admin console

End-to-end build
The problem

A booking platform is really two applications sharing a database. Customers search destinations and buy tickets; operators create flights, set schedules and change pricing. Blur the boundary and you get a customer who can reprice a flight.

What I built
  • Customer flow for destination search, seat selection and purchase
  • Admin modules for flight creation, scheduling and pricing
  • Role-based access enforcing a hard separation between the two
  • The services behind both surfaces, and the data model they share
Why it's here

The clearest example of end-to-end ownership: one person responsible from the interface a customer touches down to the access rules in the database. That's the shape most of my freelance work takes.

JavaSpring BootRESTRole-based access
Architecture

How I put a system together

The shape I reach for when a service must stay responsive while something behind it is slow — and, on the bottom rail, the measurement layer that tells you which.

Reference backend architecture A React application and partner systems reach an API gateway with authentication and rate limiting, which routes to Spring Boot microservices. Services exchange events over Kafka, and persist to MySQL via Hibernate and JPA. A measurement layer of profiling, heap analysis, early warning monitoring and CI gates spans the whole system. CLIENTS EDGE SERVICES · SPRING BOOT MESSAGING STATE & EXCHANGE React app COMPONENTS · REST / JSON Internal systems REST · SCHEDULED Vendor systems SFTP · UIV · FILES API gateway AUTH · ROLE-BASED RATE LIMITING REQUEST VALIDATION Domain service MVC · SPRING BOOT Processing service MULTI-THREADED · POOLED Integration service ADAPTERS · RETRY / BACKOFF Kafka TOPICS PARTITIONED BY ENTITY KEY CONSUMER GROUPS IDEMPOTENT REPLAY-SAFE MySQL SYSTEM OF RECORD Hibernate / JPA TUNED ORM LAYER SFTP exchange BATCH · VENDOR FILES External REST THIRD-PARTY SYSTEMS Measurement layer — the part that tells you where the time goes YOURKIT PROFILING · HEAP DUMP ANALYSIS · JMETER LOAD TESTS · EARLY WARNING SYSTEM · SONARQUBE GATES · JENKINS CI/CD

Most teams build the top four columns and skip the bottom rail. Then nobody can say why the service got slow. I build the rail first — it's how the 31% was found, and how I knew it was real.

Toolkit

What I work with

Everything here is something I've used on shipped production work. I'd rather tell you honestly where I'm strong than claim the whole ecosystem.

Frontend
  • React
  • JavaScript (ES6+)
  • HTML5
  • CSS3
  • Component state
  • REST integration
Backend core
  • Java (through 21)
  • Spring Boot
  • MVC
  • Microservices
  • Multi-threading
  • Hibernate / JPA
  • Maven
  • Gradle
Data & messaging
  • MySQL
  • Apache Kafka
  • REST APIs
  • SFTP / WinSCP
  • UIV
Performance & quality
  • YourKit Profiler
  • Heap dump analysis
  • JMeter
  • JUnit
  • Mockito
  • SonarQube
  • Jenkins CI/CD
  • Java FIPS
Workflow
  • Git
  • GitHub
  • Bitbucket
  • IntelliJ
  • X-Ray
  • Agile / Scrum
Engagement

Three ways to work with me

Pick the one that matches how well-defined the work is. If you don't know what's wrong yet, the audit is the cheapest way to find out.

Milestone-based

Project build

For a defined outcome: a new service, a migration, an integration, a version upgrade.

  • Fixed scope, fixed price, milestone payments
  • Weekly demo and written update
  • Tests, CI and documentation included
  • Thirty days post-launch support

4–12 weeks · Fixed price per milestone

Ongoing

Monthly retainer

For teams needing reliable backend capacity without another full-time hire.

  • Reserved hours each week, agreed ahead
  • Feature work, review and escalations
  • Direct Slack access during agreed hours
  • Rolling monthly, thirty days' notice

Minimum 2 months · Monthly rate

STEP 01

Discovery call

Thirty minutes. You describe the symptom; I ask the awkward questions about load, data volume and who else touches the code.

FREE · SAME WEEK
STEP 02

Measure, then scope

I profile before I propose. A written document: the real cause, what I'd change, what I won't touch, and a price. You own it either way.

2–4 DAYS
STEP 03

Fix in visible slices

Code in your repository from day one, a demo each week, a short written update every Friday. No month-long silences.

ONGOING
STEP 04

Handover

Documentation, before-and-after numbers from the same profiler, a walkthrough with your team, thirty days of bug-fix support.

+30 DAYS INCLUDED
Details

Questions clients ask before signing

Who owns the code?

You do, fully, from the first commit. I work in your repository under your account. I'm happy to sign your NDA and work under your contract rather than mine, and to assign IP on payment.

Can you work with our existing team and legacy codebase?

That's most of what I do — every role I've held has been inside an existing enterprise codebase with its own conventions. I follow yours rather than importing my own, and I won't push for a rewrite unless the measurements support one. On my last migration they did, and I have the before-and-after profiles to show it.

How can you promise a performance improvement before seeing the code?

I don't. The audit promises a diagnosis, not a number — you get measurements and a ranked list of causes. Only after that will I quote fixed-price work against specific findings, because by then both of us know what's actually wrong. The 31% was measured before and after with the same profiler, not estimated.

How full is your full stack?

I build React frontends and the Spring Boot services behind them, so I can take a web application end to end without a hand-off. My depth is on the backend — that's where four years of production work sits, and it's why I'm useful when an app is slow rather than just unfinished. If your project is frontend-heavy with intricate design work, I'll say so and suggest pairing me with a specialist. I don't do native mobile.

What are your hours and how do you communicate?

Mohali, India, on IST (UTC+5:30) — solid overlap with European teams and US East Coast mornings. Async by default: Slack or your tool of choice, a written update every Friday, calls scheduled rather than dropped on you. I reply within one business day, and work in English and Hindi.

What if the estimate turns out to be wrong?

On fixed-price milestones, an overrun caused by my estimate is mine to absorb. If the scope genuinely changes — new requirements, or a dependency that turned out different from its documentation — I'll flag it with the cost impact before doing the work. No surprise invoices.

Currently taking on new work

Tell me what's slow, breaking, or not built yet.

Thirty minutes, no pitch deck. "The API got slower and we don't know why" is a perfectly good starting point. If I'm not the right person, I'll say so on the call.