Technical Product Owner for SaaS and E-Commerce

Please login or register as jobseeker to apply for this job.

TYPE OF WORK

Any

SALARY

250

HOURS PER WEEK

20

DATE UPDATED

Jul 24, 2026

JOB OVERVIEW

Mvolo is a Dutch e-commerce brand selling light therapy products across Europe. Alongside the brand we build our own software products, including a business intelligence platform for e-commerce operators and an internal operations system. We are small, fast and we ship.

The Role
You own the delivery of two software products end to end. You translate the founder’s direction into concrete work for the development team, you keep the team unblocked and you guard the quality of what ships. You are the single point of contact between the founder and the developers, which means communication runs through you in both directions. You are hands on. You review pull requests, you write code when it helps and you d ---------- when something is ready to move from staging to main.

What You Will Do
Own the backlog and roadmap for two products and turn strategy into scoped tasks
Assign work across the development team and hold people to deadlines
Review pull requests and give technical feedback that raises the bar
Approve and manage releases from staging to production
Write code yourself when the team needs support or when speed demands it
Build data pipelines and dashboards that show how the products and the business perform
Report progress, risks and trade offs directly to the founder every week

What We Are Looking For

Required
Three or more years of hands on development experience and you still code today without leaning on AI tools
Proven experience leading a development team or owning delivery for a product
Strong data skills covering SQL, data modelling and building or maintaining pipelines
You can analyse data and turn it into a recommendation, not just a chart
Excellent written English and the confidence to push back on the founder when you disagree

Nice to have
Experience in e-commerce, marketplaces or DTC brands
Experience with Supabase, Postgres, Next.js or Python data tooling
Background in analytics, business intelligence or reporting products
Skills Requirement
Project Management
Web Development
E-Commerce

What We Offer
Full ownership over two products with a direct line to the founder
Fully remote work with flexible hours and no micromanagement
Budget for courses, certifications and tooling
A long term role in a company that is scaling both brand and software

How To Apply
Send your application with the subject line Technical PO followed by your first name. Include your CV, links to code or products you have shipped and short answers to these three questions.

1. Describe a pull request you rejected and how you handled the conversation with the developer
2. A developer says a feature is done. Walk me through exactly what you check before it goes to main
3. You are asked which of two features to build first and both stakeholders disagree. How do you d ---------- and what data do you use

Applications without answers to all three questions will not be reviewed.

VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0008
Controller Execution Time ( Jobseekers / Job )  0.0153
Total Execution Time  0.0167
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,512,456 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Technical-Product-Owner-for-SaaS-and-E-Commerce-1695989
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0101 seconds)  (Hide)
0.0004   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0008   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1695989
 LIMIT 1 
0.0009   SELECT *
FROM `employers`
WHERE `employer_id` = 786962
 LIMIT 1 
0.0008   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1695989
AND `misc`.`idIS NULL 
0.0004   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-08-24',ej.date_added) duration_daysDATEDIFF('2026-08-24',e.rebill_date) duration_rebillej.*, e.deactivate FROM employers eemployer_jobs ej WHERE e.employer_id ej.employer_id AND
                                   ((
e.user_level >= '500' AND ej.date_added <= e.rebill_date)
                                   OR 
e.employer_id '' OR (ej.date_approved <> '2000-01-01' and DATEDIFF('2026-08-24',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1695989' 
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1695989 
0.0007   UPDATE employer_jobs SET hit_counts '***Jul-24-2026=475***Jul-25-2026=73***Jul-26-2026=23***Jul-27-2026=25***Jul-28-2026=8***Jul-29-2026=19***Jul-30-2026=3***Jul-31-2026=6***Aug-01-2026=4***Aug-03-2026=8***Aug-04-2026=4***Aug-05-2026=4***Aug-06-2026=2***Aug-08-2026=1***Aug-09-2026=1***Aug-10-2026=1***Aug-11-2026=2***Aug-12-2026=3***Aug-13-2026=5***Aug-14-2026=2***Aug-15-2026=3***Aug-16-2026=6***Aug-17-2026=6***Aug-18-2026=3***Aug-19-2026=2***Aug-20-2026=4***Aug-21-2026=4***Aug-24-2026=1' WHERE job_id'1695989'  
0.0006   UPDATE employer_jobs SET monthly_hits '***Jul-2026=632***Aug-2026=66' WHERE job_id'1695989'  
0.0010   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1695989' AND status LIKE 'sent%' ORDER BY id DESC  
0.0002   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1695989 
0.0035   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '786962'
AND `date_added` >= '2022-06-08' 
0.0003   select from teasers 
0.0002   SELECT FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)