perfectdesign.

Business systems

Human resources system development

An HR system holds the most sensitive data in the business and is used by people who will never read a manual. Both of those facts have to shape the build.

In short

An HR system turns employment admin into workflows with a record behind them: leave requested and approved, claims submitted and settled, documents stored where the right people can find them, and access that ends on the day somebody leaves. Two decisions shape the build more than any feature. The first is which rules your company actually applies, because leave and claim policy varies enormously between employers. The second is who may see what, since an HR system is the one place where showing the wrong screen to the wrong colleague is a serious incident.

Written for an hr or operations lead choosing between configuring a platform, integrating one, or commissioning a system · 6 min read

Start from the workflow, not the product

The useful first question is not which HR system to buy. It is which workflow is costing you: the leave requests sitting in a manager's inbox, the claims reimbursed from a spreadsheet nobody reconciles, the offer letters and contracts living in one person's drive, or the fact that a departed employee's access was only noticed three months later.

Once the workflow is named, three routes are worth comparing honestly. Configuring a product you already own is the cheapest answer when it handles your core process and you are fighting only its defaults. Integrating a platform makes sense when it covers most of the work but cannot reach a system it needs to talk to. Commissioning a system is justified when the rules are genuinely yours, when several disconnected tools are being held together by hand, or when the data cannot sit where the product insists on keeping it. We will say when we think one of the first two applies.

The workforce a payroll run touches. A tight labour market is the backdrop to every HR system we are asked for: the cost of losing somebody is higher than the cost of the software that keeps their records straight. A full text version follows.

The workforce a payroll run touches

Published statistic. A tight labour market is the backdrop to every HR system we are asked for: the cost of losing somebody is higher than the cost of the software that keeps their records straight.

Source: Department of Statistics Malaysia: Labour Force Statistics, June 2026. Reviewed .

Read the graphic as text
  • Employed in Malaysia: 16.8m. Out of a labour force of 17.34 million in June 2026
  • Unemployment: 3.0%. 517,800 people looking for work
  • Participation: 70.9%. Of the working-age population, with 7.11 million outside the labour force
Download this infographic (SVG)

What belongs in scope

An HR system is a small number of records and a large number of decisions about them. The records are people, employment details, leave balances, claims, documents and approvals. The decisions are who may create, view, change, approve, export and remove each of those, and what evidence each action leaves behind. Scope is best written as those two lists rather than as a feature checklist, because the features are ordinary and the rules are not.

Leave is where policy stops being generic

Leave looks simple until you write your own rules down. Entitlement usually varies by category and by length of service. Joiners and leavers need pro-rating, and the method has to be stated rather than assumed. Carry-forward is its own small system: how much may move into the new year, whether it expires on a date, and whether the balance consumed first is the carried one or the current one. Then come half days, unpaid leave, leave taken before it is accrued, replacement time for working a public holiday, and the calendar of holidays that differ by state.

Those entitlement rules come from your employment contracts, your handbook and current Malaysian employment law, which is your adviser's territory rather than ours. We will not invent them and we would not want you accepting numbers from a web page either. What a system has to do is apply the rules you confirm consistently, show its working when somebody disputes a balance, and make a rule change explicit rather than a quiet edit to a number.

Claims, documents and the rest of the admin

Claims follow the same shape as leave and fail in the same places: a submission with evidence attached, a limit or a category that constrains it, an approval route, and a handoff to whoever actually pays. The awkward cases are a claim approved by somebody who should not approve their own, a receipt that arrives two months late, and a reimbursement that has to be traceable afterwards. Documents need their own thinking, because contracts, letters and identification are the most sensitive things in the system: who may upload, who may read, how long each is kept, and what happens to them when somebody leaves.

Joining and leaving are the two moments where an HR system earns its keep, and the two most often left out of scope. Onboarding is a checklist with owners and dates: accounts to create, documents to sign, equipment to issue, a probation date somebody has to remember. Offboarding is the same list in reverse with a deadline attached, because access that outlives an employment is the failure people discover last. Both are ordinary workflows, and both are far easier to build in at the start than to add once thousands of records already exist.

