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.