I build and maintain full-stack web applications, with most of my work centered around backend services, APIs, production debugging, and performance issues.
A lot of freelance projects already have something that hurts — slow endpoints, unstable behavior, deployment problems, database bottlenecks, or backend code nobody wants to touch anymore because changes keep breaking something else.
That’s usually where I step in.
- Full-stack applications using React, TypeScript, Node.js, and Python
- Backend APIs and service logic
- PostgreSQL query optimization and schema cleanup
- Redis caching for reducing unnecessary database load
- Background jobs and async processing
- Production debugging through logs and request tracing
- Refactoring backend code that became risky or difficult to maintain
- APIs behaving consistently instead of working “most of the time”
- Keeping frontend state and API behavior predictable
- Database queries staying reasonable under heavier usage
- Debugging that doesn’t turn into guessing for three hours
- Keeping deployments boring and predictable
I prefer applications that stay understandable when things go wrong.
That usually means:
- separating business logic from API and database layers
- avoiding abstractions until they solve a real problem
- adding caching only after identifying the actual bottleneck
- keeping logs readable enough to trace failures quickly
I’m generally skeptical of unnecessary complexity. I’d rather work with a straightforward application that’s easy to debug than a clever setup that becomes painful to maintain later.
React, TypeScript
Node.js, Python
PostgreSQL, Redis
Docker, deployment workflows, CI/CD pipelines
Building reliable full-stack applications, improving backend performance, and handling production issues without adding unnecessary complexity.
- Email: josephtan607@gmail.com
- GitHub: https://github.com/jsf-tan
- Portfolio: https://josephtan.vercel.app/

