Software Engineer
- Department
- IT
- Location
- Maadi, Cairo
- Employment type
- Permanent
- Expected degree
- Bachelor Degree
- Open positions
- 1
About the Role
We're looking for a wildly resourceful, deeply curious Software Engineer to join our foundational team.
This role is for someone whose true calling is building — someone honest about what's actually done versus what "should work," clear in how they communicate trade-offs, and ready to put in the flexible effort required to help build an engineering culture from scratch, together. We aren't looking for someone who needs a large team and a mature codebase to be productive; we need someone who can ship real, trust-critical features — payments, escrow, identity verification — with a small team and a lot of ownership, making sharp architectural calls instead of over-engineering.
Tazbeat's product is real: a Flutter + Firebase two-sided marketplace already ~85% of the way to launch, with Clean Architecture, ~30 BLoCs, and 39+ ADRs recording every hard decision we've made. If you're excited by the challenge of taking a nearly-launched, Arabic-first product the rest of the way — closing real blockers, not chasing hypotheticals — and doing it with the judgment of someone who treats the codebase like it's their own, this is your place.
Key Responsibilities
- Own features end-to-end across the stack: Flutter (consumer + provider dual-profile UI), Cloud Functions (Node/TypeScript), and Firestore data modeling — from domain entity through use case, repository, BLoC, and screen.
- Close the two remaining pre-launch blockers with us: provider payouts/bank verification (ADR-022) and the end-to-end escrow release/refund path (ADR-020) — money-correctness code, treated with the care that implies.
- Write and follow Architecture Decision Records (ADRs) — we don't re-litigate settled decisions (BLoC-only state management, three-tier caching, cancellation-policy snapshotting) in every PR; we write them down once and build on them.
- Keep Firestore read/write costs honest: check GlobalCacheService before any new direct read, and think about cost the way you think about correctness.
- Maintain Arabic-first, dual-profile UX quality — this is not an English app with translations bolted on; Arabic is the default locale and every string ships in both languages from day one.
- Participate in on-call/incident response for a live two-sided marketplace where a bug can mean an unpaid provider or a stuck payment, not just a broken button.
What We're Looking For
- Solid experience with Flutter (or a comparable mobile framework) and a real backend (Firebase/Firestore experience is a strong plus, but general NoSQL + serverless comfort transfers).
- Genuine comfort with Clean Architecture / layered systems — you instinctively ask "which layer does this belong in" before you write the code.
- A bias toward shipping the right-sized solution over the impressive one. At this stage, three similar lines of code beat a premature abstraction, and a working payout flow beats a beautifully generic payments framework nobody needs yet.
- Full transparency about what's actually working, what's a guess, and what's untested — we'd rather hear "I'm not sure this handles the refund edge case" before launch than discover it after a provider doesn't get paid.
- Comfort operating with ambiguity and a small team: no dedicated QA, no dedicated DevOps — you'll test your own payment flows against the Firebase emulator and think about production before someone else has to remind you.
- Bonus: exposure to payment gateway integrations (Paymob or similar), KYC/identity verification flows, or building for an Arabic-speaking or MENA market.
What Success Looks Like
- In your first 30 days: you've shipped a real feature slice (entity → BLoC → screen) end-to-end, written or updated at least one ADR, and you understand why the codebase makes the architectural choices it does.
- In your first 90 days: you own a domain (e.g., payments, calendar, or notifications) well enough that the team defers to your judgment on it, and you've helped close at least one of the two launch-blocking gaps.
- Ongoing: dart analyze stays clean on everything you touch, your PRs don't introduce caching or Firestore-cost regressions, and when something breaks in production, you're one of the people we trust to debug it calmly and fix the root cause — not just patch the symptom.
Why Join Tazbeat?
- Build something big, not a prototype. The Tazbeat app is substantially built — you're not starting from a blank repo, you're taking a serious product the last mile to launch and then scaling it.
- Outsized ownership. On a founding-stage team, your code, your architectural calls, and your judgment calls directly shape whether this company works — there's no large org to hide the impact of either great or sloppy work.
- A culture that writes things down. 60+ ADRs mean you're not reverse-engineering tribal knowledge from Slack threads — the reasoning behind every hard decision is there for you to read, challenge, and build on.
- First-mover stake in an underserved market. Home-services trust infrastructure barely exists in Egypt today. You'd be building the thing that makes "hope the bawab knows a good plumber" a thing of the past — for millions of households.
- Equity that matters. As a founding-stage hire, your stake is meaningfully larger than it will ever be again — and tied to a product you'll have genuinely helped build, not just shipped features into.