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.
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.
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
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
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 · 2024The brief
"Add a Markdown editor to the Create Experience flow."
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.
The assumption
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
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.
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.
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.
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.
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 · 2024The problem
Hosts were abandoning before publishing. A six-step flow was killing momentum.
Before - 6-step wizard
Step 1 of 6
Basic Info
The solution
One page. Only what's needed to publish. Everything else is optional.
After - single-page flow
Description
Describe the experience
Add category
Help guests filter the experiences
Add practical information
For the guest booking confirmation
Early outcomes
faster time-to-publish
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.
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.
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.
4 VMs
control-plane6 VMs
worker5 VMs
workerServices
Traces · Metrics · Logs
OTel Collector
Receive · Process · Export
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.