Entra — Internal Staffing Platform
Owning an internal product from a one-week MVP to an organisation-wide launch
- Role
- Product Owner
- Client
- Internal product (confidential)
- Year
- 2026
- Duration
- Mar – Sep 2026
As Product Owner for Entra, I owned the product end to end: discovery, vision and roadmap, backlog, stakeholder alignment, acceptance testing and release. I led a cross-functional team of nine from a one-week MVP that placed 90+ trainees to a v1.0 released to the whole organisation five months later, replacing a staffing process that ran on Slack threads and spreadsheets.
- to ship the MVP
- 1 week
- to ship the MVP
- trainees placed through the MVP
- 90+
- trainees placed through the MVP
- from first sprint to organisation-wide v1.0
- 5 months
- from first sprint to organisation-wide v1.0
- UAT pass rate before the pilot
- 90%+
- UAT pass rate before the pilot
- quarterly objectives delivered
- 4 of 5
- quarterly objectives delivered
- faster under load after the performance fix
- 28×
- faster under load after the performance fix
The brief
Staffing requests arrived through Jira, Slack and email. The staffing team tracked them in spreadsheets, and employees heard about roles informally. Research with employees, the staffing team and account managers put numbers on it: employees rated finding open roles 2.3 out of 5 and the process 2.8, and some felt roles were filled before they were ever posted.
My job was to turn that into one product that business development managers (BDMs), the staffing team, employees and admins would all actually use.
What I owned
- Product direction: the vision, a six-phase roadmap and quarterly objectives, agreed and signed off with stakeholders.
- Discovery: research with three user groups, turned into personas and journey maps with our UX designer.
- The backlog: epics, user stories and acceptance criteria, plus binding business rules and a traceability matrix linking every requirement to its story and test.
- Stakeholders: business development, staffing and delivery leads, and five dependent teams whose systems Entra integrates with.
- Delivery: two-week sprints inside quarterly planning increments, with a team of nine across UX, frontend, backend, QA, DevOps and security. We hit 100% sprint completion by Sprint 2 and held it through Sprints 3 and 4.
- Quality and release: UAT with real users, the go/no-go call, release notes, and the move to a monthly release cadence.
Five decisions that shaped it
The calls a product owner is there to make: what to cut, what to protect, and when to change the plan.
Cut the MVP to one complete cycle
- The situation
- Trainees needed placing on projects quickly, and the wish list already included notifications, CV upload, single sign-on and a mobile layout.
- My call
- I scoped the MVP to one end-to-end cycle (set up projects, apply, select) and moved everything else out, with a written reason for each deferral.
- What happened
- It shipped in a week and placed 90+ trainees. The pilot review then told us exactly what to fix first, so the rebuild was shaped by real use instead of guesses.
Let match scores inform, never gate
- The situation
- Entra scores every employee against every role. The obvious build was to hide Apply below a threshold, but employees already felt shut out of a process they couldn’t see, and the staffing team told us the underlying skills data was self-reported and unreliable.
- My call
- I made it a binding business rule: the threshold decides who is recommended and surfaced to the staffing team, but Apply is never disabled.
- What happened
- Employees see their score, matched skills and gaps before applying, the staffing team still gets candidates ranked by fit, and nobody is filtered out by an out-of-date profile.
Solve discoverability before adding features
- The situation
- After the pilot, stakeholders named one risk above the rest: if people can’t find Entra, they’ll go back to Slack and email.
- My call
- I made a lightweight way in a quarterly objective, and ruled out a heavy integration that would have put the timeline at risk.
- What happened
- Three entry points shipped against a goal of one: Slack, the client management system and the internal app listing.
Trade the plan for a safe launch
- The situation
- Two sprints before release, planned features (a Slack bot and training workflows) were competing with integration work, admin access control and defects found in UAT.
- My call
- I moved the team onto release hardening (rollback, migration recovery, health checks and access control) and recorded the trade-off in the sprint reviews, so it read as a decision rather than a miss.
- What happened
- Stakeholders gave a go decision with no conditions, and v1.0 went live to the whole organisation on 28 September 2026.
Ship with a known limitation, then close it
- The situation
- An August load test showed responses slowing to about 16 seconds at 500 simultaneous users, with 6.6% of requests failing.
- My call
- I didn’t hold the release. I published it as a known limitation in the release notes and made it the team’s top technical priority.
- What happened
- The October retest was 28 times faster at 500 users, errors fell to 0.21% and throughput rose sixfold. The remaining page-load delay was traced to shared infrastructure outside Entra and raised with the teams that own it.
How I work
- Objectives over story lists. Stakeholders sign off what we commit to, and at the end of each quarter I record what actually happened, including what moved and why. Four of five objectives landed; the stretch goal became its own phase.
- Decisions in writing. Business rules are binding and owned by the product owner, so the reasoning survives handovers and new team members.
- Testing with the people who’ll use it. Real BDMs, staffing and employees in every UAT round, a named signatory per area, and a go/no-go call. For v1.0 I ran a month-long rolling round so defects were fixed and re-tested inside it.
- Catching problems while they’re cheap. I spotted a dependent team building into the same space and called an alignment session before work overlapped. When the backend architecture needed rework, I paused new features mid-quarter to fix it before the debt compounded.
- Dependencies in the open. AI features stay off the numbered roadmap until model access and a data-residency review clear, instead of sitting in a phase they would make undeliverable.
- Releases people can follow. Every release ships with plain-language notes for the people who use it.
The product
One place for the whole staffing flow: BDMs raise and track requests, the staffing team runs postings and the applicant pipeline, employees see their fit before they apply, and admins control access with a full audit trail. The name comes from the Latin entrare, “to enter”: it’s named after the person’s journey rather than the process, which is also why the score never blocks anyone.

How it’s built
- An Angular 21 app, written in strict TypeScript, built entirely on the company’s design system, so it supports light and dark mode out of the box.
- Seven roles: admins, product owners, supervisory product owners, trainees, employees, BDMs and the staffing team. One person can hold several roles and switch between them, and each role gets its own dashboard.
- Admins can grant someone a single permission, such as raising staffing requests, without changing their role, and every admin action lands in an audit trail.
- Applications move through ten statuses, from submitted to placed on a project, and staffing requests have their own lifecycle from profile needed to filled.
- Company single sign-on, employee records and CVs pulled from the company’s HR system, and live notifications and request updates pushed to the browser as they happen.
- Every pull request runs tests, linting, code-quality and secret scans before it can merge.
What I’d do differently
Name UAT signatories at the start of a round, not the end: three areas reached the go/no-go call with nobody nominated to accept them, and it’s now an entry criterion. Reserve release-hardening capacity in the plan for late sprints instead of letting it displace features mid-sprint. And audit shared components for accessibility earlier, since most issues the pre-launch audit found traced back to a handful of them.
Figma
JiraConfluence
Claude
Microsoft Teams
Slack
- Outlook
up next →
Kwame Motors — Car Parts Marketplace
Designing, owning and building a car-parts marketplace for Ghana