Resources · Engineering

Engineering notes.

Short, practical lessons from building real software — debugging, APIs, databases, Git and deployments. First published on LinkedIn, collected here.

Newest first

All notes.

Note #08 · Performance · MySQL

A slow application isn't always a slow server.

We recently looked into a page that was taking longer than expected to load. The first instinct can be to blame the server. Instead, we measured the request and looked at what was actually happening.

The database query was retrieving more data than the screen needed. We changed the query to fetch only the required columns and records. The result: less data transferred, less processing, and a faster response.

Lesson: Before increasing server resources, measure where the time is actually being spent. Performance optimization starts with finding the bottleneck — not guessing it.

View on LinkedIn →

Note #07 · Git · Culture

A commit message is documentation for your future self.

One small engineering habit that makes a big difference is writing meaningful Git commit messages. Compare these:

fixed bug
Fix invoice validation when customer GST number is empty

The second message tells the team what changed and why. At TechRacine, we try to keep commit messages short and specific, focused on one change, and easy to understand during code reviews and deployments.

Lesson: Six months from now, you'll search Git history more often than you think. Write commits for the next developer, not just for today's push.

View on LinkedIn →

Note #06 · API Design · Validation

Frontend validation improves user experience. API validation protects the system.

A form may validate fields in the browser, but API requests can still come from Postman, mobile apps, third-party systems, or automated scripts. Our API checklist always includes required-field, data-type, and business-rule validation, plus clear error messages with proper HTTP status codes.

This prevents invalid data from reaching the database and makes integrations much more reliable.

Lesson: Validate at every layer, but trust only the server-side validation.

View on LinkedIn →Related article →

Note #05 · API · Debugging

The API returned 200 OK… but the business operation still failed.

A successful HTTP status doesn't always mean a successful business transaction. We debugged an integration where the API returned 200 OK, but the expected record was never created — the request was accepted, but business validation failed internally, and the error sat inside the response payload our application wasn't checking.

What we changed: validate both the HTTP status and the response body, handle business error codes separately, and log request IDs with response payloads.

Lesson: Don't stop debugging at 200 OK. A green status code doesn't always mean the job is done.

View on LinkedIn →

Note #04 · Laravel · Hosting

A hosting issue that looked like a code issue.

A Laravel application worked perfectly locally, but after deployment it kept throwing a 500 error. The code reviewed clean. Root cause: the hosting server ran a different PHP environment than expected, combined with stale Laravel cache files loading incorrect configuration.

Fix: verified the server PHP version, cleared and rebuilt config, route and view caches, and validated the production .env values. The app recovered without changing business logic.

Lesson: Before changing code, verify the runtime environment — a config mismatch can look exactly like an application bug.

View on LinkedIn →

Note #03 · DevOps · Configuration

Works locally, fails after deployment? Check the environment first.

A feature worked perfectly locally but failed after deployment. Instead of changing code, we compared environment configuration — API keys, database settings, storage paths, environment variables. The issue was a configuration mismatch between local and production, not application logic.

Lesson: Before debugging the code, verify the environment. Many production issues are configuration differences, not development mistakes.

View on LinkedIn →

Note #02 · MySQL · Database

Foreign key errors point at the data flow, not the query.

Updating a record failed with a foreign key constraint error while the application logic looked correct. The real issue was a mismatch between the value being updated and the related record the database expected. Instead of bypassing the constraint, we traced the table relationship and corrected the underlying data flow.

Lesson: Database constraints aren't obstacles to work around — they tell you exactly where your data model needs attention.

View on LinkedIn →

Note #01 · API · Debugging

Trace the data flow before fixing.

An API call succeeded, but the expected data wasn't appearing. Instead of assuming the frontend was broken, we checked the request and response in the browser's Network tab — the API itself returned an outdated value. The issue was backend caching logic, not the UI.

Lesson: Don't debug based on assumptions. A few minutes of investigation can save hours of fixing the wrong layer.

View on LinkedIn →

Like how we think? Work with us.

This is how we approach every project — measure first, fix the right layer, document the lesson.