Skip to content
About

I build the parts that are hard to undo

I care about the parts of software that are hard to undo. Schema design, tenancy boundaries, guard ordering, the contract between two services that will outlive whoever wrote them. Those decisions compound, and getting them right early is most of what separates a system that survives a year from one that gets rewritten.

Most of my day-to-day is backend: NestJS and Python services, Postgres and Prisma, queue workers, retrieval pipelines, and the security surface around all of it — auth, RBAC, rate limits, audit trails, webhook signature verification. I'm equally comfortable on the frontend when a product needs it; I just don't think that's where the interesting problems usually are.

The AI work I do is engineering, not prompting. Provider abstractions with deterministic offline mocks so tests don't hit an API. Model tiering that routes cheap requests to cheap models. Context assembly that degrades to empty instead of failing the stream when retrieval misses. Tools that call back into the core API with the user's own token, so the model physically cannot escape RBAC.

I'm a B.Sc. Software Engineering student at CODE University in Berlin, and I won the Porsche Digital Campus Challenge in the Customer Relations track. I'm looking for backend, platform, or applied-AI work — internship, working-student, or junior — where the systems are real and the constraints are honest.

Portrait of Mikiyas Gebrehaweriya
Based in
Berlin, Germany · CET / UTC+1
Studying
B.Sc. Software Engineering, CODE University
Focus
Backend · Distributed systems · Applied AI
Languages
Tigrigna · Amharic · English · German

Open to work

Internship · Working student · Junior backend / platform / AI engineering

How I work

Six things I believe about building software

These are not slogans. Each one is a rule that changed how a specific system is built, and each one has a cost I can name.

01

Make the irreversible decisions slowly

Schema, tenancy model, auth, service boundaries. These are expensive to change and cheap to get right if you think first. UI patterns and prompts can iterate daily — they should.

02

Enforce invariants where they can't be forgotten

An audit trail should be append-only at the database level, not because everyone remembers not to touch it. A billing gate belongs in the request pipeline, not at the top of each handler. If correctness depends on someone remembering, it will eventually fail.

03

Degrade, don't collapse

Context assembly is best-effort at every layer: if RAG misses, if the graph query times out, if a phase rollup is empty, the stream still answers. A retrieval failure should cost quality, never availability.

04

Write the failure down

When an upstream SDK quietly dropped a parameter and broke a feature with no commit to blame, the fix shipped with a version ceiling, a comment explaining what its absence had cost, and a test matrix pinning the behaviour. The next person does not get to rediscover it.

05

Tests where they buy something

Unit specs where the logic is genuinely subtle, containers where the database is the thing under test, and a deterministic offline embedder so the AI suite runs without a network or a bill. Coverage measures which lines ran, not which behaviours are guaranteed.

06

Documentation is part of the change

The rule I hold myself to is that the relevant document gets updated in the same commit as the code — not afterwards, not in a cleanup pass. A spec that lies is worse than no spec.

Timeline

Where I have been

Work, education and the one competition that is worth its own entry.

  1. May 2026now

    Engineering

    Co-founder & CTO

    PROM Software Systems · Berlin, Germany

    Co-founded the company and lead the technical side of it: architecture, engineering and delivery across an AI-native product development platform of six deployables and 274k lines.

    • Architected and built a NestJS modular monolith: 37 modules, 57 controllers, 337 REST endpoints, backed by a 69-model Prisma schema across 62 migrations.
    • Designed the multi-tenancy model — organization_id on every business row, AsyncLocalStorage request context, per-module scope guards, and an append-only audit log enforced by Postgres rules rather than convention.
    • Built a Python/FastAPI AI orchestration service with layered best-effort context assembly, model tier routing, output budgets and Redis idempotency, so retrieval failures degrade answers instead of breaking streams.
    • Made RBAC bypass structurally impossible for the AI: tools call back into the Core API carrying the caller's own JWT, so every existing guard applies unchanged.
    • Implemented retrieval on Postgres and pgvector — a vector(1024) HNSW cosine index over an entity/edge knowledge graph — behind an Embedder interface with a deterministic offline mock for tests.
    • Shipped Stripe subscriptions, entitlements, trial pausing as a global guard, and per-call credit gating with raw-body webhook signature verification.
    • Built the customer web app in Next.js 15 and React 19: 72 routes, 157 components, realtime over Socket.IO with a Redis adapter for multi-node fan-out.
    • Published a CLI to npm that links a repo to a product and proxies the MCP server over stdio, giving coding agents live product context.
    • Established the engineering gates: strict type-check as the primary CI signal, 89 Jest specs, a testcontainers integration tier, pytest against a mocked provider, and an OpenAPI codegen-drift check between the TypeScript and Python services.
    TypeScriptNestJSPythonFastAPIPostgreSQLpgvectorPrismaRedisBullMQNext.jsReactDockerTurborepoStripeSocket.IOOpenTelemetryAnthropicMCP
    See the work
  2. Jun 2024Dec 2025

    Engineering

    Full-stack Developer & Architect

    SociaLink · Berlin, Germany

    Built a unified operational data store for social activity with hybrid search and a store-aware natural language assistant.

    • Designed a polyglot persistence layer — PostgreSQL for relations, MongoDB for raw documents, a vector store for semantics — rather than forcing one engine to cover all three access patterns.
    • Implemented Bronze, Silver and Gold ingestion stages so raw payloads stay immutable and every enrichment is reproducible by replay rather than by patching production data.
    • Built hybrid retrieval fusing lexical and vector results, which handles exact-name lookups and vague conceptual questions in the same query path.
    • Ran async enrichment through Celery and Redis, and containerised the full stack so a clean machine is one compose command from working.
    PythonDjangoDRFPostgreSQLMongoDBCeleryRedisLangChainDocker
    See the work
  3. Mar 2024Jun 2024

    Award

    Engineer & System Architect — Team Barilla

    Porsche Digital Campus Challenge · Berlin, Germany

    Won the Customer Relations track with an AI-powered customer relations hub built around lossless human handover.

    • Took first place in the Customer Relations category against competing university teams.
    • Designed the agent workflow end to end: multi-modal intake, semantic retrieval over Porsche's own documentation and service records, tool-based lookups, satisfaction check, and escalation.
    • Argued for and designed the escalation path first — the human agent inherits the full transcript, retrieved sources and the system's own confidence, so nothing the customer already said is repeated.
    • Designed the CR staff console: live session tracking, resolution KPIs, and a queue ordered by urgency rather than arrival.
    • Presented the final solution to Porsche Digital stakeholders.
    PythonAWSVector databaseEmbeddingsRAGMulti-modal UX
    See the work
  4. Sep 2023now

    Education

    B.Sc. Software Engineering

    CODE University of Applied Sciences · Berlin, Germany

    Project-based programme where assessment is a shipped artefact rather than an exam — software engineering, product thinking and interdisciplinary teamwork.

    • Every module is delivered as a real project with a real defence, which is where most of my systems-design practice actually comes from.
    • Focus areas: backend architecture, data systems, applied AI, and the product reasoning around them.
    • Consistent collaboration across engineering, design and product tracks on interdisciplinary teams.
  5. Sep 2019Dec 2020

    Education

    B.Sc. Software Engineering (foundations)

    Mekelle University · Mekelle, Ethiopia

    Computer science and software engineering fundamentals — algorithms, data structures, operating systems, databases.

    • Grounding in the fundamentals that the applied work later rested on.
    • Recognised with a formal academic recommendation for technical ability, teamwork and leadership.
    See the work
Languages
Tigrigna
Native — first language
Amharic
Fluent — second language
English
Fluent — professional working proficiency
German
Conversational — actively improving