// writing

Notes from the desk.

Essays on craft, business, and the discipline of building deliberately. Technical deep dives on CSS, performance, and architecture. Published when the thinking is ready.

Every Android Animation Explained — From Views to Compose, in Kotlin

The complete reference for animation on Android — View.animate(), ObjectAnimator, AnimatedVectorDrawable, the Transition framework, MotionLayout, physics-based springs, Lottie, and every Jetpack Compose animation API.

Every Loading Animation Explained — From Spinner to Shader

The complete reference — classics done right, iconic branded loaders dissected, SVG path tricks, conic gradients with @property, Houdini paint worklets, View Transitions, skeleton screens, and the experimental patterns nobody uses yet.

Docker Production Checklist — The 15 Things That Matter

Image hardening, signals, secrets, healthchecks. The 15 checks that separate a working dev container from a real production deployment.

Observability — Logs, Metrics, Traces, and When Each One Wins

Each pillar captures different information at different costs. What to instrument, what to skip, and how to use them together when production is on fire.

JWT vs Sessions — The Honest Comparison

JWTs aren't always better than sessions — often they're worse. The complete tradeoff analysis: revocation, security, scaling, and the decision framework.

HTTP Caching Headers — The Complete Deep Dive

Cache-Control directives nobody uses, ETags vs Last-Modified, the Vary header trap, and the configurations that actually work in production CDNs.

Zero-Downtime Deployments — Blue-Green, Canary, Rolling

Blue-green, canary, rolling — each solves different problems. Plus the database migration patterns that don't break things during the deploy.

Error Handling Patterns — Beyond Try-Catch

Exceptions vs result types, error boundaries, retry logic with backoff, circuit breakers. The architecture of error handling, not the syntax.

The On-Call Survival Guide

On-call rotations break engineers when done badly. Runbook discipline, handoff hygiene, recovery time, and how to push back on bad rotations.

Learning a New Codebase Fast — The First 30 Days

New job, 200k lines of code you've never seen. The practices that get you productive in 30 days instead of 3 months — and the traps that slow people down.

Async Communication Mastery — Writing for Distributed Teams

Remote teams run on writing. The patterns that make async actually work — context-first messages, decision documents, and the meetings to replace.

Tech Debt — When to Pay, When to Live With It

Not all tech debt is the same. The framework for which debt costs you compound interest, which to ignore, and how to make the case for cleanup work.

REST API Design — The Patterns That Don't Bite You Later

Versioning, pagination, errors, idempotency, rate limiting. The decisions that determine whether your API ages well or becomes a maintenance nightmare.

TypeScript Power Patterns — Generics, satisfies, Branded Types

Beyond TypeScript basics — the patterns that turn the type system from a checker into a design tool. Generics, conditional types, satisfies, branded types.

Caching Strategies Decoded — CDN, App, Database

Caching is easy until invalidation. Where each layer of cache lives, what it solves, when each fails, and how to keep data fresh without losing your mind.

Testing Strategy 2026 — The Pyramid That Still Works

Most test suites are slow, brittle, and miss the bugs that ship. The 2026 ratios, what to mock, where boundaries are, and how to ship with confidence.

Password Storage, Correctly — bcrypt, argon2, the Attack Surface

MD5 is broken. SHA-256 isn't enough. The complete guide to password storage — algorithms, parameters, salt, pepper, rotation, and the attacks they defend against.

CORS, Finally Explained — Preflight and the Gotchas

CORS error messages are notoriously unhelpful. The working mental model — what triggers preflight, the headers that matter, and the credentials trap.

Writing Postmortems That Help — The Blameless Template

Most postmortems are theater. The ones that actually prevent recurrence follow a specific structure. The blameless template and the followup discipline.

Effective 1-on-1s — The Highest-Leverage Meeting in Your Week

Most 1-on-1s are wasted. The agendas, questions, and habits that turn 30 weekly minutes into the most valuable meeting on your calendar.

Mentoring Junior Engineers — What Actually Works

Senior engineers usually mentor badly — too much explaining, too much rescuing. The practices that accelerate growth, with the failure modes to avoid.

Presenting Engineering Work — Design Docs, Demos, Execs

Brilliant engineering presented poorly is invisible. The patterns for design docs, demos, and exec presentations that make your work actually land.

Web Performance 2026 — The Budget That Actually Matters

INP replaced FID. LCP got harder. The 2026 web performance guide — Core Web Vitals, the techniques that move the needle, and the metrics nobody else tracks.

The Web Accessibility Cheatsheet — WCAG 2.2 Essentials

The accessibility patterns that actually matter — ARIA done right, keyboard navigation, color contrast, screen readers. A reference you can ship.

Tailwind vs Vanilla CSS in 2026 — The Honest Cost Analysis

Beyond the religious war — when Tailwind genuinely wins, when vanilla CSS is the right call, and the real cost of each choice on team velocity.

Database Indexes Explained — The Mental Model That Sticks

B-tree, covering, partial, composite — when each index type wins, the EXPLAIN output that matters, and the 5 mistakes that destroy query performance.

The Git Recovery Guide — Undoing Every Mistake

Force-pushed to main? Deleted a branch? Lost a commit? Every git disaster has a recovery path. The complete field guide with the exact commands.