What a leave module has to know before anyone argues. Then add sick leave of 14, 18 or 22 days on the same service bands, up to 60 days of hospitalisation leave which since January 2023 sits on top of that rather than inside it, 98 days of maternity leave, seven of paternity leave and a 45-hour week. That is the floor a leave module encodes before a company policy adds anything. A full text version follows.

What a leave module has to know before anyone argues

Published statistic. Then add sick leave of 14, 18 or 22 days on the same service bands, up to 60 days of hospitalisation leave which since January 2023 sits on top of that rather than inside it, 98 days of maternity leave, seven of paternity leave and a 45-hour week. That is the floor a leave module encodes before a company policy adds anything.

Source: Laws of Malaysia: Employment Act 1955, section 60E. Reviewed .

Also: Laws of Malaysia: Employment (Amendment) Act 2022.

Also: Department of Labour: what the 2022 amendment changed.

Read the graphic as text
  • Under 2 years: 8 days.
  • 2 to 5 years: 12 days.
  • Over 5 years: 16 days.

Chart scale: Paid annual leave under the Employment Act 1955, by completed years of service.

Download this infographic (SVG)

How a leave request should behave

The table below walks one fictional leave workflow to show how a scope is written: normal path, exception and the evidence to collect before accepting the work. The roles and policies are assumptions used for illustration, payroll and statutory calculation are deliberately outside it, and the last column describes tests to run rather than results anybody has passed.

Worked leave workflow for a fictional employer
Workflow stepAssumed actorProposed system responseExceptionAcceptance evidence to collect
Request leaveEmployeeSubmit dates and a category, checked against the balance under an agreed fictional policyAn overlapping or incomplete request stays visibly unresolved rather than being silently acceptedRequest-validation tests and checks on who can see the request
Approve or declineAssigned managerRecord a reasoned decision within the authority the policy assumesSelf-approval, or a request from another team, needs the agreed access restrictionRole, decision and notification observations for each route
Close employee accessHR administratorRemove access and apply the agreed retention decision for the records left behindUnassigned ownership or an unresolved retention question needs review before anything is deletedRevocation checks and a documented retention decision

Each exception in that table changes something structural rather than cosmetic. Overlapping requests need a rule about who sees a colleague's dates. Self-approval needs an escalation route and a delegate for when the manager is themselves on leave. Offboarding needs an owner for records whose manager has also left. The same method transfers to any other HR workflow you want in scope: write the normal path, name the exception, then say what evidence would convince you it works.

One leave request, five states. Systems break on the last state, because the balance was never given back. A full text version follows.

One leave request, five states

Editorial framework. Systems break on the last state, because the balance was never given back.

Basis: Perfect Design: business systems explained. Reviewed .

Read the graphic as text
  • Draft. Employee is still choosing dates
  • Submitted. Balance checked, approver notified
  • Approved. Balance committed, calendar updated
  • Rejected. With a reason the employee can see
  • Cancelled. After approval, and the balance returns
Download this infographic (SVG)

Who can see, change, approve and remove access

Permissions in an HR system are not one setting. View, create, edit, approve, export and revoke are separate powers, and people hold different combinations of them over different groups of colleagues. A manager sees their team's leave but not their salaries. A finance colleague sees claim totals but not medical notes attached to them. An HR administrator sees nearly everything and should leave a trail every time they do.

  • Who may see compensation, and whether anyone may see it for a colleague at the same level
  • What happens when a manager is on leave: a delegate, an acting manager, or a queue that waits
  • Whether a manager may approve something affecting themselves, and what the escalation route is
  • Who owns the records of somebody whose manager has left the company
  • Who may export, and what an export contains once it is a file on a laptop
  • How quickly access ends when somebody leaves, and who confirms it did

Access control is also the part of an HR system most worth testing deliberately. Signing in as each role and confirming what is not visible is a short exercise that catches the errors nobody notices in a demonstration, because a demonstration is always given by somebody with full rights. Accounts and portals covers the sign-in layer these permissions sit on.

The access question HR systems live or die on. A manager seeing a salary they should not is the failure people remember. A full text version follows.

The access question HR systems live or die on

Editorial framework. A manager seeing a salary they should not is the failure people remember.

