A 120-person chartered accountancy firm in Mumbai with 4 offices (BKC, Andheri, Lower Parel, Thane) ran on a Frankenstein HR stack: Zoho People for the org chart, Zoho Payroll for salary, an Excel sheet for billable-hour tracking, another for client-engagement assignment, and a third for the partners' billable-rate matrix. The senior partner asked us a question over breakfast at the Bombay Gymkhana: "I am paying for software every year and my office still runs on Excel. Can you fix this?" Twelve weeks later, we shipped a custom HRMS on Next.js + Postgres + Razorpay-Payroll API + e-sign integration. This is the comparison math, what we built, and why "off-the-shelf was a tax" is more literal than it sounds.
The Answer in 60 Words
For a CA firm where billable hours, client engagements, and a partner-driven attribution matrix are all coupled with HR data, off-the-shelf HRMS forces 3+ tools to coexist with manual reconciliation. We built a single HRMS on Next.js + Postgres + Razorpay Payroll API that handles HR + billable-hour tracking + client-engagement attribution natively.
Why This Matters For Indian Professional-Services Firms
Off-the-shelf HRMS like Zoho People and Keka charge per employee per month, and for 120 employees the base licensing is modest. The hidden cost is the integration tax: a CA firm needs HR + payroll + billable-hour tracking + client attribution + leave-cum-CPE-day tracking, and no single off-the-shelf vendor covers all five well. You end up with 3-4 tools, manual Excel reconciliation, and a senior partner spending 4-6 hours/month checking that the partner billing matrix matches the actual time logs.
For a 120-person firm with ₹14 crore annual revenue and ~62% utilisation, that 4-6 hours/month of partner time is a real opportunity cost. The "off-the-shelf is cheaper" argument quietly inverts when you factor in human reconciliation labour.
The custom-build alternative crossed the affordability threshold around 2024. Next.js + Postgres + Razorpay's Payroll API (India's most mature payroll API for SMBs) handle 80% of the requirement out of the box. The break-even firm size for custom-vs-Zoho-stack is now roughly 80 staff for professional-services firms with attribution complexity.
The Client (Specific Details)
The TCO Comparison (3-Year Math)
| Zoho People + Payroll + Excel (Current) | Custom HRMS (Our Build) | |
|---|---|---|
| Initial setup / build | None (already deployed) | One-time build (us) |
| Year 1 software licences | Annual licences (Zoho People + Payroll + Greythr) | None |
| Year 1 run cost (hosting) | Bundled in licence | Monthly hosting |
| Year 1 partner reconciliation labour | 4 hours/month × 14 partners | 1 hour/month × 14 partners residual |
| Year 1 admin time on integrations | HR admin spending 14 hours/month reconciling | Minimal |
| Years 2-3 licences (with 8% YoY hike) | Annual licences | None |
| Years 2-3 run + ongoing dev retainer | Zoho admin labour | Hosting + dev retainer |
| Years 2-3 reconciliation + admin labour | High | Low |
| 3-year TCO | Lower in cash terms | Higher in cash terms |
The honest math: the custom build is more expensive in pure cash terms over 3 years. The trade-off is in three places: (1) the partner reconciliation labour drops from 4 to 1 hour/month, freeing partner time for billable work, (2) the firm owns the codebase and roadmap, and (3) the data is unified across HR, payroll, billable hours, and attribution.
By year 4, the cumulative custom cost overtakes the cumulative Zoho cost — but only if you don't count the partner-time recovery. With it, the custom build is profitable from year 1.
Why "Off-the-Shelf Was a Tax"
The senior partner's framing in our discovery week, paraphrased: "Every month, my admin team spends 14 hours reconciling 4 systems. Every month, each partner spends 4 hours checking their attribution. Every March, we spend 11 days computing profit shares. None of this is billable. None of this is what we hired the team for. The licence cost is small. The cost of the workaround is enormous."
That is a tax. Software you pay for that costs more in human labour than it saves in licence dollars. Most off-the-shelf HRMS works for 80% of firms. The 20% with attribution complexity, billable-hour tracking, or multi-entity payroll pay this tax silently.
The Architecture We Shipped
The Stack
| Layer | Choice | Why |
|---|---|---|
| Frontend | Next.js 14 + Tailwind | Server components for the partner dashboard; fast initial paint matters for the senior partners who check it on the way to court. |
| Database | PostgreSQL 16 (Aurora Serverless v2) | Engagement schema is heavily relational; Aurora's autoscale handles month-end reporting peaks. |
| Auth + RBAC | Clerk Pro | 120 staff with 5 role types. Office-level RBAC via Clerk's organisation feature. |
| Payroll | Razorpay Payroll API | Free for the first 25 employees, charged per employee thereafter. PF/ESI/TDS compliance handled by Razorpay. |
| E-Sign | NSDL Aadhaar e-Sign + SignDesk | NSDL for individual signatures; SignDesk for multi-party partnership agreements. |
| File storage | S3 (ap-south-1) with KMS encryption | Confidential client data and partner agreements get separate KMS keys per office. |
| Hosting | Vercel Pro (frontend) + AWS Mumbai (Aurora + workers) | Hybrid. |
| Email + comms | Postmark + WhatsApp via Wati | Transactional email; WhatsApp for leave-approval and timesheet-submission nudges. |
The 12-Week Plan
The Outcome (Q1 2026 Numbers)
The 11-day-to-1-day Q4 profit-share computation is the headline number. The senior partner's quote at the year-end review: "I would have paid for the build just for getting March back."
The Pre-Cutover Checklist
- Parallel payroll run completed — new HRMS matches Zoho Payroll output for 95 employees to the rupee
- PF, ESI, TDS, PT computations verified by external CA (the firm's own audit team)
- Partner attribution rules tested against 6 months of historical engagement data — zero discrepancies
- Time-log entries are immutable after manager approval (cannot be edited even by admin)
- Audit log captures every record edit with user-id + timestamp + before-after diff
- Office-level RBAC tested — Andheri staff cannot see Lower Parel's leave records
- Backup of Aurora taken nightly cross-region (Mumbai → Hyderabad)
- Aadhaar e-sign tested on 6 different document types (offer, increment, NDA, partnership amendment, indemnity, PF nomination)
- Roll-back plan: Zoho data export retained for 12 months (legal hold for any audit query)
- HR admin training: 4-hour workshop, recorded, with cheat-sheet PDF
What We Deliberately Did Not Build
1. Recruitment / ATS module. The firm hires through traditional channels (campus, referral, partner's own network). They do not need an applicant tracking system. We pushed back on the partner-suggested "let's also build the ATS" in week 1.
2. Performance management / 360-review. This is a culturally sensitive area in CA firms — partners review managers, managers review seniors, and the firm has its own ICAI-aligned framework. We did not want to encode the wrong cultural assumptions in v1. v2 candidate after the firm decides what they want.
3. Learning management for CPE compliance. ICAI's CPE is tracked separately on ICAI's portal. Building an internal LMS would have duplicated existing functionality. We just track CPE-day logs.
4. Client-portal for engagement deliverables. Out of scope for HR. The firm uses a separate file-share for client communication.
Common Mistakes (When You Build a Custom HRMS)
Symptom: "Time logs are inaccurate because staff fill them at end of week." Cause: end-of-week submission is too late for memory accuracy. Fix: nudge via WhatsApp at 6:30 pm daily; partial submissions allowed; manager approval at end-of-week. We saw 88% same-day submission rate with this nudge pattern.
Symptom: "Partner attribution disputes resurface." Cause: business rule changes were not discussed with all partners before implementation. Fix: run a partner-attribution review meeting at the end of every quarter. Codify any new rules in the engagement schema. Audit log makes the trail visible.
Symptom: "Payroll mismatched between HRMS and Razorpay output." Cause: a salary component (LTA, conveyance, special allowance) was not modelled identically. Fix: write a parallel-run reconciliation script. Run it for 3 months in parallel before stopping the legacy payroll.
Symptom: "Manager bypasses HRMS to approve leave via WhatsApp." Cause: the HRMS approval flow has more friction than a WhatsApp message. Fix: ship a "approve via WhatsApp reply" feature — manager replies "A" and the leave is approved with the WhatsApp message hash logged as evidence.
Symptom: "Partner cannot find a specific engagement quickly." Cause: search relies on engagement title only, not on client + period + topic. Fix: ship Meilisearch-backed search across (engagement title, client name, period, technical area, lead partner).
A Detail That Surprised Us
In Q1 2026, the senior partner ran a query: "show me all engagements over the last 3 years where the originating partner was different from the billing partner." It returned 47 cases, 14 of which had unresolved attribution discussions in the partners' minutes. The HRMS surfaced a pattern that the Excel sheets had hidden for years — a specific senior associate had been originating engagements that always got billed to a different partner. It turned out to be a good story (the associate was on a specific career-development plan), but the data made it visible. The partner's framing: "I bought reporting. I got self-awareness."
Where HRMS Fits In Our Wider Work
We have shipped variants for:
The pattern: when off-the-shelf forces 3+ tools to coexist, custom is usually correct above ~80 employees. When one tool covers 90% of your need (Slack for IM, GitHub for code), buy. Founder-perspective on how we decide is at viveksinra.com.
FAQ
What if my firm is only 30 staff — is custom still right?
No. Below 50 staff, Zoho People + Zoho Payroll is cheaper end-to-end including reconciliation. Between 50-80, it depends on attribution complexity. Above 80, custom becomes the right call for professional-services firms.
Why Razorpay Payroll instead of Greythr or Keka payroll?
Razorpay Payroll's API is the cleanest in the Indian market. Their compliance handling (PF, ESI, TDS, PT) is current with regulatory changes. Greythr's API exists but is harder to work with. Keka does not have a clean API for our use case. For a custom build, API quality determined the choice.
Can the same HRMS handle a law firm or consulting firm?
Yes, with adaptations. The engagement and attribution patterns are similar across professional services. We have already received inquiries from 2 mid-sized law firms. Adaptation engagement: 4-6 weeks.
How does multi-entity payroll work?
Each entity has its own PAN, GSTIN, PF account. The HRMS supports staff being employed by one entity and billable to engagements run by another entity (with inter-entity transfer pricing). This is standard for firms that have separate entities for audit vs advisory.
What about ICAI compliance — CPE days, peer review?
CPE days are tracked as a leave type in the HRMS. Peer review is tracked as a separate engagement category. ICAI portal sync is on the v2 wishlist; for now it is manual export.
Can the firm extend the HRMS in-house?
Yes. We ship the codebase + deployment runbook. Most firms with an internal IT team can extend the HRMS after a 3-week knowledge transfer. We have done this for 1 prior client.
What about employee self-service for tax declarations and Form 16?
Built-in. Staff log in to declare investment proofs, view pay slips, download Form 16 at year-end. The self-service drops the HR admin's load by roughly 6 hours/week.
Did the HR admin push back on the migration?
Initially, yes. The familiarity bias is real. By week 8 (after the timesheet automation went live), she was the project's strongest advocate. What turned her: showing her that the new system handled her annoying month-end reconciliation labour.
Need a custom HRMS for your firm?
We build custom HRMS for Indian professional-services firms — CA, law, consulting, advisory. Typical project: 10–14 weeks, fixed scope. Built around your attribution, your billable-hour model, your statutory compliance. The first call is a build-vs-buy honesty session — we will tell you whether custom is right for your firm size.
Book a Build-vs-Buy Call
