Skip to main content
Yosavo Studio by Youssef Ibaichou , home
Expertise

AWS

I use AWS as part of real application architecture rather than as a collection of isolated services. My focus is choosing infrastructure based on workload, reliability, security, cost and operational complexity.

Serverless · S3 & DynamoDB · IAM · Cost awareness

How I think about it

How I think about AWS

I don't start architecture discussions by asking which AWS services we can use. I start with the workload, expected scale, reliability requirements, security needs and cost constraints.

  • Start from the workload, not the service catalogue.
  • Prefer managed services when they remove operational work you would otherwise own.
  • Least privilege by default: every function and server gets only the access it needs.
  • Cost is an architecture property — design for it, then measure it.

Key experience

Where this comes from

  • AWS is part of the stack on Nexus Inclusion, Yotria and a multi-tenant collaboration platform I led — including AWS Bedrock for AI features on Nexus Inclusion.
  • Hands-on with S3 and CloudFront hosting, Lambda, EC2, CI/CD, monitoring and environment setup.
  • Data stores across relational databases and DynamoDB.

Scope

What I know

  • Architecture by workload
  • Lambda & API Gateway
  • Event-driven processing
  • S3 & presigned URLs
  • CloudFront
  • DynamoDB data modelling
  • Relational databases
  • Queues & async work
  • AWS Bedrock
  • IAM & least privilege
  • Configuration & secrets
  • Logging & monitoring
  • Cost awareness

Deep dive

AWS in practice

On this page (12 topics)

Choosing architecture

The right AWS architecture for a marketing site, an internal tool and a multi-tenant SaaS are completely different. So I start with questions. What is the traffic shape — steady, spiky or batch? What latency do users need? What happens if this component is down for ten minutes? Who operates it, and what is the budget?

The answers usually point to a small number of services used well, rather than a diagram with every service on it.

Serverless

Lambda behind API Gateway or an event source is excellent for spiky and event-driven work — file processing, webhooks, scheduled tasks, lightweight APIs — because you pay per execution and don't patch servers.

The trade-offs are real: execution time and payload limits, cold starts that matter for some latency-sensitive endpoints, harder local debugging, and per-request costs that can exceed a small always-on server at sustained high volume. Long-running or stateful work often belongs in containers or queue-driven workers instead.

Related: Node.js expertise

S3

S3 is the default home for files: user uploads, generated exports, static assets. Buckets stay private; public delivery is the exception and usually goes through CloudFront.

For uploads, the backend issues short-lived presigned URLs so files go straight from the browser to S3 without passing through the application server. Lifecycle rules move or expire old objects, and keys include the tenant so access rules and clean-up stay simple.

DynamoDB

DynamoDB rewards designing from access patterns: list the queries the application will run, then choose partition and sort keys so each one is a key lookup or a range query. Partition keys need enough spread to avoid hot partitions.

It's a strong fit for high-scale key-value access, session or event data and predictable query shapes. It's a poor fit when requirements are still moving, when you need ad-hoc reporting, or when the data is deeply relational — which describes many early-stage SaaS products.

Relational databases

For most business applications and SaaS products a relational database is the better default: transactions, joins, constraints, flexible queries and reporting. A managed relational database removes the work of backups, patching and failover. I'd rather start relational and move specific hot paths to specialised stores than force a relational domain into a key-value model.

Background processing

Decoupling slow work from user requests is one of the highest-value architecture decisions. A queue between the API and its workers absorbs spikes, enables retries and lets each side scale independently. Messages must be safe to process more than once, and failures need a dead-letter destination someone actually looks at.

IAM & security

Every role gets only the permissions its workload needs, scoped to specific resources — not wildcards because they were quicker to write. Workloads use IAM roles and temporary credentials, never long-lived access keys in code. Human access to production is limited and auditable.

Configuration & secrets

Configuration varies by environment; secrets never belong in source control. They live in a managed secret store or encrypted parameters, are injected at runtime, are rotated where possible, and never appear in logs.

Monitoring & logging

