MU:T
Under markusunkel.tech (MU:T), I work as a freelance software engineer, computational and data scientist based in Hamburg, Germany, with my office in the new Deutschlandhaus.
Here is my resume.
MU:T means bravery in German and controlled change in Rust, and describes my way of working: challenging assumptions, experimenting safely outside your project, and making deliberate decisions that move it in the right direction.
I solve and prevent technical problems by writing concepts, designing architectures, and implementing solutions primarily in Rust and Python. With a background in physics, computational and data science, I have spent my career turning complex, theory-heavy domains into reliable, scalable software systems. This includes founding a company with patented technology in the printing industry, building automation and data-driven products from scratch, and leading engineering teams.
Clients
| Client | Role |
|---|---|
| Zalando | Software Architect & Engineer |
| Packiro | Preflight Expert, Software Engineer, Data Scientist |
| Bace | Platform Solution Architect for Founder Team, Software Engineer, Hiring Rust Developers |
| Sparkplant | MarTech & BI Solution Architect |
| Behind Ventures | E-Commerce Solution Architect, Data Scientist |
I work on business-critical systems and intellectual property for my clients. For this reason, detailed project descriptions remain confidential.
Instead, I focus on generalized system patterns, problem classes, and architectural concepts drawn from client projects, which you can find further down in the section anonymized system concepts by client projects.
References
Instead of having static written testimonials I establish the following philosophy:
- Contact one of the valued persons I worked with in Table B below.
- You will get to know the person and me through a third party.
- Once we start our project, it’s a WIN-WIN-WIN situation as you have only
invested 5-10 minutes of your time:
- You got direct and unfiltered information about me.
- You met someone new; they are all very nice.
- I donate €301 to Women in Tech e.V., you receive proof of donation in the form of an official donation receipt.
Since we do not work in the same office in person, I want to use this approach to encourage direct human interactions and point out that there are far too few women in tech prefessions.
| Name | Role | Worked Together At |
|---|---|---|
| Aleksandr Bochev | Principal Software Engineer at Zalando | Zalando |
| Christian Reifferscheid | CEO sparkplant and Serial Entrepreneur | Packiro, sparkplant, Zalando |
| Frank Dauth | Head of Global On-Site Consulting at Siegwerk | ColorFit Patent |
| Moritz Everding | CEO SOCHILI and Business Delevoper | WAYS |
| Sebastian Szeracki | Software Architect and Engineer at Packiro | Packiro |
What You Can Expect
- Clear, direct communication.
- Outcome-driven thinking: strategy first, execution second.
- Sustainable solutions designed for handover and long-term ownership; no single-point dependency.
- Radical honesty about fit, yours and mine.
Commercial Terms
| Engagement Model | Terms |
|---|---|
| Time | €150/hour, billed monthly |
| Fixed Scope | Pricing after roadmap definition |
How We Get Started
- Get in touch via email contact@markusunkel.tech, phone +4917686606827 or one of my listed contact channels.
- We get to know each other and your project in a 45-minute video call; optionally while walking around the Binnenalster in Hamburg or at your favored location.
- Depending on the project, you receive a clear proposal with scope, timeline and next steps.
- We start building.
Engineering Stack & Expertise
This section highlights technologies I have used extensively in production systems. These are areas where I bring hands-on experience, architectural judgment, and long-term ownership; not just familiarity.
| Full-Stack Element | Frequently Applied Technologies |
|---|---|
| Messaging System | NATS, RabbitMQ, Amazon SQS, Fluvio |
| Data Warehouse OLAP, BI, MarTech, CRM | ClickHouse, dbt, Superset, Braze, RudderStack, Salesforce, HubSpot |
| Task Orchestration | Hatchet, restate, Celery, Airflow |
| Machine Learning | {JAX, Burn, Scipy, Numpy, OpenCV, faer}, {Pandas, Polars}, {Plotly, matplotlib} |
| Database | PostgreSQL (zero-downtime migration via pgroll), MongoDB, Redis |
| Backend | Rust: Axum + {async-graphql, Juniper} + {sqlx, SeaORM} + {cargo-nextest, cargo-deny} Python: {FastAPI, LiteStar, Starlette} + Pydantic + strawberry + {psycopg, SQLAlchemy} + {pytest, bandit} |
| API | Apollo Router (Apollo Federation + Relay Spec) |
| Frontend | {SvelteKit, astro} + Houdini (Relay) + Tailwind CSS + Shadcn + {vitest + Playwright} |
| Area | Frequently Used Technologies |
|---|---|
| Infrastructure and management | Kubernetes, Helm, KEDA, Docker |
| Monitoring | Sentry, Grafana Stack, Jaeger |
| DevOps | GitLab, GitHub, Forgejo |
| Providers | AWS, Hetzner, DigitalOcean, Wasabi, HostEurope, GCP |
| Typesetting systems | typst, LaTeX |
Anonymized System Concepts by Client Projects
Priority-Based Rate Limiting Service
Challenge
The rate of notifications sent out via a customer engagement platform (CEP) to
my clients customers needs to be limited. By introducing a rate limit, messages
get a priority label that is required when the rate cap takes effect.
Furthermore there is an API rate limit on CEP’s side that should be handled
gracefully. The sum of all notifications
We notice the time of receiving the intention that a notification
such that prio 1 notifications are priotized in favor of prio 2 notifications
within a tolerance of
holds.
Solution Design
Messages are queued by priority. Each prio queue has a scalable consumer group
of workers that are all sharing its reservation volume information in a
Key-Value DB. This means that a worker with prio
Furthermore deduplication is ensured by using message hashes as deduplication keys with a specified deduplication TTL in the key-value database.
Unprocessable (not accepted by CEP) messages are moved to a dead letter queue.
Result
The implementation handled successfully the targeted api input pressure of 2
Mio. mgs/s with a median latency of ~50ms and processed highest prio messages
with a median latency of ~250ms (incl. latency of calling CEP) between
Full-Stack Growth Architecture
Challenge
An architecture needs to be designed for an early-stage product expected to evolve rapidly based on its first key accounts, while the teams scaled in parallel.
Planned and required components:
- Mobile and web applications
- Services: E-Commerce, CMS, Core, Authentication, Notifications
- Data-driven real-time decisions based on customer activities
- Key account specific services
- CRM and CEP (customer engagement platform)
- API for 3rd Party Services
The stack should be sustainable in terms of investment and technical debts.
Solution Design
Before diving into the solution; in my experience, there are two general options to solve these broad challenge strategically:
- Planning a relaunch budget from the beginning on in order to fully focus on the first features (not on architecture) for the first key accounts by risking the rise of technical debts and a substantial day-2 operations overhead which will cause a relaunch which in turn can jeopardize the business model and cash flow later.
- Invest upfront into an architecture that strategically allows to grow in terms of complexity, team sizes and changing business requirements which in turn allows the company to specifically hire new employees by having the architecture evolvement in mind.
The client has chosen the second option by relying on the following strategical and technical elements implied by the architecture drawn below in figure 4.
-
Single source of truth (SSOT) / One Contract: When having changing business requirements, the most important part is the information architecture, meaning the business graph model that is reflected in the federated api schema and in the process workflows on service layer / messaging system. This allows to have a contract between the different teams to work and plan on, e.g. the marketing automation team knows which events can be used to build journeys on or a key account manager can discuss with the tech leads the implications of new features in a dialogue (no one-way communication).
-
MVP: The MVP was designed to validate the business model while already establishing the architectural backbone required for growth:
- Establish the core information architecture by implementing the most critical services on the service layer.
- Expose a stable contract via a federated API to enable early mobile and web applications.
- Introduce event tracking and messaging to support initial KPIs, customer journeys, and the customer data pipeline that ingests raw customer data into the data warehouse and CEP / CRM.
-
Growth: The growth phase extended the same architectural principles to support more teams, higher traffic and key-account-specific requirements; without restructuring the core system:
- Scale team onboarding by using the SSOT and One Contract as a shared planning and implementation reference.
- Expand analytics and activation capabilities by introducing ETL and Reverse ETL components as requirements by sales, marketing, business and UX teams matured.
- Grow horizontally with new key account specific features and services without leaving the architecture.
Result
As business requirements shifted significantly in the first year, the architecture absorbed change without major rework. Services were added and deprecated without destabilizing the platform, allowing engineers to stay focused on product delivery instead of repeated architectural resets.