Available for consulting

Hello Human,
I'm daniiel.

I'm here to help you build and scale your product.

I'm a Software / Product Engineer from Aarhus, Denmark. I specialise in crafting great user experiences and clean, maintainable code that drives retention, engagement, and growth.

How I work

Idea to feature
in weeks.

Inspired by Shape Up, I break complex problems into fixed-time cycles. No endless backlogs, no estimate inflation - just shaped work, deliberate bets, and iterative delivery that keeps users in the loop.

01
ShapeWeek 1–2

Define the appetite, not the spec.

Before a single line of code, we carve the problem down to its essential shape. What's the real user need? What's out of scope? We set a fixed time budget - the appetite - and resist padding it.

  • Raw idea → rough pitch
  • Fixed time budget (appetite)
  • Hard boundaries set early
  • No rabbit holes allowed
02
BetWeek 2–3

Commit fully, no half-measures.

We make a deliberate bet on this cycle. No interruptions, no scope creep, no "quick requests" mid-flight. The team gets uninterrupted time and full ownership of the outcome.

  • One focus per cycle
  • No backlog distractions
  • Full team autonomy
  • Clear done criteria
03
BuildWeek 3–6

Slice into scopes, ship each one.

Complex problems get carved into bite-size scopes - each a self-contained vertical slice that can be designed, built, and delivered independently. Progress is visible, not hidden.

  • Vertically sliced scopes
  • Unknowns surface early
  • Continuous integration
  • Working software ships

In practice

Understory · 2024

The brief

"Add a Markdown editor to the Create Experience flow."

UND-214estimate: ~3 days

Rich text editor - Create Experience

Users need to format descriptions with headers, bold, lists, and links. A modal with a toolbar and preview should cover it.

FrontendEditorModalMarkdown

The assumption

BIH1-
Preview

Desktop modal · looks complete · ships in 3 days

What we discovered

40% of users were editing on mobile. The editor didn't know that.

40%

accessed on mobile

60%

started on mobile

The problem - mobile viewport

BI
Toolbar overlaps content
~20% usable space
Keyboard ~60% of screen

The iterations

v1 - Desktop modal

Toolbar + textarea. Shipped fast, felt complete.

v2 - Responsive layout

Keyboard consumed 60% of viewport. Toolbar clashed.

v3 - Dynamic toolbar

Position adapts to keyboard state and scroll offset.

v4 - Touch-first model

Larger tap targets, contextual menus, native feel.

shipped
The lesson

What looked like a 3-day ticket took 3 weeks - not because of bad planning, but because real users surfaced complexity that no spec could predict. The cycle held. The scope was adjusted, not the deadline.

The craft

Built for humans.
Maintained by them too.

The best features disappear into the product - users don't notice the interface, only that the thing they wanted to do just worked. That requires equal care for the person clicking the button and the engineer maintaining the component.

01User Experience

Software people actually want to use.

Good UX isn't decoration - it's the product. I obsess over flows, friction points, and the gap between what users expect and what they get. Every interaction should feel obvious in hindsight.

02Developer Experience

Code your future self won't dread.

Features built on shaky foundations become liabilities. I write components that are easy to extend, delete, or hand off - because the next person touching the code might be you, three months later.

Case study

Understory · 2024

The problem

Hosts were abandoning before publishing. A six-step flow was killing momentum.

Before - 6-step wizard

1
2
3
4
5
6

Step 1 of 6

Basic Info

Users dropped off between steps 2–4. Progress felt invisible.
1Basic InfoName, category, tags
2DescriptionRich text, images
3LocationAddress, map pin
4ScheduleDates, recurrence
5PricingTiers, capacity
6Review & PublishPreview, go live

The solution

One page. Only what's needed to publish. Everything else is optional.

After - single-page flow

👁Preview
🇩🇰Danish
+
Add images & videosRecommended size: 952 × 680
Experience title
🌐Listed
📍Danmark
Event capacity
10 seats per event
Close for bookings
When event starts
Tickets & price
🎫
Free

0,00 kr.

Description

Describe the experience

#

Add category

Help guests filter the experiences

Add practical information

For the guest booking confirmation

Essential fields only - everything else is progressive disclosure.

Early outcomes

50%+

faster time-to-publish

6 1

steps reduced

completion rate

Design decision

"Keep It Basic" and advanced paths share the same underlying components. The DX constraint - one code path, not two - forced the UX solution: progressive disclosure, not separate flows.

The principle

When UX and DX goals conflict, it usually means there's a design problem upstream. The right abstraction resolves both - code that's easy to maintain tends to produce interfaces that are easy to use.

off the clockhomelab online

Curiosity doesn't
clock out.

Building SaaS for a living isn't enough - I run a homelab to understand the full stack beneath it. Proxmox clusters, k3s, HA setups, and full observability pipelines. If it runs in production, I've broken it at home first.

30-day downtime99.7%
30d agotoday
Proxmox VE
node-01

4 VMs

control-plane
node-02

6 VMs

worker
node-03

5 VMs

worker
OTel pipeline

Services

Traces · Metrics · Logs

OTel Collector

Receive · Process · Export

Live trace
154ms total
trace_id: a3f9c12e
GET /api/v1/experiences42ms
db.query experiences18ms
cache.get session3ms
GET /api/v1/bookings91ms
k3s - workloads
4/5 running
ingress-nginxinfra3/3
otel-collectorobservability2/2
cnpg-operatorcnpg-system1/1
app-dbpgdefault1p · 2r
cert-managerinfra1/1
High availability

Every service runs with ≥2 replicas across nodes. Proxmox handles VM fencing, k3s handles pod rescheduling. One node disappears - nothing the user sees goes with it.

VM fencingPod reschedulingMulti-nodeZero downtime
Proxmox VE
k3s
Docker
OpenTelemetry