Uses

A curated index of hardware, software, frameworks, and developer workflows I rely on daily.

Dev Environment

  • VS Code — Rationale: Extensions ecosystem (ESLint, GitLens, PostgreSQL explorer) and integrated terminal. Switched from Sublime once multi-file refactoring became a daily task.
  • iTerm2 + Oh My Zsh — Rationale: Split panes for parallel log tailing during multi-service debugging. Custom aliases for kubectl, docker-compose, and git workflows.
  • GitHub Copilot — Rationale: Accelerates boilerplate TypeScript (DTOs, test fixtures, migration scripts). Never used for architectural decisions.

Backend Stack

  • Node.js + TypeScript — Rationale: Strict typing catches contract drift between microservices at compile time. Combined with NestJS’s DI system, this gives us compile-safe dependency graphs across 6+ services.
  • NestJS — Rationale: Opinionated structure scales better with team size. Module boundaries map to bounded contexts. Built-in support for guards, interceptors, and pipes reduces custom middleware.
  • Python + FastAPI — Rationale: Used for data pipelines and ML-adjacent tooling where NumPy/Pandas ecosystem is required. FastAPI’s Pydantic models provide the same contract safety as TypeScript DTOs.

Databases

  • PostgreSQL — Rationale: Primary OLTP store. Materialized Views with GIN-indexed arrays for read-heavy segmentation queries. CONCURRENTLY refresh for zero-downtime reads. Chosen over MySQL for CTE support and JSONB flexibility.
  • MongoDB — Rationale: Used where schema flexibility matters — user activity feeds, outlet-specific menu variants. Not used for transactional data where referential integrity is required.
  • Redis — Rationale: Session management, rate limiting, distributed locks (SETNX), and event deduplication. ElastiCache for managed HA. Never used as a primary data store.
  • Elasticsearch — Rationale: Full-text search and analytics dashboards. Chosen over PostgreSQL full-text search when query patterns include faceted search and fuzzy matching.

Cloud & Infrastructure

  • Azure Event Hub — Rationale: 32-partition event streaming at 32K events/sec capacity. Chose over Kafka for native Azure integration and BlobCheckpointStore for partition ownership management without ZooKeeper.
  • AWS (S3, SQS, Lambda, EC2) — Rationale: S3 for media storage with lifecycle policies. SQS for decoupled async processing where Event Hub’s ordering guarantees aren’t required.
  • Kubernetes — Rationale: HPA scales consumer pods 10–20 based on CPU/memory thresholds. Chose over ECS for multi-cloud portability and Helm chart standardisation across environments.
  • Docker — Rationale: Every service runs identical images across dev, staging, and production. Multi-stage builds keep production images under 150MB.
  • Apache Airflow — Rationale: Orchestrates nightly data pipelines (POS sync, MV refresh scheduling, report generation). DAG-based scheduling provides retry logic and dependency management that cron cannot.

Monitoring & Observability

  • Datadog — Rationale: Unified metrics, logs, and APM traces. Custom dashboards for PostgreSQL pool stats, Node.js memory, and Redis hit rates. Alert thresholds set from production baselines, not defaults.
  • Sentry — Rationale: Error tracking with source maps for TypeScript stack traces. Release tracking ties errors to specific deployments.

CI/CD

  • GitHub Actions — Rationale: Native GitHub integration, matrix builds for multi-Node-version testing. Self-hosted runners for builds that need VPN access to staging databases.
  • GitLab CI — Rationale: Used on client-mandated GitLab instances. Pipeline-as-code with environment-scoped variables for multi-tenant deployments.

Security & Auth

  • Keycloak — Rationale: Self-hosted identity provider for multi-tenant SaaS. Realm-per-tenant isolation with federated identity (Entra ID integration for enterprise SSO).
  • OAuth2.0 + JWT — Rationale: Stateless auth with short-lived access tokens (15min) and refresh token rotation. RBAC policies evaluated at the API gateway, not in each service.

Communication & Process

  • JIRA — Rationale: Sprint planning with story points calibrated from historical velocity. Epics map to system design docs; stories map to implementation PRs.
  • Notion — Rationale: Architecture decision records (ADRs), runbooks, and post-mortems. Searchable knowledge base that survives team turnover.
  • Mermaid.js — Rationale: Architecture diagrams as code, version-controlled alongside the systems they describe. Embedded in blog posts and ADRs.