Pricing Software Development Services: Lessons from Five Years
Pricing is the hardest problem in running a software development agency. Get it wrong in one direction and you leave money on the table that funds your competitors’ growth while you struggle to hire and invest. Get it wrong in the other direction and you lose deals to agencies that charge less for comparable work, slowly starving the pipeline. The margin between “too expensive” and “too cheap” is narrower than most agency owners realize, and it shifts based on factors that have nothing to do with the actual cost of delivering the work: the client’s industry, their previous agency experience, the competitive landscape in the proposal, and even how the price is presented on the page.
Harbor Software has been pricing development services since 2019. In that time, we have experimented with hourly billing, fixed-price projects, monthly retainers, value-based pricing, and hybrid models that combine elements of each. We have won projects we should have lost by pricing lower than we wanted out of desperation, and we have lost projects we should have won by pricing higher than the market would bear for our positioning at the time. Here is what five years of pricing decisions, mistakes, and course corrections have taught us about charging for software development work.
The Three Pricing Models and When Each Works
Hourly Billing: Transparent but Misaligned
Hourly billing charges the client for actual time spent on their project. It is the most transparent pricing model, the simplest to administer, and the default model for most development agencies and freelancers. Our hourly rates in 2024 range from $85/hour for standard WordPress and WooCommerce development to $120/hour for senior-level architecture and complex integration work to $150/hour for strategic consulting, technical audits, and technology selection advisory.
Hourly billing works well when the scope of work is genuinely uncertain at the outset. Debugging a production performance issue, investigating why a checkout flow has a 40% abandonment rate, conducting a comprehensive technical audit of an inherited codebase, or providing ongoing advisory during a technology migration are all situations where the amount of work required is unknowable until you start digging in. Quoting a fixed price for “figure out why the site is slow and fix it” is a gamble where one party will inevitably lose. Hourly billing aligns incentives fairly: the client pays for actual time invested, and the agency is not penalized for being thorough or for discovering that the problem is more complex than initially suspected.
The structural failure mode of hourly billing is misaligned incentives around efficiency. The agency earns more revenue by working more hours, which means, at least theoretically, there is a financial incentive to work slowly or to gold-plate solutions. Ethical agencies do not consciously exploit this, but the incentive structure creates an inherent trust deficit that the client must actively choose to overlook. We mitigate this trust gap with transparent time caps: every hourly engagement has an explicit not-to-exceed estimate agreed upon before work begins, and we proactively alert the client when we reach 75% of that cap. If we are approaching the cap and the work is not complete, we pause, discuss the situation openly, and agree on next steps before continuing.
// Our 2024 hourly billing structure
//
// Standard Development: $85/hr
// WordPress theme/plugin development, WooCommerce customization,
// Elementor page building, content migration, maintenance tasks
//
// Senior Development: $120/hr
// Architecture decisions, performance optimization, complex API
// integrations, code review, security auditing, technical debt reduction
//
// Strategic Consulting: $150/hr
// Technical audits, architecture planning, technology stack selection,
// vendor evaluation, CTO-as-a-service advisory
//
// Rush Rate: 1.5x the applicable standard rate
// Applies to any work needed within 48 hours of request
// Client must approve rush rate in writing before work begins
// Rush work is scheduled around existing commitments, not in place of them
//
// Included in all hourly engagements:
// - Detailed time tracking in Toggl with task-level descriptions
// - Weekly time and progress reports sent every Monday morning
// - 15-minute minimum billing increment (not 6-minute or 1-hour)
// - No charge for internal team coordination, tooling setup, or admin overhead
The 15-minute billing increment deserves explanation. Some agencies bill in 6-minute increments (0.1 hour), which gives the appearance of precise billing but feels nickel-and-dime to clients and creates significant administrative overhead tracking tiny time slices. Other agencies bill in 1-hour increments, which systematically overcharges for quick tasks like “change the phone number in the footer” that take 5 minutes but get billed as an hour. 15 minutes is the practical sweet spot: granular enough to feel fair to clients, coarse enough to be administratively manageable for the team.
Fixed-Price Projects: Clients Love Them, Agencies Fear Them
Fixed-price means the client pays a predetermined total amount for a precisely defined scope of work. The price does not change regardless of how many actual hours the work requires. We use fixed pricing for projects where the scope can be defined with high confidence before development begins: a website redesign with a specific sitemap and page count, a WooCommerce store with enumerated features and integrations, or a plugin customization with detailed acceptance criteria.
The advantage of fixed pricing is that clients love the certainty. They know exactly what the project will cost before committing. There are no invoice surprises, no anxiety about the meter running during a complex debugging session, and no difficult conversations about hours exceeding estimates. For the agency, fixed pricing rewards operational efficiency: if your team can deliver the defined scope in fewer hours than your internal estimate, your effective hourly rate increases and your profit margin widens.
The dangerous failure mode of fixed-price projects is scope creep, and it is not a theoretical risk. It happened to us in our first year. A website project quoted at $18,000 based on 150 estimated hours ended up consuming 225 hours because the client added features and refinements throughout the project (“can we also add a product comparison feature?” “what about a wishlist?” “the category filters need to work differently than we discussed”) and we did not push back firmly enough on each addition. Our effective hourly rate dropped from $120/hour to $68/hour. We technically made a profit, barely, but lost the opportunity cost of those 75 extra hours that could have been spent on another client’s project.
Our fixed-price process now includes a rigorous scope document that functions as a contract addendum. Every feature, every page, every integration point, and every acceptance criterion is listed explicitly with enough detail that there is no room for interpretation. Features not on the list are explicitly out of scope. Change requests during the project are welcomed enthusiastically (clients should feel free to have new ideas) but they go through a formal change order process: the client describes the addition, we estimate the additional cost and timeline impact within 24 hours, the client approves or defers to Phase 2, and both the budget and timeline are formally updated. This process adds healthy friction that prevents casual scope expansion.
Monthly Retainers: The Preferred Model for Long-Term Relationships
Retainers are our preferred pricing model for ongoing client relationships because they create the strongest alignment of long-term incentives between agency and client. The client pays a fixed monthly fee for either a defined number of development hours or a defined scope of ongoing work. Our retainer tiers range from $2,000/month for basic maintenance and support (20 hours) through $5,000/month for active development and optimization (50 hours) to $12,000/month for a dedicated development resource (120 hours, essentially a part-time team member embedded in the client’s operations).
Retainers work because they create predictability on both sides. The client gets predictable monthly costs they can budget for, priority access to the development team over project-based clients, and the compounding benefit of working with a team that accumulates deep knowledge of their codebase, business logic, and operational preferences over months and years. The agency gets predictable recurring revenue that enables confident capacity planning, reduces the feast-or-famine cycle that plagues project-based agencies, and builds increasingly efficient client relationships as context accumulates.
// Retainer tier structure - 2024
//
// Essentials: $2,000/month
// - 20 hours of development and maintenance work
// - Bug fixes, plugin/theme updates, security monitoring, minor changes
// - 48-hour response time SLA for non-emergency requests
// - Monthly site health report (uptime, performance scores, security status)
// - Unused hours do NOT roll over to the next month
//
// Growth: $5,000/month
// - 50 hours of active development
// - New features, performance optimization, SEO technical improvements,
// conversion rate optimization, A/B test implementation
// - 24-hour response time SLA
// - Bi-weekly 30-minute planning calls to prioritize the backlog
// - Up to 10 unused hours roll over (maximum 1 month accumulation)
//
// Dedicated: $12,000/month
// - 120 hours (equivalent to a 75% full-time dedicated developer)
// - Named team member who becomes deeply familiar with the codebase
// - Same-day response time SLA for all requests
// - Weekly 30-minute planning and review calls
// - Full hour rollover with maximum 2-month accumulation
//
// All retainer tiers include:
// - Priority scheduling over project-based clients
// - Emergency production support (site-down situations, 1-hour response)
// - Quarterly strategic roadmap review and recommendation session
The hour rollover policy required iteration to get right. We initially offered unlimited rollover, which created an operational nightmare: clients would accumulate 60-80 unused hours over quiet months, then request a massive development sprint that overwhelmed our team capacity and conflicted with other client commitments. Capped rollover with reasonable limits encourages consistent monthly utilization while providing genuine flexibility for months with naturally lighter workloads.
The Paid Discovery Phase: Pricing Insurance
The single biggest pricing mistake we see agencies make is quoting a fixed-price project before truly understanding what they are building. A client describes their vision in a 30-minute call, the agency produces an estimate based on pattern-matching against similar past projects, and both parties lock into a number based on incomplete information and optimistic assumptions. When reality diverges from the estimate, and it always diverges to some degree, someone absorbs the cost and the relationship suffers.
We solve this with a paid discovery phase before every project exceeding $10,000. We charge $1,500-$5,000 depending on project complexity for a 1-2 week discovery engagement that produces three concrete deliverables the client owns regardless of whether they proceed with us:
- Technical requirements document – Every feature, user flow, integration, and acceptance criterion described in specific, implementable detail. Not “user login” but “users authenticate via email and password with bcrypt hashing, optional Google OAuth via NextAuth, password reset via time-limited email link (expires after 1 hour), session timeout of 30 days with sliding expiry, and optional two-factor authentication via authenticator app (not SMS).”
- Architecture recommendation – Specific technology choices with reasoning, hosting requirements and estimated costs, third-party service dependencies, and a justification for each significant decision.
- Detailed fixed-price quote – A line-item estimate broken down by feature area, with each line item marked as high, medium, or low confidence based on how well we understand the requirements. Low-confidence items include an explicit risk buffer (typically 30-50% additional hours).
About 85% of our paid discovery engagements convert to full project engagements. The 15% that do not still generate revenue that covers the discovery work, and the client walks away with a comprehensive specification document they can use to get accurate quotes from other agencies if they prefer a different partner.
Pricing Psychology and Market Positioning
The technical quality of your work determines whether clients stay with you long-term. The perceived positioning of your pricing determines whether clients choose you in the first place. These are different problems requiring different strategies.
Our effective rates have increased approximately 3x since 2019. In our first year, we charged $45/hour for WordPress development. In 2024, our standard rate is $85/hour and our senior rate is $120/hour. The quality of our work has improved substantially over those five years, but not 3x. The majority of the rate increase comes from positioning: we shifted from competing on price (“we are the affordable WordPress agency”) to competing on specialized expertise (“we solve complex WordPress and WooCommerce performance and integration problems for established businesses”). The same WordPress development work, presented at $45/hour, attracts price-sensitive clients who question every line item on every invoice and threaten to leave for a cheaper alternative every quarter. The same work, presented at $120/hour with proper positioning, attracts clients who value expertise, pay invoices promptly without negotiation, and focus conversations on outcomes rather than hours.
Specific positioning and presentation tactics that we have found effective:
- Never be the cheapest option in a competitive bid. In a three-proposal evaluation, the lowest-priced option is almost always perceived as the riskiest choice. Clients instinctively assume that significantly lower price means lower quality, less experience, or hidden costs that will surface later. Aim to be the middle or second-highest bidder.
- Always present three pricing tiers. Every proposal includes three options: Essential (minimum viable scope that meets core requirements), Recommended (our suggested approach with the features and quality level we believe the project needs), and Premium (everything the client asked for plus strategic additions we recommend based on our experience). Our data shows 70% of clients choose Recommended, 20% choose Premium, and 10% choose Essential. Without tiered options, clients negotiate downward from the single price. With tiers, they tend to anchor on the middle option and sometimes upgrade.
- Separate one-time project costs from ongoing retainer costs. A $25,000 website project sounds expensive as a single number. A $15,000 website build followed by a $2,000/month ongoing retainer sounds more financially manageable to most business owners, even though the total first-year cost is higher at $39,000. This separation is not manipulative; it accurately reflects the different nature of building versus maintaining, and it helps clients budget appropriately with their finance teams.
- Quote in round numbers. $12,000 feels like a considered, confident estimate. $11,847 feels like you meticulously calculated your hours, multiplied by your rate, and rounded to the nearest dollar, which implicitly invites the client to question your hourly assumptions and negotiate the component costs.
Raising Rates Without Losing Clients
Every agency owner intellectually knows they should raise rates regularly to keep pace with inflation, rising team costs, and increasing expertise. Few actually do it consistently because the fear of client churn feels paralyzing. Our experience over five years of annual rate increases tells a different story.
We raise rates every January without exception. The increase is typically 10-15% across all rate tiers. We communicate the increase in November, giving every client a full 60 days of advance notice. The communication is direct and unapologetic:
“Effective January 1, 2025, our standard development rate will increase from $85/hour to $95/hour. This adjustment reflects our continued investment in developer tooling, team training, expanded service capabilities, and the rising cost of maintaining the infrastructure and talent pool that supports your projects. Active projects with existing fixed-price agreements are not affected by this change. Retainer rates for existing clients will adjust on your next renewal date. We genuinely value our partnership and are happy to discuss this adjustment if you have any questions.”
In five consecutive years of annual rate increases totaling approximately 89% cumulative growth (from $45/hour to $85/hour), we have lost exactly zero clients due to a rate increase. Zero. Several clients asked for additional justification, which we provided with specifics about new capabilities, improved tooling, and competitive market benchmarks. Every single one accepted the increase and continued working with us. The clients who would terminate a productive agency relationship over a 10-15% annual rate increase are clients who are primarily optimizing on price, and those are not the clients you want to build a sustainable business around.
The compounding mathematical effect of consistent annual rate increases is the most powerful financial lever available to an agency. A $45/hour rate in 2019, increased by 12% annually, reaches $88/hour by 2024. The same client work, delivered by a more experienced team using better tools and processes, generates nearly double the revenue per hour of work. That additional revenue funds better hiring (which improves work quality), better tooling (which improves efficiency), and better client outcomes (which justifies the next year’s rate increase). It is a virtuous cycle, but it only works if you have the discipline and confidence to raise rates every year even when it feels uncomfortable and risky.
Pricing is not a formula you calculate once and forget. It is an ongoing practice that improves with experience, data, honest self-assessment, and the willingness to make mistakes and learn from them. The agencies that price well over the long term are not the ones with the cleverest spreadsheet models. They are the ones that track their numbers obsessively, learn something useful from every won and lost proposal, and have the confidence to charge what their work is genuinely worth. That confidence comes from delivering consistently excellent results for clients, which comes from investing in team quality and tooling, which comes from having the revenue to make those investments. Start the cycle wherever you are today, commit to raising rates annually, and keep iterating. The pricing will improve every year alongside everything else.