About Garnish Garnish is based in New York and Cairo and builds the complete growth and ordering stack for independent restaurants. On the ordering side: customer website, staff admin, in-store POS, and mobile app, backed by Postgres, Stripe Connect for payments, a pos integration for menus and tickets, and a courier API for delivery.
The role This is a greenfield backend role. You'll design and build our multi-tenant platform backend from the ground up while existing client deployments keep serving live traffic, which means the new system has to be provably correct before anything migrates onto it, and migration has to be reversible. You'll make the foundational calls: the tenancy model, the service boundaries, how money and menu state stay consistent with third parties we don't control, and what our release pipeline guarantees before a change reaches a restaurant that's mid-service.
Architecture you'll design Tenancy model. Shared schema with row-level security, schema-per-tenant, or database-per-tenant, with a defensible argument for the choice and a migration path if it turns out wrong. Tenant isolation is a security boundary here, not a convenience. Consistency with systems we don't own. Menus originate in a POS, payments settle asynchronously, couriers report by webhook. You'll design the reconciliation that proves our state matches theirs, rather than assuming a successful API call meant anything. Idempotency and delivery semantics. Webhook deduplication, idempotency keys, the transactional outbox, at-least-once processing with effectively-once outcomes. Every integration path can be retried, and several will be. Job execution. Durable queues, visibility timeouts, poison-message handling, backpressure, and scheduled reconciliation. Some work genuinely doesn't fit in a request or a function timeout. Data model and schema evolution. Expand/contract migrations, zero-downtime column changes, backfills that can be paused, and constraints that make bad states unrepresentable rather than merely discouraged. API contracts. Typed end-to-end, versioned deliberately, with the blast radius of a breaking change understood before it ships.
CI/CD and release engineering This matters more here than in most backend roles, and we'd want your opinion on it early. Our customers are restaurants: a bad deploy during service means staff can't see orders that are still arriving. Per-branch preview environments, and a pipeline where a change is exercised against realistic data before it reaches production Migration gating, schema changes ordered, verified and reversible across many databases with independent histories, and never applied implicitly by a deploy Staged and scheduled rollouts, with deployment windows that respect a restaurant's service hours Fast, boring rollback, measured in seconds, and rehearsed rather than assumed Automated checks that encode past incidents: contract tests against integration payloads, smoke tests on the paths that move money, and build-time guards that fail on a whole class of mistake rather than one instance Secret and environment management across many deployments, without the same value being pasted by hand into each
What we're looking for
Postgres, deeply. Row-level security, index and query-plan work, connection pooling, and zero-downtime migrations against live data Payments. You've built on Stripe Connect or equivalent, marketplace splits, destination charges, application fees, reversals, webhook signature verification, and strict separation of test and live credentials Distributed correctness. You reach for idempotency keys, outboxes, and reconciliation jobs by instinct, and you can explain why exactly-once delivery isn't a thing you can buy CI/CD ownership. You've built pipelines, not just used them, including the migration and rollback story Type Script and Node in production. We're a Next.js shop; you don't need to love the frontend, but you'll read it You write down why. Our code explains which failure produced which guard, and we'd expect yours to Comfortable being the person who says a deploy waits until the restaurant closes
Must have Based in Greater Cairo, Egypt English Fluency4+ Years of work experience
Nice to have Startup experience highly encouraged. Graduates of AUC, GUC, Cairo University, and Ain Shams University are highly encouraged to apply. Previous POS or F&B (food & beverage) industry experience highly encouraged
حول Garnish
Garnish مقره في نيويورك والقاهرة ويبني مجموعة النمو والطلب الكاملة للمطاعم المستقلة. من جانب الطلب: موقع العميل، إدارة الموظفين، نقاط البيع في المتجر، وتطبيق الهاتف المحمول، مدعومين بـ PostgreSQL، Stripe Connect للمدفوعات، تكامل POS للقوائم والتذاكر، وواجهة برمجة تطبيقات التوصيل.
الدور هذا دور خلفية بغير وجود قاعدة حالية. ستصمم وتبني الجزء الخلفي لمنصتنا متعددة المستأجرين من الأساس بينما تستمر نشرات العملاء الحالية في تقديم حركة المرور الحية، ما يعني أنه يجب أن يكون النظام الجديد صحيحًا بشكل يمكن إثباته قبل انتقال أي شيء إليه، والهجرة يجب أن تكون قابلة للعكس. ستقوم باتخاذ القرارات الأساسية: نموذج الكراء، حدود الخدمة، كيف تظل الأموال وحالة القوائم متسقة مع أطراف ثالثة لا نتحكم بها، وما يضمنه خط أنابيب الإصدار قبل وصول تغيير إلى مطعم في وسط الخدمة.
الهندسة المعمارية التي ستصمّمها نموذج الاستئجار. مخطط مشترك مع أمان مستوى الصف، مخطط-لكل-مستأجر، أو قاعدة بيانات-لمستأجر، مع حجة قابلة للدفاع للاختيار ومسار هجرة إذا تبين أنه خطأ. عزل المستأجرين هو حد أمان هنا، وليس مجرد راحة. الاتساق مع الأنظمة التي لا نملكها. القوائم تنشأ في POS، والمصروفات تتم تسويتها بشكل غير متزامن، والسعاة يبلغون عبر ويب هوك. ستصمّم التقاص الذي يثبت تطابق حالتنا مع حالتهم، بدلاً من افتراض أن رسالة API ناجحة تعني أي شيء. التكرارية ومعنى التسليم. إزالة ازدواجية الويب هوك، مفاتيح التكرارية، صندوق خارج المعاملات، المعالجة على الأقل مرة بنتائج فعالة مرة واحدة. يمكن إعادة محاولة كل مسار تكامل، وستخضع عدة مسارات لذلك. تنفيذ المهام. طوابير دائمة، أوقات الرؤية، معالجة رسائل سامة، الضغط الخلفي، وتحديد المصالحة المجدول. بعض الأعمال حقاً لا تناسب طلبًا أو مهلة دالة. نموذج البيانات وتطور المخطط. توسيع/تقليص الهجرات، تغييرات الأعمدة بدون توقف، استكمالات يمكن إيقافها، وقيود تجعل الحالات السيئة غير قابلة للتمثيل بدلاً من مجرد تثبيطها. عقود API. فصل بنيوي من البداية للنهاية، إصدار مقصود، مع فهم نطاق التغيير المُدمر قبل إطلاقه.
CI/CD وهندسة الإصدار هذا الأمر مهم هنا أكثر من معظم أدوار الخلفية، ونود رأيك فيه مبكراً. عملائنا هم مطاعم: نشر سيئ أثناء الخدمة يعني أن الموظفين لا يمكنهم رؤية الطلبات التي لا تزال تصل. بيئات معاينة على مستوى الفرع، وخط أنابيب حيث يُختبر التغيير مقابل بيانات واقعية قبل الوصول للإنتاج. تقاطعات الهجرة، تغييرات المخطط مرتبة، تحقق وقابلة للعكس عبر العديد من قواعد البيانات ذات تاريخ مستقل، وأبدًا لا تُطبق بشكل ضمني بواسطة نشر. إطلاقات مرحلية ومجدولة، مع نوافذ نشر تحترم ساعات خدمة المطعم. استعادة سريعة وبسيطة، مقاسة بالثواني، وتدريب على أن تكون بديلة وليس افتراض. فحوص تلقائية ترمز حوادث سابقة: اختبارات العقدة مقابل حمولات الدمج، اختبارات دخان على المسارات التي تتحرك المال، وحراس أثناء البناء تفشل على فئة كاملة من الأخطاء بدلاً من حالة واحدة. إدارة الأسرار والبيئة عبر العديد من النشرات، من دون أن يتم لصق نفس القيمة يدوياً في كل مرة
ما نبحث عنه
Postgres بعمق. أمان مستوى الصف، عمل المؤشرات وخطط الاستعلام، تجميع الاتصالات، وهجرات بدون توقف مع بيانات حية
المدفوعات. لقد بنيت على Stripe Connect أو ما يعادله، تقسيمات السوق، رسوم الوجهة، الرسوم التطبيقية، العكسات، التحقق من توقيع الويب هوك، وفصل صارم بين بيانات الاعتماد التجريبي والحي. صحة موزعة. تميل لاستخدام مفاتيح التكرار، الصناديق الخارجية، ومهام المصالحة بشكل فطري، وتقدر لماذا التوصيل من مرة واحدة فقط ليس شيئاً يمكنك شراؤه
ملكيات CI/CD. لقد بنت خطوط أنابيب، وليس فقط استخدمتها، بما في ذلك قصة الهجرة والاستعادة
Type Script وNode في الإنتاج. نحن متجر Next.js؛ لست بحاجة لتحب الواجهة، لكن ستقرؤها أنت تكتب لماذا. كودنا يشرح أي فشل أنتجه أي حماية، ونتوقع أن تكون لديك نفس القدرة على الشرح
راحة كونك الشخص الذي يقول إن النشر ينتظر حتى يغلق المطعم
مطلوب أو لديه أساسيات
يقيم في منطقة القاهرة الكبرى، مصر
الطلاقة في الإنجليزية
خبرة عمل 4+ سنوات
مفضل وجوده
خبرة في الشركات الناشئة موصى بها بشدة. يحث التقديم خريجو AUC، GUC، جامعة القاهرة، وجامعة عين شمس. يفضل خبرة سابقة في POS أو صناعة الأغذية والمشروبات.