Basis: Perfect Design: business systems explained. Reviewed .

Read the graphic as text
  • Employee. Their own record, and nobody else
  • Manager. Their team, without salary unless granted
  • HR. Everyone, with changes recorded
Download this infographic (SVG)

Payroll is a boundary, not a feature

Payroll calculation, statutory contributions and filing are a specialist domain with rules that change and consequences when they are wrong. Treat them as a boundary. The practical question is what crosses it: usually approved leave that affects pay, approved claims for reimbursement, and joiner or leaver dates, moving as an agreed export or a connection with a named owner on each side.

Whether a connection is feasible depends on four things we check before anything enters a scope: whether an interface exists, who can grant access, whether the data is clean enough to rely on, and what the vendor terms allow. Where it is not, a reviewed file and a reconciliation step is an honest answer that works. CRM and integrations describes how we approach connections of this kind.

Three agencies before you reach tax. Employer plus employee percentages, before monthly tax deduction and the training levy. The 2026 scheme alone moved the employee side from 0.5% to 1.25%, which is the whole argument for treating payroll as a specialist boundary rather than a feature. Confirm any figure here with the agency before relying on it. A full text version follows.

Three agencies before you reach tax

Published statistic. Employer plus employee percentages, before monthly tax deduction and the training levy. The 2026 scheme alone moved the employee side from 0.5% to 1.25%, which is the whole argument for treating payroll as a specialist boundary rather than a feature. Confirm any figure here with the agency before relying on it.

Source: Laws of Malaysia: Employees Provident Fund Act 1991, Third Schedule. Reviewed .

Also: Laws of Malaysia: Employees’ Social Security (Amendment) Act 2026.

Also: Laws of Malaysia: Employment Insurance System (Amendment) Act 2024.

Also: PERKESO: contribution rates, archived 24 July 2026.

Read the graphic as text
  • EPF, retirement: 13 + 11. Employer 13% of wages up to RM5,000 and 12% above it, employee 11%. Non-citizen employees came into EPF in October 2025 at 2% each
  • SOCSO, injury and invalidity: 1.75 + 1.25. Employer 1.25% for employment injury and 0.5% for invalidity. Employee 0.5%, plus 0.75% for the non-employment injury scheme that began on 1 June 2026
  • EIS, job loss: 0.2 + 0.2. Employment insurance, a maximum of RM11.90 each. SOCSO and EIS both cap wages at RM6,000 a month, raised from RM5,000 in October 2024
Download this infographic (SVG)

What to bring to a scoping conversation

Bring one workflow that currently costs you time, your written policy for it, the roles involved and who may see what, the systems already in use and who administers them, the exceptions that come up often, and the checks you would want to see before accepting the work. That is enough to say whether configuring what you own, connecting it to something else, or building is the sensible route. If you would rather start from the current process, talk it through with us.

What you get

What is actually delivered

01

Employee record

People, employment details, reporting lines and the history of changes, structured so a correction is visible rather than overwriting the past.

02

Leave workflow

Requests, balances, approval routes, delegates and a team calendar, applying the entitlement, pro-rating and carry-forward rules you confirm.

03

Claims workflow

Submission with evidence, category limits, approval, and a traceable handoff to whoever settles the payment.

04

Document handling

Contracts, letters and identification stored against the right person, with rules for who may upload, who may read and how long each is kept.

05

Roles and permissions

View, edit, approve, export and revoke as separate powers over defined groups of colleagues, with an audit trail on every sensitive action.

06

Joiner and leaver process

Onboarding tasks with owners, and an offboarding route that removes access, reassigns records and applies your retention decision.

07

Reporting and exports

Headcount, leave liability, claim status, pending approvals and exception queues, with exports limited to the columns the task needs.

08

Handover

Code, database and accounts in your name, with the policy rules documented so a future HR lead can read what the system assumes.

How it runs

One workflow at a time, rules first