Production visibility means structured application logs with request and tenant context, alarms on error rates and queue backlogs, and metrics that reflect the product — failed jobs, processing latency, failed payments — not just CPU. Logs have a cost too, so retention and verbosity are decisions, not defaults.

Cost awareness

Cost follows architecture. I estimate it from expected usage before choosing a design, tag resources so spend can be attributed, set budgets and alerts, and remove infrastructure that exists only because someone might need it one day.

Serverless is not automatically cheapest. At sustained volume, a small always-on service can cost less — and data transfer, logging and idle resources often outweigh compute.

  • Data transfer out and cross-region traffic
  • Log ingestion and retention
  • Idle or over-provisioned resources
  • Storage classes and lifecycle
  • Per-request pricing at sustained high volume

File processing architecture

A pattern I favour for uploads that need processing — parsing, conversion, extraction: the client asks the API for a presigned URL, uploads directly to S3, the upload triggers asynchronous processing, and the results are stored and surfaced back to the user.

The API never handles the file bytes, processing can retry on its own, and the user isn't waiting on a long request.

  1. Client

    requests an upload

  2. API

    authorizes, issues presigned URL

  3. S3

    receives the file directly

  4. Background processing

    event or queue triggered

  5. Results

    stored, user notified

File processing flow: the client gets a presigned URL from the API, uploads directly to S3, background processing picks up the new file, and the results are stored and shown to the user.

SaaS on AWS

For SaaS, the infrastructure questions follow the product's: an API layer, a relational database for core data, S3 for files with tenant-prefixed keys, queues and workers for asynchronous jobs, CloudFront for static assets, and separate environments with CI/CD.

Multi-tenant workloads add noisy-neighbour concerns — one customer's large import shouldn't slow everyone else down — so heavy work goes through queues with per-tenant limits.

Related: SaaS Development expertise

In practice

Common problems I work with

  • Infrastructure that grew without a design and is hard to change
  • Over-permissive IAM roles and long-lived access keys
  • File uploads routed through the application server
  • Synchronous processing that times out under load
  • Surprise bills from data transfer, logs or idle resources
  • No visibility into failures until customers report them

Real products

How it connects to real products

AWS sits underneath several products I've built, led or am building — in each case chosen around the product's workload rather than the other way round.

  • Accessibility Technology / SaaS

    Nexus Inclusion

    Large accessibility SaaS on AWS, including AWS Bedrock for AI features, where I lead delivery and production releases.

  • Enterprise SaaS

    Multi-Tenant Collaboration Platform

    File collaboration platform on AWS, where storage and multi-user access were central to the architecture.

    Private client project
  • SaaS / Portfolio Builder

    Yotria

    Portfolio SaaS I'm building as founder, with AWS as part of the architecture.

    Coming soon

See all selected work

Related expertise

Node.js

APIs, integrations and serverless workloads with careful async design.

  • API architecture
  • Async patterns
  • Serverless
  • Observability

API Development

Predictable API contracts: validation, errors, authorization, idempotency and webhooks.

  • API design
  • Error handling
  • Idempotency
  • Webhooks

AI Integration

Applied LLM engineering: structured output, validation, cost and security.

  • LLM integration
  • Structured output
  • Validation
  • Cost control

SaaS Development

Tenancy, permissions, plans, billing and the realities of running SaaS in production.

  • Multi-tenancy
  • Permissions
  • Billing
  • Production delivery

Related services

  • AWS Cloud Engineering

    Deploy, optimize, and maintain reliable cloud systems using AWS services and practical cloud architecture.

    Learn more
  • SaaS Product Development

    Design and build SaaS products from MVP to production, including architecture, user management, subscriptions, integrations and cloud infrastructure.

    Learn more
  • Custom Software Development

    Build reliable web platforms, SaaS products, dashboards, APIs, and internal tools with modern full-stack technologies.

    Learn more
Let's talk

Have a technical challenge?

Whether it's an architecture decision, a delivery problem or something specific to AWS, I can help you find a practical path forward.

What happens next

  1. Share your goal

    A few lines about the product, problem, or audit need.

  2. Get a quick read

    A practical reply on the best technical path forward.

  3. Move forward

    A clear scope, estimate, or concrete next step.