How we got paid $0.67 per line of code

March 16, 2017 — Daniel Holmes

Project Details


  • Fully Scalable
  • Automatically Deployed
  • Front-End Web UI with some fully custom UI components

Estimated Time To Completion: 12-16 Weeks
Number Of Resources: 3-4
Quoted Cost: $30K
Actual Project:

  • Front End Web UI with fully custom UI components*
  • Management Web UI (Not Started)
  • API*
  • IOT Gateway*
  • Scaled*
  • Deployed*

* Means items that were completed
Duration of Engagement: 22 Weeks
Number of Resources: 3
Actual Raw Cost: $120K
Amount Customer Paid: $20K
Lines Of Code: 29, 836

What Happened?

Engagement with the client took place within a coworking space where a great deal of trust between ourselves and the client had been developed.

After meeting with the client to see what scope of work they had in mind, they discussed a refresh of their web interface, improvements to their IOT Gateway, development of a big-data system, and several other changes.

After discussing with the client further, it was agreed that the front-end web UI needed to be refreshed so that they were more saleable to their customers. An initial quote of $7K for one resource to purely update the design of the website was submitted with a 6-8 week turn around.

The client replied saying that the cost was too high, and they couldn't afford it up front. In the meantime a retainer agreement of $1K per month for 25 hours for system maintenance was put into place and two $3K lump sums were processed towards multiple projects within what they needed.

Meeting The Investor

The client had then taken us to meet with their investor, and made it clear that their timelines required a complete re-do of their front-end to prepare for market as quickly as possible.

We quoted $30K in the meeting to redo the front-end UI within 12-16 weeks with a team of 3-4 people. A verbal agreement was reached and it was made clear by the investor that there was no time for a full scope document or contract. While we were reluctant and indeed insisted we were too eager to get our next big contract.

As the project progressed it became very clear that the existing API was not feasibly tenable in light of what it needed to do and what it did, and informed the customer. The customer assumed that the front-end and api were part of the same code base, that they expected the $30K to cover the rewrite of that as well. While we protested, the argument was logical and the small amount of written communication they had collected leaned in their favour so we took it on the cuff, after all there was no scope document setting this out.

Maximum Scope Creep

Fast forward to nearing the middle of the project, the client had insisted that they wouldn't have paid $30K just for a new front-end and api and refused to pay $30K just for that. They insisted that in the conversation we previously had with their investor, that they and the investor were both under the assumption that it included the IOT Gateway. After some debate we progressed forward noting that the loss would be worth it to continue with the client beyond this project and grow with them.

Finally nearing the end of the project, when all that was left was QA and bug squashing, the client insisted that a management interface was also part of the Web UI and would not be paying for the project until the management interface was completed.

The Decision

At that point, the business had been running in the red for some time now and faced a decision: continue with a client who's scope kept increasing without financial benefit to the business on the off chance we would grow with them, or cut our losses now and try to get back on the sales train to recover our losses and get back in the black.

We chose to cut our losses, and leave the client with the fully working system including fixes for some of the final bugs.

Analysis: What Went Wrong?

Going Against Better Judgement

The way the whole project and relationship was set-up was against our standard practices (we document everything, and keep things written down) and our intuitive better judgement.

Taking Less Than We're Worth

The entire project was estimated and billed out at 75% less than our usual rate because the client claimed our startup and retainer discount, plus a further discount because the investor's money was currently tied up in real estate and couldn't yet afford to pay our full rate.

No Contract

Without having a contractual agreement in place, we had no protection for scope creep or extra costs incurred as a result of things that were unseen before the project started.

No Scope Document

The lack of scope document turned the conversation from a professional "look at the scope document" relationship to a he-said-she-said conversation which caused frustration for both the client and us.

No Space To Breathe

As a result of the high-stress nature of the urgent work, the chance to sit back and consider what we should and must do did not occur in a logical and well thought out manner.

Trust and Personal Connection

While building relationships is vitally important in business, going ahead with the business itself shouldn't be done based on emotion, personality or anything that doesn't relate directly to the business being conducted.
This client relationship failed ultimately as it was built on personal trust and emotion and most importantly, had no documentation to reign-in and somewhat control scope creep.

This Isn't A New Problem

While what we've experienced as a company isn't a new issue and a rookie mistake, it's a timely reminder to others in business to make sure that your documentation is up to scratch. Whether that be tax forms or scope documents, the key to any successful business is to have professional documents in place to protect you in all instances.

The Good News

We're available for our next big project and as you know from the above, you'll have comprehensive scope documents, contracts etc. drafted up so that things stay professional and on track.