How Much Does Custom Software Development Cost?
We often get questions about how much custom software development costs, and like everyone else, we always say the same thing: “that depends on a lot of things.” Today, I’d like to write about how much software development typically costs when you hire Elegant Software Solutions. To begin, let’s look at what some of the variants are that make the price fluctuate so much:
Factors Influencing Cost
Amateur v professional developer(s)
Solo developer v development team
W2 v 1099
Inhouse versus outsourced
Onshore v nearshore v offshore
Time-and-materials v fixed-fee
Features and functionality
Maintenance (brownfield) v new development (greenfield)
Location/cost of living
Size of software development vendor
That’s a good starting point. I’m not going to discuss each of these in detail, but I’ll touch on some of them and will elaborate on others in future articles.
Let’s begin. Do all software development projects require a professional team encompassing all areas of the software development lifecycle? Absolutely not! Is it okay to hire your neighbor’s daughter who is about to graduate from GA Tech for $30 an hour as a side project? Of course it is! That’s all some projects will ever need. Or does it make sense to hire a brigade from Ernst & Young, Accenture, or Avanade for tens of millions of dollars? In some cases, absolutely!
Today, however, we’re talking about Elegant Software Solutions and the approach we take to pricing custom software. You’ll find that we fall somewhere in the middle of those two examples. We’re more expensive than your neighbor’s daughter or most freelance developers, but we are also a lot less expensive than E&Y and the other big players. What about doing it in-house? In most cases, if you’re only looking at the direct costs (e.g., hourly rates), any onshore vendor will be more expensive than an in-house team. But, if you look beyond the direct costs and consider the many other factors affecting the Total Cost of Ownership (TCO) of software, you’ll find that hiring a vendor like ESS is often quite a bit less expensive than an in-house team. Moreover, using a third party provides a variable cost model, which is extremely valuable to most organizations.
Let’s talk about hourly rates. It’s important to understand how much people get paid as a starting point to understanding the overall cost of your project. Many folks primarily consider the role when assigning hourly rates, but we’ve found it’s better to base it on the experience level of the person instead. The more experienced the resource, the more roles they can cover. It’s more about paying them a salary than it is paying them different amounts of money for each role they play on a project.
Apprentice: $20 - $30 /hr or $41,600 - $62,400 base annual salary
Junior: $30- $40 /hr, or $62,400 - $83,200 base annual salary
Mid: $40- $50 /hr, or $83,200 - $104,000 base annual salary
Senior: $50 - $75 /hr, or $104,000 - $156,000 base annual salary
Principal: $75 - $100 /hr, or $156,600 - $208,000 base annual salary
Okay, that’s just a general range of what technical resources are earning here in the Atlanta, GA market in 2020. Now consider the following influencers and multipliers. If you’re hiring W2 full-time employees (FTE), add on ~15% for taxes and benefits. If you’re hiring 1099 independent contractors, there’re not much to change. If you’re hiring a professional vendor such as Elegant Software Solutions, the table above represents their costs, of course, not yours. As a rule of thumb, most vendors target a 50% +/- gross margin on the project, so double the rates above to figure out what they are billing you for their resources.
Now let’s talk about hourly rates and how they relate to billing. If you’re a consulting firm and you’re billing your projects directly based on hours worked, you’re doing it wrong. That is a very complex subject that hundreds, if not thousands, of industry experts and authors have discussed-- most notably of which is Alan Weiss and his book Value-Based Fees. We’re not going to into detail about it in this article except to say that Elegant Software Solutions doesn’t go so far as to engage in value-based billing, but we’ve also learned not to charge by the hour. Instead, we charge based on deliverables. We don’t count hours; we track deliverables and we know how long they are expected to take to produce. Let’s explore that a little further.
Roles Required in a Good Software Development Project
Generally speaking, these are the roles that most professional software development projects require to be successful:
Business Analysis| Product Owner
Project Management | Scrum Master
Architecture (application, data, security, integration, infrastructure, & enterprise)
Development (front-end & back-end)
Testing (manual & automated)
DevOps | CICD
Technical leadership (mentorship & code reviews)
We’ll discuss the details of these roles in a future post, but in our experience, they are the roles required to build Elegant Software that meets the expectations of the business. That’s an important classification. To us, we consider Elegant Software to possess the following qualities:
It is not more complicated than the problem it is designed to solve.
It is easy to maintain. When it’s time to fix a bug, it’s relatively easy to fix and deploy.
It is easy to extend. Adding a new feature isn’t painful.
It scales as needed. It handles the anticipated load of the system.
It is reliable. Users can depend on the software to help them accomplish their tasks and to create and manage data accurately.
It is secure. Software should always be developed with a security-centric mindset.
It is written with the next developer in mind. Future developers won’t hate working in the existing code.
It is just as easy for one developer to work on the system ait is for teams of developers to work on the system.
It is well documented. Descriptive naming conventions, good organization, and sound logic create self-documenting code.
It is consistent. Standards and conventions are employed and enforced for consistency.
The Elegant Delivery Process: Phases
Now let’s touch on the process that Elegant Software Solutions follows to build Elegant Software: The Elegant Delivery Process. This part is very important because it addresses the issue of meeting the expectations of the business. Expectations need to be set upfront and managed throughout the entire project. The Elegant Delivery Process is based upon IBM’s Disciplined Agile Delivery, which is an enterprise-aware risk-driven software development methodology. There are four phases:
Client Engagement: During this phase, the sales team and a Principal Technologist from ESS works with the primary client stakeholders to determine if ESS is a good fit to help the client or not. This process typically takes about two days and is free.
Inception: Discovery and planning are done in this phase, and it typically takes about a month to complete.
Construction: Software is built in this phase. It is broken down into two-week iterations, and the process repeats as many times as it needs to build the desired features.
Transition: UAT and final bug triage is done in this stage. Systems are deployed to production and users are trained on new features. This phase typically takes about two weeks to complete.
The Elegant Delivery Process: Deliverables
As I mentioned previously, rather than focus on hourly rates for billing, we bill for deliverables. The details of each of these deliverables will come in a future post, but this is a general breakdown of what we provide during each of the phases of the project.
Stakeholder interview notes
Initial assessment of the codebase, if applicable
Master Services Agreement
Statement of Work for first Quarterly Baseline Team Engagement (background, problem statement, proposed Solution, initial budget, initial schedule, scope of work, deliverables)
System flow charts
Product backlog: epics and features
Product backlog: product backlog items and tasks
Team project for collaboration
Source control repositories
CICD build and release system
Content Delivery Network
Ongoing product backlog grooming
Code committed to repos
Ongoing feature demos in UAT every two weeks
Final bug triage
Deploy to appropriate App Store
The Project Management Triangle
Okay, now that we’ve gotten all of that covered, let’s talk about what is arguably the most important thing to understand to successfully execute a software development project: The Project Management Triangle.
The Project Management Triangle, or the Iron Triangle, defines an immutable law of project management. The triangle consists of three factors: Time, Scope, and Cost. Note that some people talk about Quality instead of Scope. Those two factors can be used somewhat interchangeably, depending on the context. Nonetheless, the law is simply this: stakeholders can control two sides of the triangle, and the third one always fluctuates in response to your decisions. Consider these examples:
Example 1: Fixed Schedule and Fixed Budget (Scope Fluctuates)
You have a trade show coming in 6 months and you have a set budget of $400K. You need to build an app for the tradeshow. Since your schedule is fixed and your budget is fixed, the number of features that can be built fluctuates in accordance with the other two factors.
Example 2: Fixed Schedule and Fixed Scope (Budget Fluctuates)
You have a trade show coming in six months. You have a defined set of features that must be created. Since you must get an exact amount of work done in six months, the amount of money you need to spend to accomplish your goal will fluctuate accordingly.
Example 3: Fixed Budget and Fixed Scope (Schedule Fluctuates)
You have $100K a month to spend on your development team. It’s an ongoing expense but you can’t spend any more than that each month. You have to upgrade your company’s ERP. Since you have a fixed amount to spend each month and since upgrading your ERP is a well-defined scope, the amount of time it takes will fluctuate.