Skip to content
OY ozgur yildiz
home writing work about
say hi →
/ writing / tags / #Architecture

#Architecture

42 posts tagged with this topic. ← All tags

  • Jun 4, 2026

    Database sharding: when vertical scaling isn't enough.

    Sharding partitions data across multiple database instances. Here's how the partitioning strategies work and what operational complexity they introduce.

  • May 21, 2026

    API design review: 10 questions before you call an endpoint done.

    A checklist of design decisions that are easy to skip when building an endpoint and painful to change after consumers depend on it.

  • May 4, 2026

    gRPC: when REST isn't the right protocol.

    gRPC trades REST's universality for performance, strict contracts, and bidirectional streaming. Here's what that trade buys you and when it's worth making.

  • Apr 13, 2026

    Form libraries: when Formik, React Hook Form, and none are each correct.

    A practical comparison of form handling approaches in React -- uncontrolled forms, React Hook Form, and Formik -- with guidance on when each makes sense.

  • Apr 9, 2026

    React Query vs RTK Query: the actual differences.

    A concrete comparison of TanStack Query and RTK Query -- what each does well, where they diverge, and how to choose.

  • Apr 6, 2026

    Zustand vs Redux: when the simpler store is the right choice.

    What Zustand does differently from Redux, the concrete cases where each is the better fit, and what you actually give up going simpler.

  • Apr 2, 2026

    RTK Query cache invalidation: the tags system that keeps UI in sync.

    How RTK Query's tag-based cache invalidation works, how to configure it, and the patterns for keeping your UI consistent after mutations.

  • Mar 30, 2026

    Streaming HTML: sending the page before all the data is ready.

    How HTTP streaming works with React and Next.js, the role of Suspense boundaries, and why it improves Time to First Byte.

  • Mar 26, 2026

    Server actions: mutations without an API endpoint.

    How Next.js Server Actions work, what they replace, the security model, and when they're the right choice over a dedicated API route.

  • Mar 23, 2026

    Concurrent React: what startTransition actually does.

    How React's concurrent features work, what startTransition is for, and the difference between urgent and non-urgent state updates.

  • Mar 19, 2026

    React.memo: when it helps and when it makes things worse.

    How React.memo works, the cases where it actually improves performance, and the common misuse that wastes memory without helping.

  • Mar 16, 2026

    Turbopack vs webpack: what's actually faster.

    What Turbopack is, how it differs from webpack architecturally, what the benchmarks measure, and where it stands today.

  • Mar 12, 2026

    Next.js app router: what changed and why it matters.

    The key differences between Next.js pages router and app router -- React Server Components, layouts, streaming, and the new data fetching model.

  • Mar 9, 2026

    Service worker caching: the strategies that make apps load faster.

    The five service worker caching strategies, when to use each, and how to implement them with Workbox.

  • Mar 5, 2026

    CSS containment: the property that isolates layout recalculations.

    How the CSS contain property works, what containment types exist, and how content-visibility accelerates rendering of off-screen content.

  • Mar 2, 2026

    Font loading: the FOUT/FOIT problem and the CSS that fixes it.

    Why web fonts cause layout shift and invisible text, and how font-display, preload, and size-adjust solve it.

  • Feb 26, 2026

    Web performance budgets: setting numbers before you regress past them.

    How to define performance budgets, integrate them into CI, and use them to keep Core Web Vitals from degrading over time.

  • Feb 23, 2026

    Module federation: sharing code between independently deployed frontends.

    How Webpack Module Federation works, when micro-frontends make sense, and the pitfalls of sharing code across deployment boundaries.

  • Feb 19, 2026

    Full-text search: when PostgreSQL is enough and when it isn't.

    How PostgreSQL full-text search works, its real limitations, and what Elasticsearch and Typesense add that PostgreSQL can't.

  • Feb 16, 2026

    A/B testing infrastructure: the backend plumbing for controlled experiments.

    How to build reliable experiment assignment, the data pipeline for measuring results, and the guardrails that prevent experiments from breaking production.

  • Feb 12, 2026

    Secrets management: the patterns that don't leak credentials.

    Why .env files are not enough, and the tools and patterns that keep database passwords, API keys, and certificates out of your git history.

  • Feb 9, 2026

    Zero-trust networking: the security model that assumes breach.

    What zero-trust means in practice, why the perimeter model failed, and the concrete controls that implement it.

  • Feb 5, 2026

    Kubernetes basics: the problem it solves and the concepts you need first.

    What Kubernetes actually does, the core abstractions you need to understand, and when it's overkill.

  • Feb 2, 2026

    Infrastructure as code: managing cloud resources from version control.

    What infrastructure as code is, why it matters, and how Terraform and Pulumi approach the problem differently.

  • Jan 29, 2026

    V8 internals: JIT compilation and what deoptimizes your hot paths.

    How V8 moves from interpreted bytecode to optimized machine code, and the specific conditions that cause it to throw that work away.

  • Jan 26, 2026

    JavaScript engine optimization: the hidden classes that matter.

    How V8 and other JS engines optimize objects using hidden classes, and the coding patterns that keep your code on the fast path.

  • Jan 22, 2026

    Memory management in JavaScript: GC, leaks, and the heap snapshot.

    How JavaScript's garbage collector works, what causes memory leaks, and how to find them with a heap snapshot in Chrome DevTools.

  • Jan 19, 2026

    The browser rendering pipeline: DOM, CSSOM, layout, paint, composite.

    How the browser turns HTML and CSS into pixels on screen, and what that means for writing performant web code.

  • Jan 15, 2026

    Monorepo basics: when one repo actually makes sense.

    What monorepos solve, the tooling that makes them workable, and the tradeoffs you accept when you put everything in one place.

  • Jan 12, 2026

    Dependency audits: finding vulnerabilities before they become your problem.

    How npm audit works, what the output means, and a practical workflow for keeping your dependency tree clean.

  • Jan 8, 2026

    npm scripts: the task runner you already have but probably underuse.

    How npm scripts work, the lifecycle hooks available, and patterns that replace external task runners for most projects.

  • Jan 5, 2026

    Semantic versioning: what the 3 numbers mean and when to bump each.

    A practical guide to semver -- MAJOR.MINOR.PATCH -- with real rules for when to increment each and how package managers use it.

  • Jan 1, 2026

    Backpressure: what happens when your consumer is slower than your producer.

    Understanding backpressure in data pipelines, streams, and message queues -- and the patterns that prevent your system from falling over.

  • Dec 29, 2025

    Event sourcing: storing what happened instead of the current state.

    How event sourcing works, why it gives you a complete audit log, and when the complexity is worth it.

  • Dec 25, 2025

    CQRS: separating reads and writes when they have different needs.

    CQRS splits your application into two models — one optimized for commands, one for queries. Here's when that separation earns its complexity.

  • Dec 22, 2025

    The CAP theorem: what distributed systems can and can't guarantee.

    What the CAP theorem actually says, how real databases position themselves, and what this means when choosing a data store.

  • Dec 18, 2025

    Circuit breakers: stopping a cascade failure before it takes everything down.

    How the circuit breaker pattern prevents cascade failures in distributed systems, with a Node.js implementation.

  • Nov 27, 2025

    Load balancing: distributing traffic without a single point of failure.

    How load balancers distribute traffic across server instances, the algorithms they use, and how health checks keep traffic away from failed instances.

  • Nov 13, 2025

    The 12-factor app: principles that make deployment not a surprise.

    A practical walkthrough of the 12-factor app methodology and how each factor prevents the common failure modes of deployment.

  • Nov 10, 2025

    Event-driven architecture: the pattern that decouples services.

    How event-driven architecture works, when to use it, and how to implement it with a message broker versus direct event emission.

  • Apr 7, 2025

    Scaling WebSocket servers: why sticky sessions aren't the only answer.

    WebSockets make horizontal scaling harder than stateless HTTP. Sticky sessions are the simple solution. Redis pub/sub is the scalable one. When each approach is right.

  • Mar 27, 2025

    Broadcasting to multiple clients: the pub/sub pattern.

    When a WebSocket server needs to send a message to many clients, pub/sub is the natural model. How to implement channels, subscriptions, and broadcasts in Node.js.

OY ozgur yildiz
GitHub LinkedIn Email RSS
© 2026 ozgur yildiz. all rights reserved.