Blog
Tech Tips.
Small, practical changes that make software faster, safer or easier to maintain.
16 postsPage 1 of 2RSS feed
Async error handling in JavaScript: try/catch done right
Unhandled promise rejections crash Node.js services and leave browser apps quietly broken. Catch async errors with try/catch, .catch and a global safety net.
Refactoring with AI assistants: a safe workflow
AI assistants can untangle a long function in seconds, and introduce a subtle bug just as fast. This workflow keeps the speed and puts tests and review in charge.
Prompt engineering for developers: 5 habits that work
Vague prompts get vague code. Five habits make AI models far more useful for development work: clear instructions, context, examples, small steps and iteration.
Speed up Docker builds with layer caching
Slow Docker builds delay every pull request. Order your Dockerfile for the layer cache, shrink the build context and use BuildKit cache mounts to cut build time.
WebP and AVIF: modern image formats with a fallback
WebP and AVIF produce much smaller files than JPEG and PNG at the same visual quality. How to convert your images and serve them with the picture element.
Structured logging: make your logs searchable
Plain text logs are easy to write and painful to search. Structured JSON logs with levels and consistent fields turn finding one failed order into a single query.
Dependency hygiene: audit, update and prune npm packages
Outdated and unused packages are a security risk and a tax on every install. A short routine with npm audit, npm outdated and a cleanup tool keeps a project healthy.
Client-side caching for API responses
Refetching the same data on every visit wastes time and bandwidth. HTTP cache headers, an in-memory cache and browser storage each solve a different part of the problem.
Tree shaking: why your bundle still ships unused code
Tree shaking removes code you never import, but only when the bundler can prove it is unused. ES modules, the sideEffects flag and your import style decide what goes.
JavaScript debugging beyond console.log
console.log works until the bug is three calls deep. Breakpoints, conditional breakpoints, logpoints and the call stack show what the code does while it runs.
Native image lazy loading: one attribute, used well
The loading attribute delays offscreen images until the user scrolls near them. It takes one word, but on the wrong image it makes a page slower. Where it belongs.
Serverless cold starts: causes and fixes
The first request to an idle serverless function is slow because the platform has to start it. What happens during a cold start and six ways to shorten or avoid it.
Tell us what’s in the way.
A few lines is enough. You get a candid yes, a candid no, or a sharper question.
- Working software in week four
- A reply in one business day
- Handover is the deliverable
Prefer email? [email protected]