Metabase vs Tableau for Custom Software Shops: Project Profit
Metabase suits a small custom software shop that wants a project margin query written once and trusted immediately, while Tableau suits a firm that needs the same profitability report to look identical for project managers, partners, and clients. Both can join time tracking, billing, and Jira or Linear data to show which projects are profitable.
Metabase and Tableau both solve that problem, but they solve it for different sizes of shop. One is built for a small team that wants a query written once and trusted immediately. The other is built for a firm that needs the same profitability report to look identical whether a project manager, a partner, or a client is the one viewing it.
Vendors Covered in this Article
Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.
Joining Time Tracking, Billing, and Delivery Data
The hard part of this report is never the math. It is getting hours logged in Harvest or Toggl, invoices from your billing system, and ticket status from your project tracker into one place without three separate CSV exports every Friday. Metabase handles this well once the data lands in a shared database or warehouse: write one query that joins hours to rates to invoiced amounts, and margin per project falls out automatically.
Tableau does the same join, but through its own data modeling layer rather than a query you can hand to another engineer to read. That is more setup, and it pays off once you have enough active projects and enough non-technical staff (a delivery lead, an account manager) who need to see margin without learning SQL.
When Utilization Reporting Needs More Than a Chart
Billable utilization, the share of an engineer's paid hours that actually land on a client invoice, is the other number that determines whether the shop is healthy. A Metabase dashboard filtered by engineer and week answers "who is underutilized this month" in seconds, and a scheduled Slack alert can flag anyone under a threshold before the monthly close instead of after it.
Tableau adds real value here once you want to slice utilization by seniority, by practice area, or by client vertical for a partner-level review, and once that view needs to look consistent across every leadership meeting rather than get rebuilt each time.
A Worked Example: Catching a Losing Project Early
Say a fixed-bid project was scoped at 400 hours and priced accordingly. By week six, a Metabase dashboard joining Harvest hours to the project record shows 260 hours already logged against a project that is only forty percent complete by ticket count. That gap, hours burned against delivery progress, is exactly the kind of early warning a spreadsheet updated monthly cannot give you. The same query run weekly instead of at project close turns a surprised loss at delivery into a scope conversation with the client in week seven, while there is still time to have it.
A Tableau version of the same dashboard would add one more layer: showing the delivery lead their project alone, the practice lead every project in their group, and the managing partner the firm-wide picture, all from one governed data source instead of three separately maintained spreadsheets.
Setting This Up Without a Dedicated Data Team
Most custom software shops do not have anyone whose job is analytics engineering, so the setup path matters as much as the finished dashboard. Connect your time tracking and billing tools to a small warehouse or directly to Metabase if they already write to a database. Build the hours-to-margin query first, since it is the one number that changes how you scope the next project. Utilization and pipeline dashboards can follow once that first one is trusted.
Disqualifier: skip Tableau at this stage if nobody has a few weeks to spend modeling the data properly, since an unmaintained Tableau workbook goes stale faster than a query you can just reopen and fix.
Set up project margin reporting in this order:
- Connect your time tracking and billing tools to a small warehouse, or directly to Metabase if they already write to a database.
- Build the hours-to-margin query first, joining hours to rates to invoiced amounts, since it is the one number that changes how you scope the next project.
- Compare hours logged against delivery progress by ticket count, so a fixed-bid project burning hours too fast shows up early.
- Add a scheduled Slack alert for engineers under a utilization threshold, so the flag arrives before the monthly close instead of after it.
Fixed-Bid Versus Time-and-Materials Changes the Dashboard
A fixed-bid engagement and a time-and-materials retainer need genuinely different charts, not the same chart with a different filter. On a fixed-bid project, the dashboard that matters is hours consumed against the original estimate, because that gap is your entire risk exposure and the client's invoice does not move with it. On a time-and-materials retainer, the number that matters is closer to a pacing chart: hours billed so far this month against the monthly cap, so nobody discovers on the thirtieth that a client blew through their budget two weeks ago.
Building both into one shared dashboard, filtered by contract type, is straightforward in either tool once the underlying project records are tagged correctly. The mistake most shops make is tagging that distinction inconsistently in the project management tool in the first place, which no dashboard can fix after the fact.
What Good Looks Like
A well-run delivery function tracks margin on every active project weekly, not at project close, flags utilization problems within days instead of at month end, and never lets an account manager discover a losing project from the client instead of the dashboard.
Building The Capability (5-Stage Skill Ladder)
How to Get Started
Disclosure: We may earn a commission if you buy through some links on this page. It doesn't change what we recommend.
Frequently Asked Questions
How do we handle time entries that were logged against the wrong project?
Build a small review step into your monthly close rather than trying to prevent every mistake upstream. A Metabase dashboard that flags hours logged in the last week without a matching approved ticket catches most of the obvious errors, and a human still needs to confirm the reassignment before it hits the client invoice.
Should the dashboard include unbilled internal time, like sales support?
Yes, but keep it in a separate view from client-billable margin. Blending the two makes it harder to see whether a specific engagement is actually profitable. Track internal and pre-sales hours against a general overhead bucket instead, so project margin stays a clean, client-specific number.
Is it worth building this before we have more than a handful of active projects?
Build the underlying query as soon as you have two or three concurrent projects, even if the dashboard itself stays simple. The habit of joining hours to margin weekly is what catches a scope problem early, and it is much harder to retrofit that discipline once a losing project has already been delivered.
About the numbers
This guide doesn't quote a sourced benchmark. Figures in it are estimates or general guidance, so check them against your own numbers.
Related Guides
Picking a PEO for a Custom Software Shop: Fixed-Bid or Staff-Aug
How your billing model, fixed-bid or staff augmentation, should shape whether a custom software development company picks Justworks or Rippling.
Kandji vs Rippling IT for a Custom Software Shop's Fleet
How Kandji's Apple-only MDM compares with Rippling's device management for a custom software firm handling client code and rotating contractors.
Make vs Zapier for Custom Software Shops Managing Client Builds
Compare Make and Zapier for running a custom software or product engineering shop, from SOW-to-kickoff handoff to change requests and milestone billing.
The Handoff Checklist Custom Software Shops Skip
Scope creep, missed QA sign-off, and rushed handoffs come from the same gap: no enforced checklist. Here's where to put one in a custom software shop.
Zendesk or Intercom for a Custom Software Shop
A worked example for dev shops choosing a support tool: how ticket volume differs from SaaS, and what actually changes once a warranty period starts.
One Client Project, Two Contract Tools: A Walkthrough
Follow one custom software project from SOW to final invoice and see exactly where PandaDoc and Ironclad each help, or don't, a development firm.