The Regex Survival Guide — 12 Patterns You Actually Need

Skip the academic regex tutorials. These 12 patterns cover 95% of real-world string matching — emails, URLs, dates, log parsing. With edge cases.

Senior Engineer Interview Prep — The 5 Question Patterns

Senior engineering interviews follow 5 question patterns regardless of company. Learn the patterns, the answer structures, and stop preparing for the wrong things.

Negotiating Tech Salary — Leverage, Anchors, and the Tactics

Most engineers leave $20-50K on the table at every offer. The negotiation tactics that work — when to disclose, how to anchor, the phrases that move numbers.

The Craft of Code Review — Reviews That Don't Wreck the Team

Code reviews break teams more often than they save them. The patterns that make reviews useful — for both reviewer and author. Templates and cultural rules.

CSS Subgrid — The Layout Primitive We Waited Six Years For

Subgrid landed in every browser. The five layouts that were impossible before — card alignment, form labels, nested navs, article+sidebar, pricing tables — finally work.

View Transitions API — Native Page Transitions in Every Browser

SPA-quality transitions on multi-page sites without a framework. Same-document, cross-document, named element morphing — full production guide.

CSS Anchor Positioning — Killing JS Tooltip Libraries

Floating-UI, Popper.js, Tippy — all rendered obsolete. Native CSS handles tooltip, popover, dropdown, and menu placement with overflow-aware fallbacks.

Container Queries in Production — Real Component Design

Beyond toy examples. The architectural shift to truly self-contained components, container units, style queries, and the gotchas you only learn by shipping.

Color Spaces in CSS — Why Your Gradients Look Muddy

sRGB is dead. OKLCH, Display P3, color-mix(), and relative color syntax give web designers the color tooling Figma had for years.

CSS Scroll-Driven Animations — Parallax Without JavaScript

animation-timeline brings GSAP-quality scroll effects to pure CSS. No IntersectionObserver, no scroll listeners, no rAF loops. Composited and frame-perfect.

How Linear Built the Fastest Web App You've Ever Used

A deep teardown of the performance techniques behind Linear — local-first architecture, optimistic UI, sync engines, request collapsing, the keyboard-first interaction model.

Building a Real SPA in 200 Lines of Vanilla JS

React, Vue, Svelte — all overkill for a content site. The complete recipe for routing, state, and reactivity with zero dependencies.

SVG Filters Cookbook — 8 Effects CSS Can't Do

Liquid distortion, gooey blob menus, paper grain, ink bleed, chromatic aberration. SVG filters give you what CSS filter alone can't.

CSS @property — The Quiet Revolution Nobody Talks About

@property landed in every browser in 2023 and unlocked CSS effects that previously required JavaScript. Animatable angles, colors, numbers.

The Honest Guide to RTL CSS

Arabic typography beyond direction: rtl. Logical properties, bidi text handling, Arabic-Indic numerals, font fallback chains, form direction.

Building a Terminal in HTML — From Caret to ⌘K

Six components for the terminal aesthetic — blinking caret, scramble text, three-color prompt, command palette, autocomplete ghost, output styling.

Real CSS Glass Morphism — 5 Recipes That Don't Look Generic

Apple Liquid Glass, Vision Pro spatial UI, Material You, Stripe fintech, premium dark surfaces. Five production-grade frosted-glass recipes.

The iOS Safari Bestiary — Every Rendering Bug & Its Fix

A field guide to iOS Safari's worst CSS rendering bugs — filter:blur compositing, @property limits, Liquid Glass quirks. Real fixes, tested on iOS 26.

Conic Gradients Beyond the Color Wheel — 12 CSS Effects

Pie charts, progress rings, candy stripes, holographic foil, vinyl records. Twelve production-ready conic-gradient effects, all pure CSS.

CSS Loaders That Don't Embarrass You

10 production-quality loaders — the kind Stripe, Linear, Apple, and Vercel ship. Pure CSS, accessible, and not made for a 2008 Geocities site.

Google AI Thinking Animation — Free CSS Snippets

The conic-gradient bloom from Gemini and AI Studio, dissected into four copy-paste variants.

Charging in dollars from Cairo

On pricing psychology when geography lies. The three rules that decoupled my rates from my zip code.

The Egyptian tech diaspora

What stays when Egyptian engineering talent emigrates — and what the country gets in return that never makes it into the diaspora narrative.

Why I don't hire yet

The solo founder math in 2026 — why one-person is now a structural choice, not a stage before scaling.

The discipline of saying no

Strategic refusal as the most underrated business filter. Four refusal categories and the compound interest they generate.

On running three brands in parallel

Most founders spread thin across multiple ventures. The discipline is in keeping each one held to the same standard, regardless of category.

Why craft still matters in an automated economy

The argument that AI replaces craftsmanship misses what craftsmanship actually is. It was never about the output.

Reputation over reach

The trade-off most founders refuse to make — and why the slower path is the only one that compounds.

Building from Cairo

On geography, perception, and why the location of the work matters less than the standard of it.

Detail is the difference

A meditation on the thousand small decisions that separate considered work from generic work.

Patience as a strategy

Every business that lasts was built slower than people expected. The argument for treating time as the primary asset.

One standard, many categories

How a portfolio across software, fashion, and athletics maintains coherent quality without converging on a single voice.