# Ahmed Mamdouh — Senior Full-Stack & AI Engineer

> Ahmed Mamdouh is a senior full-stack & AI engineer in Cairo, Egypt with 10+ years shipping production systems in TypeScript, Node.js, NestJS, React and Next.js — real-time platforms at 100K+ concurrent connections, fintech transaction systems, and production AI agents, MCP servers and RAG pipelines.

- Location: Cairo, Egypt (UTC+3), remote worldwide
- Availability: Available for new projects — https://www.xerk.io/hire
- Contact: gm.xerk@gmail.com
- Profiles: [LinkedIn](https://dub.sh/xerk-linkedin), [GitHub](https://github.com/xerk), [X](https://dub.sh/xerk-x)
- CV: [HTML](https://www.xerk.io/cv), [PDF](https://www.xerk.io/ahmed-mamdouh-cv.pdf)
- Full text for LLMs: https://www.xerk.io/llms-full.txt

## Case studies
- [ALTO device platform](https://www.xerk.io/work/alto): ALTO is Netsync's IPTV platform; its real-time device management system, designed by Ahmed Mamdouh on NestJS, Socket.io and MongoDB, handles 100,000+ concurrent device connections.
- [ALTO AI agent + MCP](https://www.xerk.io/work/alto-ai-agent): At Netsync, Ahmed Mamdouh built a production AI agent on the Anthropic and OpenAI APIs (LangChain, tool use, memory, guardrails) and an MCP server that exposes internal databases, telemetry and services to LLM clients securely.
- [Zerocash](https://www.xerk.io/work/zerocash): Zerocash is an e-wallet platform whose transaction system — architected by Ahmed Mamdouh as tech lead at Technocloud — processes thousands of daily payments with audit trails and reconciliation.
- [SweepSouth](https://www.xerk.io/work/sweepsouth): SweepSouth is Africa's largest on-demand home-services platform; Ahmed Mamdouh built and scaled its Node.js and NestJS services for 100k+ active customers and shipped its mobile-first booking flows.
- [UptimeRobot](https://www.xerk.io/work/uptimerobot): At Itrinity, Ahmed Mamdouh built high-throughput Node.js and NestJS services for UptimeRobot — a monitoring SaaS with 2.1M+ users — running millions of website checks a day, plus a GraphQL API that cut client network overhead by ~35%.
- [Mall of Arabia](https://www.xerk.io/work/mall-of-arabia): Ahmed Mamdouh built the website for Mall of Arabia, Egypt's largest mall, with Next.js / Nuxt 3 and Tailwind CSS.

## Services
- AI agent & automation: An agent or AI feature inside your product or ops — tool use, RAG on your data, guardrails and evals.
- Real-time platform or SaaS: From spec to production: NestJS/Next.js, WebSockets, queues, payments and a dashboard.
- Fractional tech lead: Senior hands on your team: architecture, reviews, CI/CD, hiring — while still writing code.

## Field notes
- [Watch queue depth trend, not the current number](https://www.xerk.io/blog/watch-queue-depth-trend-not-the-current-number) (2026-09-13): Monitor queue depth over time from day one; the current number says little, but the slope tells you whether you have twenty minutes or two.
- [The systems I am proud of are built from boring parts](https://www.xerk.io/blog/the-systems-i-am-proud-of-are-built-from-boring-parts) (2026-09-12): The best systems use boring parts like Postgres, a queue and a well-defined cache; the real engineering is in the failure handling.
- [Scaling 100k WebSocket connections: the reconnect storm](https://www.xerk.io/blog/scaling-100k-websocket-connections-the-reconnect-storm) (2026-09-12): At 100k+ concurrent sockets, the hard part is not the count but the reconnect storm; jittered backoff, load shedding and resumable sessions fix it.
- [MCP went stateless, and that matters](https://www.xerk.io/blog/mcp-went-stateless-and-that-matters) (2026-09-11): The July MCP revision went stateless with OAuth 2.0 and OpenID Connect, so MCP servers can now run behind load balancers and serverless.
- [npm v12 blocks install scripts by default](https://www.xerk.io/blog/npm-v12-blocks-install-scripts-by-default) (2026-09-10): npm v12 no longer runs preinstall, install or postinstall scripts unless you approve them, closing a common supply chain attack path.
- [Node.js moves to one major release a year](https://www.xerk.io/blog/nodejs-moves-to-one-major-release-a-year) (2026-09-10): From Node 27, Node.js ships one major a year and every release becomes LTS, ending the odd/even split most teams already ignored.
- [How an endpoint got 45 percent faster with no clever code](https://www.xerk.io/blog/how-an-endpoint-got-45-percent-faster-with-no-clever-code) (2026-09-09): Twenty minutes with a profiler beat a week of guessing: an N+1, a missing index and a useless cache made an endpoint 45 percent faster.
- [What actually breaks when AI agents go to production](https://www.xerk.io/blog/what-actually-breaks-when-ai-agents-go-to-production) (2026-09-08): Production agents fail on state, partial failure and knowing when to stop, which are distributed systems problems, not prompt problems.
- [Claude output is now watermarked](https://www.xerk.io/blog/claude-output-is-now-watermarked) (2026-09-08): Claude output now carries watermarks and signed provenance by default; tell your users, and never treat a missing watermark as proof.
- [Splitting a monolith: what it actually bought us](https://www.xerk.io/blog/splitting-a-monolith-what-it-actually-bought-us) (2026-09-07): Split a monolith for failure isolation and team ownership, not speed; if it is slow, profile first, since the cause is usually a missing index.
- [Handle SIGTERM or every deploy is a small outage](https://www.xerk.io/blog/handle-sigterm-or-every-deploy-is-a-small-outage) (2026-09-07): A Node service that ignores SIGTERM drops in-flight requests on every deploy; a short graceful shutdown handler fixes it.
- [What I stopped doing by hand with AI coding tools](https://www.xerk.io/blog/what-i-stopped-doing-by-hand-with-ai-coding-tools) (2026-09-06): AI tools took over my boilerplate, regex and first-draft tests; I ship faster, but I learn narrower, and that trade-off needs managing.
- [Mongo or Postgres is the wrong first question](https://www.xerk.io/blog/mongo-or-postgres-is-the-wrong-first-question) (2026-09-06): Pick a database by your known access patterns; if you do not know them yet, pick Postgres, because it forgives wrong guesses best.
- [In RAG, retrieval is the product](https://www.xerk.io/blog/in-rag-retrieval-is-the-product) (2026-09-05): Bad RAG answers usually come from bad retrieval, not a weak model; structural chunking, metadata filters and a small eval set fix more.
- [Build at night, decide in the morning](https://www.xerk.io/blog/build-at-night-decide-in-the-morning) (2026-09-05): Late-night focus is great for writing code and bad for deciding what to build, so build at night and make decisions in the morning.
- [The hard part of passkeys is not WebAuthn](https://www.xerk.io/blog/the-hard-part-of-passkeys-is-not-webauthn) (2026-09-04): Implementing WebAuthn is the easy part of passkeys; the real work is account recovery and deciding whether a password fallback stays.
- [Caching mistakes I keep debugging](https://www.xerk.io/blog/caching-mistakes-i-keep-debugging) (2026-09-04): Before adding a cache, measure first, decide what invalidates it, set a TTL, and cache the expensive part rather than the whole result.
- [When GraphQL is worth it and when it is not](https://www.xerk.io/blog/when-graphql-is-worth-it-and-when-it-is-not) (2026-09-03): GraphQL pays off when many different clients need different slices of the same data; with one web client, REST usually wins on total effort.
- [Laravel ships the primitives Node developers rebuild by hand](https://www.xerk.io/blog/laravel-ships-the-primitives-node-developers-rebuild-by-hand) (2026-09-03): Laravel ships primitives like debounced listeners and model-scoped locks that Node teams keep rebuilding by hand, and that is a culture difference.
- [Why I still write code as a tech lead](https://www.xerk.io/blog/why-i-still-write-code-as-a-tech-lead) (2026-09-02): Leads should keep coding, but on the work nobody prioritizes, not the critical path, so their judgment stays sharp without blocking the team.
- [Green flags that someone is genuinely senior](https://www.xerk.io/blog/green-flags-that-someone-is-genuinely-senior) (2026-09-02): A genuinely senior engineer volunteers a decision they got wrong and what it taught them, and asks about on-call before tech stack.
- [Use satisfies before you reach for as in TypeScript](https://www.xerk.io/blog/use-satisfies-before-you-reach-for-as-in-typescript) (2026-09-01): Every `as` in TypeScript tells the compiler to stop checking; `satisfies` checks the shape and keeps the narrow type, so use it first.
- [At-least-once delivery means at least once](https://www.xerk.io/blog/at-least-once-delivery-means-at-least-once) (2026-09-01): Every queue consumer will eventually run twice, so give each one an idempotency key and check it before doing the work.
- [Auto mode made code review the last human gate](https://www.xerk.io/blog/auto-mode-made-code-review-the-last-human-gate) (2026-08-23): With Claude Code's auto mode on by default, the approval prompt is gone as a safety layer, so code review is now the human gate that matters most.
- [Multi-tenancy with Laravel](https://www.xerk.io/blog/multi-tenancy-with-laravel) (2024-12-25): Multi-tenancy is a software architecture in which a single instance of a software application serves multiple customers, called tenants. In the context of Laravel, multi-tenancy refers to the ability of a Laravel application to serve multiple tenants, each with their own separate database.
