July 15, 2026
Fitter Health
Owned backend modernization, membership and booking workflows, cloud deployment, analytics foundations, notification recovery, and technical handover for a Spain-based health-tech business.
Client deliveryFull stack
- Role
- Full-stack, backend, cloud, and data engineer
- Published
- July 2026
- Focus
- Client delivery / Full stack
- Engineer
- Saaim Abdullah

A health-tech product is not just a set of endpoints
Delivery at a glance
| Dimension | Evidence from the engagement | Why it matters |
|---|---|---|
| Ownership | 1 engineer across the assigned application and platform delivery | Decisions had to remain coherent from schema to deployment |
| Data model | 106 PostgreSQL tables | Multiple related domains, migrations, constraints, and cross-domain queries |
| Automated verification | 135 passing tests reported at handover | Repeatable regression checks for delivered behavior; not a coverage percentage |
| Engagement | May–July 2026 | Delivery under a defined contract window, followed by documentation and handover |
| Product domains | 5 core areas: identity, memberships, booking, commerce, operations | Boundaries for API design and data ownership |
| Data platform | 1 downstream PostgreSQL star-schema warehouse | Separate operational transactions from analytics models |
| Notification recovery | SNS → SQS → consumer, with dead-letter handling | A failed consumer no longer needs to mean uninspectable lost work |
What I actually delivered
1. Domain-driven backend and data design
| Domain | What the system needs to preserve | Implementation boundary / principle |
|---|---|---|
| Member identity | Correct actor and role for each operation | DRF authentication, authorization, explicit account relationships |
| Memberships | Entitlements and balances that agree with purchases and usage | Transactional PostgreSQL state and defined credit lifecycle |
| Session booking | Consistent booking state and provider association | Validation and coordinated updates at the service layer |
| Commerce | Orders, payment/invoice status, and product entitlements | Explicit synchronization with Odoo, the invoice system |
| Administration | Operational workflows and a usable view of records | Admin/coach interfaces backed by the same domain API |
2. Application delivery from API to UI
3. AWS infrastructure and operational boundaries
| Component | Responsibility | Failure to design around |
|---|---|---|
| ECS services | Run containerized API/application workloads | Deployment health, configuration drift, restarts |
| RDS PostgreSQL | Transactional system of record | Schema migrations, integrity, connection exhaustion |
| S3 | Object/file persistence | Object permissions, missing keys, lifecycle management |
| Celery + Redis | Application background tasks | Retries and duplicate side effects |
| EventBridge + Lambda + SES | Scheduled communications | Provider rejection, throttling, missing delivery telemetry |
| SNS + SQS + DLQ | Decouple notification fan-out from processing | Consumer outages and poison messages |
| Odoo integration | Invoice handling and status synchronization | Out-of-order updates and external system delays |
4. The reliability defect I chose to fix
| Engineering property | Before | After the change |
|---|---|---|
| Producer / consumer coupling | Consumer problems could surface as missed work | Messages waited in SQS while consumers recovered |
| Retryability | No clear durable recovery path | Queued messages could be retried |
| Persistent failures | Difficult to isolate | Dead-letter queue made repeatedly failed work inspectable |
| Monitoring | Limited visibility into stalled processing | Queue-depth alarms exposed backlogs |
| Delivery semantics | Unclear failure outcome | At-least-once processing boundary became explicit |
5. Reporting and analytics without overloading transactional workflows
How I evaluate engineering choices
| Decision | Alternative considered | Reasoning |
|---|---|---|
| Relational business model | Loosely coordinated stores for each workflow | Credit and booking relationships benefit from consistent transactions |
| Django/DRF services | Rewrite around a new stack or split into microservices | Faster iteration and fewer distributed failure modes for this scope |
| Queued notification processing | Direct fire-and-forget consumers | Buffered work survives transient consumer failure |
| Star-schema reporting | Large analytical queries on request-serving models | Different data shapes for transaction correctness and reporting |
| Tests + handover documentation | Implicit knowledge held by the implementer | Makes the product maintainable after a short-term engagement |
Verification, handover, and outcome
What I would measure next
Explore the work





SaaimOpen to full-time roles, contract work, and conversations about things worth building.