Caller
Entry
Backend Software Engineer
I'm a Backend Software Engineer specializing in Spring Boot and NestJS. I build scalable, secure APIs and backend systems with a strong focus on clean architecture, performance, and maintainability.
Salzburg, Austria·Open to roles, including remote

Services
I design the system as a set of decisions: who can call it, what the API promises, which changes must succeed together, where the data lives, and which work must not block the response.
Request path
Entry
Contract
Consistency
Source of truth
Off the request path
After the response
01/Entry
A user, another service, and a background job are different callers. Each one gets its own entry and its own authentication. After that line, nothing reaches the database by skipping the API.
02/Contract
The API describes the action the caller needs, not the tables behind it. Validation and permission finish before any rule runs. Callers stay stable when a column changes or a module is split, because they depend on the contract.
03/Consistency
The business rule lives in one layer, not in the controller and not in the query. I decide which changes commit in the same transaction, and which may finish after the response. A retry returns the first result instead of creating a second record.
04/Data
The database is the source of truth, picked for how the data is read. Transactions stay in PostgreSQL or MySQL. A read that repeats goes to a cache. Schema changes are versioned, and indexes follow the queries the API actually runs.
05/Later
Notifications and calls to other systems leave the request. The record is saved first, and the message is taken from that saved state, so a crash cannot keep one and lose the other. The worker can see the same message twice and still finish once. If that other system slows down, the caller already has an answer, and the service stops accepting more work than it can finish.
Identity and permission are decided at the boundary. The database account can only do what that part of the system owns. Input that fails validation never reaches the rules.
The request validates, decides, and writes. Repeated reads are cached. Heavy work is queued. When a dependency slows down, the service sheds load instead of holding the caller.
The API, the rules, and the data access change in separate places. Every request carries an id from the first hop into the logs, and a health check says whether the service should receive traffic.
01/Experience
My current role is at Zagoal. Before that I worked at Inspur and Kegebrew.
Current
Zagoal·Remote
Jan 2026 — Present
I lead the backend for a platform that books stays, activities, dining, entertainment, and transport.
Inspur·Addis Ababa, Ethiopia
Nov 2024 — Aug 2026
I built and maintained Spring Boot services for an online shop and a port delivery system.
Kegebrew Technology Solution·Addis Ababa, Ethiopia
Jan 2024 — Nov 2024
I built Node.js backends for a housing site, a credit system, and a taxi admin panel.
02/Systems
A closer look at the main systems from those jobs.
01
Zagoal
Lead Backend Software Engineer
The platform books stays, activities, dining, entertainment, and transport. Each of those is its own service.
Requests that need an immediate answer go through NestJS and REST. Work that can wait goes to Kafka. The booking and the event are saved in the same database transaction, using the outbox pattern. An idempotency key stops a retry from creating a second booking.
If a provider is slow, the service uses a circuit breaker, backoff, and a limit on how much work it accepts. Queues have priorities and capacity limits. Releases go out gradually. We follow requests with trace IDs, health checks, and metrics. The data layer is PostgreSQL, Redis, and Neo4j. Services run in Docker, and CI/CD is on GCP.
02
Inspur
Software Engineer
Two related systems: an online shop, and logistics for a port delivery system.
The shop services are Spring Boot on MySQL. Schema changes go through Liquibase. Redis is the cache. Nginx and Docker sit in front of the app.
The port delivery services use PostgreSQL, Spring Cloud Config, and Kafka. I also worked on their performance. A second shop system handles live orders and payments, again with Redis, Liquibase, and Nginx.
03
Kegebrew Technology Solution
Software Developer
Three products: a housing site, a consumer credit system, and an admin panel for taxi bookings.
I built the Node.js backends for all three. The taxi admin shows live booking data. The screens were React and Next.js, with Apollo Client and Redux.
03/Skills
Spring Boot and NestJS are the ones I use most. The rest is what I use around them.
04/Education
I am studying for an MSc in Computer Science. My bachelor's degree finished with a 3.77 GPA.
Oct 2026 — Present
Salzburg, Austria
Paris Lodron University of Salzburg
I started this degree in October 2026.
Aug 2020 — Jul 2023
Addis Ababa, Ethiopia
Unity University
GPA 3.77 / 4.00, Very Great Distinction. For the final project our team built an accounting journal system and received an A+. I worked on the design and the implementation.
Certificates
Certificate covering Java SE, Spring Boot, REST APIs, JPA, MVC, security, microservices, SQL, MySQL, and JDBC.
Coursera · October 20, 2026 · Grade 97.91%
Coursera certificate on the core infrastructure used to run applications on Google Cloud.
05/Contact
Email or phone both work. I live in Salzburg and I am open to remote work.