HR systems go wrong when everything is built at once against policy nobody wrote down, so we start with the workflow that costs you most and the rules it actually applies.

  1. 01

    Pick the workflow that hurts

    Leave, claims, documents or onboarding, with the volume behind it and the people currently absorbing the admin.

  2. 02

    Write the policy the system will apply

    Entitlement, pro-rating, carry-forward, limits, approval authority and delegation, confirmed by you rather than assumed by us.

  3. 03

    Map roles and visibility

    Who may view, edit, approve, export and revoke, for whom, with the sensitive fields named explicitly.

  4. 04

    Prototype the exceptions

    A working version on a live link where a self-approval, an absent manager and a leaver can be walked through before the build is committed.

  5. 05

    Build, connect and test by role

    The approved scope, any payroll or accounting handoff whose access is confirmed, and a sign-in test for every role including what should not be visible.

  6. 06

    Hand over and support

    Accounts and code to you, the rules documented, and ongoing care if you would rather we kept running it.

How we work

The parts people ask about before they commit

How we build

React first, other languages when a project needs them

We build in React by preference, on both web and mobile, and we work in other languages when a project genuinely calls for it.

Timeline

Project dependent, and often quicker than expected

Timelines are project dependent. A focused build can go live in about a week, while a larger platform takes longer once scope is agreed.

Ongoing care

Quoted with the project, not bolted on

For a more complex website or a system with a real backend, ongoing care starts from RM 250 a month, with the plan confirmed against what was actually launched. Care is quoted with the project, not bolted on afterwards.

Getting hold of us

Normally under one working day

We normally respond to a support request in under one working day, and we work to solve problems as fast as we can. That is how we normally work rather than a contractual guarantee, and responding is not the same as resolving. If your operation needs a formal response or resolution commitment, we can write one into your scope.

Ownership

Everything belongs to your business

You own everything we build for you: the code, the content, the domain, the hosting account and every third-party account opened for the project. There is no lock-in. If you move to another provider, everything goes with you and we help with the handover.

  • Source code, handed over in your own repository
  • Domain and DNS, registered to your business
  • Hosting and every service account, in your name
  • Analytics, search and ad accounts, with us as a manager you can remove
  • All content, media and data in the system

Questions

Asked about hr systems

Straight answers to what people ask before they commit. Anything else, message us.

What does an HR system cost?

Website packages are published openly on the pricing page, but an HR system is quoted against its scope rather than sold as a package. The figure moves with how many workflows are in scope, how unusual your leave and claim rules are, how many roles need different visibility, and whether anything has to connect to payroll or accounting.

Should we just configure the HR platform we already pay for?

Quite possibly, and it is the first thing we would look at. If it handles your core process and you are only fighting its defaults, configuration is cheaper than anything we could build. The case for building starts when the workarounds have become the process, when several tools are held together by somebody copying data between them, or when the rules you need cannot be expressed at all.

Can it calculate payroll?

We treat payroll calculation, statutory contributions and filing as a separate boundary with specialist rules that change. What a system we build does is produce the inputs cleanly: approved leave that affects pay, approved claims, and joiner or leaver dates, handed over as an agreed export or a connection with a named owner on each side.

Who can see salary information?

Whoever you decide, and it should be decided explicitly rather than inherited from a default. In practice that means naming the fields that count as sensitive, deciding which roles may see them and for whom, restricting exports to the columns a task needs, and recording access to them. We then test it by signing in as each role and checking what is not visible.

Can it connect to our payroll or accounting system?

Sometimes, and it depends on four things we check before anything enters a scope: whether an interface exists, who can grant access, whether the data is clean enough to rely on, and what the vendor terms allow. Where a live connection is not feasible, a reviewed file with a reconciliation step is an honest alternative and we would rather scope that than promise a link we cannot verify.

Where does the employee data live, and who owns it?

You own it, along with the code, the database and every account opened for the project. Which hosting region it sits in is a decision worth making during scoping rather than after, because your own data policy may constrain it. Nothing about the arrangement should depend on us continuing to hold the keys.

How long does it take?

Timelines are project dependent. A focused build can go live in about a week, while a larger platform takes longer once scope is agreed. For HR work the pacing item is normally confirming the policy the system will apply, since that is where an approximate answer becomes an expensive one.

Where to go next

Tell us what you need built

We will show you the closest thing we have already built, then scope the real version against your requirements.