Operations Business Intelligence & Reporting3 min readUpdated September 2026

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:

  1. Connect your time tracking and billing tools to a small warehouse, or directly to Metabase if they already write to a database.
  2. 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.
  3. Compare hours logged against delivery progress by ticket count, so a fixed-bid project burning hours too fast shows up early.
  4. 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.

Executive Capability Standard

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)

1. Learn:Pull hours, rates, and invoiced amounts for your last three closed projects and calculate actual margin by hand to see how far off the original estimate ran.
2. Do Manually:Track margin on active projects in a shared spreadsheet weekly for a month to agree on how hours should be categorized before automating it.
3. Delegate:Assign a delivery lead or ops manager to own the weekly margin review and flag at-risk projects before the monthly close.
4. Automate:Connect your time tracking and billing tools to Metabase or Tableau and build a live project margin and utilization dashboard.
5. Buy:Bring in a data consultant once you are running enough concurrent projects that manual data joins across tools become a weekly time sink.

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.

Process Street

Run project kickoff and handoff checklists in Process Street so scope and rate assumptions are documented before the first invoice, not reconstructed after a margin looks wrong.

Visit Process Street→

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