Software margin problems often start in delivery design
Many software margin problems come from setup work, custom support, and manual checks. Learn where delivery design eats profit first.

Why profit drops after the sale
A deal can look profitable on paper and still lose money a week later. The quote covers the visible work. The real cost shows up after the sale, when the team starts setting up accounts, cleaning old data, answering edge-case questions, and waiting for approvals.
The problem usually does not start with one big mistake. It starts with a pile of small tasks. Someone creates user accounts, fixes one strange setting, joins a kickoff call, rewrites a message, and checks a file by hand. Each task looks harmless. Together, they can wipe out the margin on a modest contract.
That is why low software margins do not always mean the price is wrong. Sometimes the product price is fine, but the delivery process is loose. The company sells a standard offer and quietly delivers a semi-custom service around it.
A simple example makes the issue clear. A small SaaS company charges $1,000 to onboard a client. Sales expects two hours of work. The real job looks different: 45 minutes to collect missing details, an hour to clean up the client's spreadsheet, 30 minutes to adjust roles and settings, 40 minutes of back-and-forth on minor edits, and 25 minutes to wait for final approval and verify it. The line item stays the same, but the labor keeps growing.
If a support lead, an engineer, and an account manager all touch the job, cost rises fast. From the outside, this can look like a pricing problem because the result is the same: weak profit. But the fix is different. Raising prices does not solve hidden setup work, extra support, and manual checks. It only hides the leak for a little longer.
That is why a good review often starts with the work that happens after the sale, not with a debate about the price tag. Once teams map every handoff, they usually find work nobody meant to include but everyone has accepted as normal.
How to trace the work step by step
Start when a customer says yes. That is when the cost chain begins. If you start at the invoice, you miss the work that happens before billing, between teams, and after launch.
Write down each handoff in plain language. Sales closes the deal. Someone creates the account. Someone checks permissions. Someone imports data. Someone answers the first confused email. Someone reviews a special request. Margin usually leaks through these small moves, not through one dramatic expense.
A basic map often tells you more than a finance report. For each new customer, trace the path from signed deal to stable use of the product. Keep it plain and specific:
- What happened
- Who did it
- How long it took
- What triggered extra work
Then measure the work for real. Do not guess. Track setup, reviews, fixes, rework, and follow-up for a week or two. Ten minutes here and fifteen there can turn a healthy plan into a weak one, especially when senior people keep getting pulled in.
Interruptions matter more than most teams expect. A support agent who stops to answer one custom question may need another ten minutes to get back into the original task. An engineer who pauses to approve a data import may spend longer reopening the codebase than doing the approval itself. Context switching is labor, even when nobody logs it.
This is often where the real issue appears. You may find that one customer type needs three manual checks, two internal messages, and one founder decision before they can use a feature. The price may be fine. The delivery design is what hurts.
A small SaaS team can test this quickly. Pick five recent deals and trace each one by hand. If the same people keep stepping in at the same points, you have found a repeatable cost. That is the kind of issue an operations review or Fractional CTO can spot before anyone touches pricing.
The hidden cost of week-one setup
The first week often tells the truth. Before the customer sees any result, the team may already be creating accounts, importing old data, setting permissions, adjusting defaults, and answering early questions.
That work rarely shows up in pricing. It gets folded into "onboarding" or treated as a small favor. After a few customers, those favors become a real cost.
The usual week-one jobs are familiar: creating users and access rules, cleaning spreadsheet data, setting up custom fields or templates, running training calls, and answering security questions before the full rollout. None of this sounds dramatic on its own. Together, it can eat half a day or more for every account. If an engineer joins a call, cost jumps again.
Data import is one of the most common traps. Customers say they have "a simple CSV," but the file often has duplicate rows, broken dates, missing fields, or labels that do not match your system. Someone on your team has to fix the file, map the columns, test the import, and check the result. That is delivery work, even if nobody labels it that way.
Training calls hide cost too. A 45-minute session often leads to prep time, follow-up questions, and another call for a second team member. If people need hand-holding to get through week one, those hours belong in your delivery model. They are not random support.
Security and access questions often land on senior people. A customer asks about role rules, SSO, audit logs, or a short security review. The founder, CTO, or strongest engineer steps in because nobody else can answer clearly. Now the most expensive people on the team are doing work that repeats from account to account.
This is a good place to start cleaning up. Trace every setup task, time it, and ask which parts should disappear. If setup still depends on custom effort, your margin does not depend on pricing first. It depends on how much week-one work you still do by hand.
Custom support that chips away at margin
Custom support eats profit in small pieces. A team closes a deal at a healthy price, then spends hours each week on requests that never made it into the plan.
The first warning sign is the special case for one customer. Maybe they need a custom export, a different approval step, or a manual data fix every month. Each request sounds small. Together, they turn one account into a part-time job.
Repeat questions are another leak. If customers keep asking where to find the same setting, how to import data, or why a report looks wrong, the product still has a gap. Support becomes a manual patch for weak onboarding, unclear screens, or missing defaults.
Manual reports and one-off adjustments create the same problem. Teams say yes because the work looks easy. One person tweaks a CSV, edits a dashboard by hand, or checks records before sending them out. Ten minutes here and twenty minutes there can erase the margin on a mid-sized account.
The worst part is that much of this work sits outside the normal ticket flow. A customer sends a Slack message, follows up by email, then asks for a quick call. Nobody logs the time. Nobody ties it back to the account. The team remembers the customer as "active" when the account is actually expensive to serve.
A short tracking period helps. For two weeks, log requests that only one customer asks for, repeat questions that come up every week, manual exports or data fixes, and time spent in Slack, email, or calls outside tickets. The pattern usually becomes obvious fast.
One customer paying $800 a month may look fine until you count three support calls, two custom exports, and a manual billing adjustment. Then the account may cost more than it earns.
An outside review can help here because it separates real product work from hidden service work. Once you see that split, you can move repetitive tasks into the product, write simple help docs, or charge for the extra work on purpose instead of giving it away.
Manual review and approval loops
Many margin problems look like pricing issues because the invoice stays fixed while labor grows in small chunks. Manual review is a common cause. A task may look like 30 minutes of work, but in practice it becomes 30 minutes of work plus two days of waiting.
QA is often the first leak. Someone still checks edge cases by hand, compares screenshots, reruns the same signup flow, or scans logs after every release. Each check feels minor. Together, they create paid labor that repeats on every change.
The same pattern shows up outside engineering. A change may need content approval, a legal check, or finance sign-off before it reaches the customer. Each review sits in a queue because the reviewer has other work. The developer moves on, loses context, then comes back later and spends another 20 minutes remembering what changed.
Late feedback makes it worse. If legal comments arrive after QA, or finance asks for wording changes after the build is ready, the team reopens the work. Then they test again, update notes, and ask for approval again. One delayed comment can create three extra touches.
Slow review does more than delay one task. It blocks the whole team. Support cannot answer clearly, sales cannot give a date with confidence, and developers keep half-finished work in their heads. That switching cost is easy to miss, but it hits margin fast.
A short audit usually finds the same few issues: checks that repeat on every release and could be automated, approvals with no deadline or no owner, feedback that arrives after the team already moved on, and reviewers who send comments in several rounds instead of one pass.
Remove even one queue and delivery gets cheaper without changing the price.
A simple example from a small SaaS team
A small SaaS team sells a standard plan for $1,200 a month. The promise is simple: sign up on Monday, import your data, and go live by Friday. On paper, the plan looks healthy. The product is built, support is supposed to be light, and each new account should take only a few hours to onboard.
Then three new customers arrive in the same month, and each one asks for "just a small adjustment." One needs a custom CSV import because their old system exports strange column names. Another wants an extra validation step before records go live. The third asks the team to double-check every import for the first two weeks because they do not trust their own data yet.
None of those requests sounds huge on its own. Together, they change the whole delivery process.
The support lead starts joining kickoff calls to calm customers and explain workarounds. Two engineers spend part of each week fixing edge cases in import scripts, testing messy data, and rerunning failed jobs. A manager reviews tickets because nobody wants a mistake in customer data. The team still charges the standard plan price because each request felt too small to quote separately.
After a month, revenue still looks fine. That is why these problems stay hidden for so long. The real change is in labor. What should have been four hours of onboarding per customer turns into 12 or 15. Support has fewer hours for renewals and docs. Engineers do less product work, so the same custom requests keep coming back.
A simple spreadsheet makes the issue obvious. Three accounts bring in $3,600 for the month. But if setup, support calls, fixes, and manual checks eat 40 to 50 team hours, the margin can collapse quickly. The team may blame pricing, but pricing was not the first problem. The plan promised a standard service. The delivery worked like a semi-custom project.
That is usually the moment to change the process, not rush into a price change. Put limits on imports, charge for extra checks, or remove manual approval from the default plan. If the delivery stays loose, more sales only create more work.
Common mistakes when teams blame pricing
Price is the first thing founders question because it is easy to see. The harder part to see is the work that starts right after the sale.
One common mistake is raising prices before anyone measures delivery effort. A team may charge enough on paper, then spend four hours on setup, two hours on hand-holding, and another hour fixing edge cases. The price did not fail. The company sold a product and delivered a service.
Another mistake is calling custom requests "rare" when they show up every week. Sales says yes to one small exception. Support agrees to another. Soon the team is maintaining a hidden second version of the product for a handful of accounts.
Teams also waste margin when senior staff keep doing repeat work. If a senior engineer reviews the same setup, checks the same import, or approves the same release note every time, cost climbs quickly. Senior people should handle unusual problems. If a task repeats, the team should document it, hand it off, or automate it.
Chat and meeting work often disappears from the math. Nobody logs the 20-minute Slack thread, the "quick" customer call, or the internal back-and-forth needed to clarify one request. Finance sees one ticket closed. The team lived through five side conversations.
You can spot this quickly by counting setup hours per new customer, custom requests per account, senior time spent on repeat tasks, and support time that lives in chat or calls. Those numbers do not need to be perfect. They only need to be honest.
Checks to run before you touch pricing
Before you raise prices, trace the last few customers from signed deal to normal use. Most margin leaks show up in the handoff, not in the price tag.
A quick audit works better than a long debate. Pick five recent accounts and follow the work hour by hour. Watch how a new customer starts. If someone on your team has to create data, fix settings, import files, or explain basic steps on a call, you are selling setup time along with the product.
Then count repeat reviews. When the team checks the same request, file, or change more than once, the second pass usually means the first handoff was weak. Mark every request that falls outside the normal path too. One-off integrations, special reports, custom permissions, and manual exports look harmless, but they eat time quickly.
Split support into standard questions and exception work. If a large share of tickets comes from edge cases, your support load does not reflect the core product. It reflects product gaps.
Track senior time closely. If a CTO, lead engineer, or senior product person approves routine work, answers the same setup questions, or cleans up customer input, margin is leaking from the most expensive part of the team.
Even rough numbers help. If ten customers a month each need 45 minutes of staff setup, that is already a hidden role. If a senior engineer spends 20 minutes reviewing every onboarding change, that cost belongs in delivery design.
If the same exceptions keep showing up, treat them as product decisions. Build a standard path, charge for them clearly, or stop doing them.
What to change next
Most software margin problems do not need a pricing fix first. They need a simpler path from signed contract to steady customer use.
Start with setup tasks that only a small group of customers needs. Move them out of the standard process, make them a paid add-on, or drop them if almost nobody uses them. A normal setup should stay short. If one client needs a special import, extra fields, or a live training session, treat that as separate work instead of hiding it inside every sale.
Then clean up support. When the same question shows up every week, stop answering it from scratch. Fix the confusing screen, add a clearer message, tighten onboarding, or write one short help note the team can reuse. If five customers ask where to upload a file, the product probably caused the problem.
Approval loops need the same cleanup. Most teams need one review path, one owner, and one deadline. If sales, product, support, and legal all review the same request with no order, small changes sit for days. One owner can ask for input when needed, but one owner should close the loop.
Only revisit pricing after you measure delivery cost step by step. Check the first 30 days, not just the contract value. Count setup hours, support touches, review time, and rework. If a customer pays $800 a month but needs six hours of human help to get started, the issue may be packaging or delivery design before it is price.
A fresh outside review can help when the team is too close to the mess. Oleg Sotnikov at oleg.is works as a Fractional CTO and startup advisor, with a strong focus on product architecture, lean operations, infrastructure, and practical AI-driven development. That kind of review is useful when margin keeps slipping and nobody can see which handoff, exception, or manual step keeps causing it.
Small fixes add up quickly. Remove one setup call, cut one approval step, and turn two repeat support answers into product changes. That often improves margin sooner than a rushed price increase.
Frequently Asked Questions
How can I tell if pricing is really the problem?
Start with five recent customers and measure the first 30 days. If the price looks fine on paper but setup, support, rework, and approvals keep adding hours, delivery is the problem.
Raise prices only after you know what work your team keeps giving away.
What should I track after a customer says yes?
Track each handoff from signed deal to steady use. Log account creation, data import, permissions, kickoff calls, support questions, fixes, reviews, and follow-up.
Write down who did the work and how long it took. Rough numbers work if they reflect reality.
Why does onboarding eat profit so fast?
Onboarding hides a pile of small jobs that rarely make it into the quote. Cleaning a CSV, fixing roles, answering early questions, and waiting for approval can turn a two-hour plan into half a day.
That extra labor cuts margin before the customer even starts using the product.
Should I count training calls as delivery cost?
Yes, if your team needs those calls to get customers live. A 45-minute session often creates prep time, follow-up email, and more questions after the call.
Count that time as delivery work, not random support.
How do custom support requests hurt margin?
Small exceptions add up. One custom export, a manual data fix, or a quick Slack answer may seem harmless, but repeated exceptions turn one account into ongoing service work.
Log the time, then choose one path: charge for it, build a standard option, or stop doing it.
Why are manual approvals so expensive?
The cost is not just the review itself. People wait, switch to other tasks, then come back later and spend time remembering what changed.
One late comment can trigger another test, another message, and another approval. That loop burns hours fast.
Should senior engineers keep handling setup and security questions?
Only for unusual cases. If senior people keep answering the same setup or security questions, the team needs better docs, a cleaner process, or product changes.
Repeated senior work is one of the fastest ways to lose margin.
How many customer accounts do I need to review?
Five recent deals are usually enough to spot a pattern. Trace each one by hand from close to normal use and watch where the same people step in.
If the same fixes, reviews, or calls keep showing up, you found a repeat cost.
What should I change before I raise prices?
Clean up the standard path first. Put limits on imports, move uncommon tasks into paid add-ons, cut duplicate reviews, and fix screens that trigger the same support questions.
A simpler delivery path usually improves profit faster than a rushed price change.
When does an outside review make sense?
Bring in outside help when revenue looks fine but profit keeps slipping, or when the team keeps arguing about price without hard numbers.
A Fractional CTO review can map hidden labor, separate product work from service work, and show which steps you should remove first.