Web Development

Apr 06
Why You Should Avoid Using Server Actions for Data Fetching in Next.js 15

Why You Should Avoid Using Server Actions for Data Fetching in Next.js 15

Next.js’s Server Actions make it easy to call server code directly from components via POST requests. They work great for mutations like form submissions or database writes. But using them for data fetching can hurt performance and complicate caching and concurrency.
12 min read
Jan 07
How do we decide how to solve a problem?

How do we decide how to solve a problem?

In software development we encounter many problems daily—from UI glitches to architecture issues. A clear, precise definition lets us choose the right path. Then we set evaluation criteria, explore options, prototype, iterate based on feedback, and document our decisions.
4 min read
Jan 05
A Year with Next.js Server Actions: Lessons Learned

A Year with Next.js Server Actions: Lessons Learned

Server Actions in Next.js let you write server-side code directly in React components, cutting down boilerplate and simplifying client-server communication. They shine for data mutations and UI-tied operations, but require care to avoid tight coupling, overuse, or vendor lock-in.
11 min read
Sep 11
Managing complexity: Shared business logic in Next.js (Part 1: Server-Side Architecture)

Managing complexity: Shared business logic in Next.js (Part 1: Server-Side Architecture)

In Next.js 14+, structuring shared business logic through repositories, action functions, and standardized error handling cuts duplication and keeps API routes and Server Actions consistent. This layered approach boosts maintainability, type safety, and sleep quality.
9 min read
Mar 05
Advanced Union Type Techniques in TypeScript — 05 Object Values with const Assertion

Advanced Union Type Techniques in TypeScript — 05 Object Values with const Assertion

Const assertions in TypeScript lock values to their exact literal types and make them readonly, preventing accidental changes. Used strategically in configs, mappings, and critical state, they catch errors early, keep code predictable, and boost maintainability without unnecessary rigidity.
6 min read
Jan 15
Advanced Union Type Techniques in TypeScript — 04 Extracting Types from Discriminated Unions

Advanced Union Type Techniques in TypeScript — 04 Extracting Types from Discriminated Unions

Discriminated unions use a shared property to let TypeScript narrow types automatically. From sorting messages to handling server errors, they boost clarity, IntelliSense, and safety, ensuring each variant is processed with the right properties and avoiding runtime surprises.
6 min read
Jan 09
Advanced Union Type Techniques in TypeScript — 02 Excluding Types

Advanced Union Type Techniques in TypeScript — 02 Excluding Types

The Exclude utility type in TypeScript filters out unwanted members from a union, leaving only the relevant ones. From hiding internal props to limiting event handlers or restricting state actions, Exclude keeps types precise, modular, and aligned with real-world usage.
4 min read
Dec 07
TypeScript Error Handling: A Closer Look into Custom Error Objects

TypeScript Error Handling: A Closer Look into Custom Error Objects

By re-creating errors from different sources with a consistent factory function, you can standardize formats, ensure predictable handling, and centralize customization. This pattern makes complex TypeScript apps easier to maintain and adapt as services and requirements evolve.
4 min read
Nov 07
Asynchronous Operations and Error Handling in TypeScript

Asynchronous Operations and Error Handling in TypeScript

TypeScript strengthens async programming by making inputs, outputs, and errors explicit. From generics with discriminated unions to custom error classes and structured results, you can create predictable, maintainable async flows that work seamlessly in complex team projects
7 min read
Oct 30
TypeScript Pattern 101: Basic Types and Interfaces

TypeScript Pattern 101: Basic Types and Interfaces

Dive deeper than string and number and unveil the power of TypeScript’s type system through custom types, generics, and type manipulation. This is where the richness of TypeScript’s type system truly shines, opening doors to more robust and self-explanatory code.
3 min read
Oct 27
TypeScript Pattern 101: Type Guards

TypeScript Pattern 101: Type Guards

Type guards in TypeScript function as safety checks. They help ensure you’re dealing with the exact type you expect, making them invaluable for dealing with complex data structures or various types.
2 min read
Aug 04
Understanding Immutability in JavaScript

Understanding Immutability in JavaScript

Immutability in JavaScript means data stays unchanged after creation. It improves predictability, debugging, and performance, and helps avoid tricky state bugs. With tools like React, Redux Toolkit, and TypeScript’s readonly features, it becomes easier to write safer, more maintainable code.
10 min read