Engineering / 05

Build it. Break it. Understand it. Improve it.

I learn engineering by working through real systems: understanding the problem, designing the flow, building the product, tracing failures and getting it into a state where people can actually use it.

BACKEND FULL-STACK AI PRODUCTION
01 / My approach

Think in systems, not isolated files.

A feature is rarely just a component or endpoint. It is a chain of decisions connecting a user, application state, APIs, data and infrastructure.

ClientReact / Next.js

What the user sees and triggers

APIREST / SSE

Communication and live updates

LogicServices

Business rules and state transitions

DataPostgreSQL / Supabase

Persistent application state

ExternalAI / Auth APIs

Specialized product capabilities

InfraLinux / AWS / Nginx

The environment where it runs

02 / What I work with

Tools are useful when they solve a real constraint.

My stack is broad because the products I build cross boundaries—not because collecting technologies is the goal.

Backend systems

APIs & business logic

Java, Spring Boot, REST APIs, JPA/Hibernate and service-layer design for application workflows.

Full-stack

Product from UI to DB

React and Next.js connected to backend services, authentication, persistence and responsive interfaces.

AI engineering

AI as a product feature

OpenAI and Retell AI integrations where models and voice are part of a larger application workflow.

Data

Persistent application state

PostgreSQL, MySQL, Supabase and relational modeling with application behavior in mind.

Security

Auth & protected flows

JWT-based API access and Clerk authentication/organization workflows across full-stack products.

Real time

Live system behavior

Server-Sent Events and state transitions for experiences where users need current system status.

03 / Build loop

From uncertainty to a working system.

01

Understand

Define the user problem and the system behavior before reaching for a framework.

02

Design

Break the problem into boundaries, data, APIs and explicit states.

03

Build

Implement the smallest useful path while keeping the architecture understandable.

04

Observe

Use logs, browser tools, requests, responses and database state to see what is really happening.

05

Debug

Trace the failure back to its root cause instead of patching the visible symptom.

06

Ship

Deploy, verify the production path and iterate from what the system teaches you.

04 / Debugging

Follow the evidence.

When something breaks, I start from the symptom and work backwards through the system instead of guessing.

TRACE THE REQUEST
Browser / client
↓
HTTP request
↓
Controller
↓
Service / business logic
↓
Database / external service
↓
Server / infrastructure
CORS

The browser rejected API requests because the frontend origin did not match the backend configuration. The useful move was to inspect the actual request and response headers, then fix the Spring configuration.

Authentication

Some requests contained a JWT while others did not. Checking client storage, request behavior and protected endpoints helped separate an auth-state problem from a backend failure.

API contracts

A 400 response is information. Rather than hiding it in the UI, trace the endpoint contract, inputs and server-side validation to understand why the request was rejected.

Real-time routing

An SSE connection returning 404 required checking the browser URL, controller mapping and server routing together—not assuming the frontend was at fault.

Debugging is part of development.

The goal isn't to avoid every bug. It is to become faster at turning an unknown failure into a known cause and a deliberate fix.

05 / Principles

How I make engineering decisions.

01

Clarity

Prefer understandable architecture over unnecessary complexity. A system should be explainable before it is impressive.

02

Ownership

Take a feature from problem definition through implementation, debugging, deployment and iteration.

03

Evidence

Logs, network requests, response headers and database state beat assumptions when a system fails.

04

Boundaries

Keep responsibilities clear between UI, APIs, business logic, persistence, identity and external services.

05

Iteration

A working first version is a starting point. Feedback and failures reveal what the next version needs.

06

Users

Technical decisions matter because they make a product more useful, reliable or easier to operate.

06 / Proof in the work

See the engineering in context.

Doctor Queue shows the backend and real-time side. FoloUp AI shows the AI, voice and multi-service integration side.