No more Vendetta

No more Vendetta

Back in 2007, when I was still operating as ComputerHelpDC I created a quick database called ScheduleC to help keep track of Schedule C expenses that could be written off taxes.  With the start of vOfficeware we saw the need to bill clients in a recurring manner, so I decided to build a generic invoicing platform that others could use + allow us to eat our own dog food and use it to bill clients.

As we continued to grow, we had to start to track revenue in different codes. Instead of refactoring vOInvoice (which was used by perhaps 40-50 clients — but very few who would pay), I built another system we called “secure vo” — simply because it was hosted at  The key difference in functionality was that while vO Invoice could do automatic billing, secure vo would store credit cards and charge them — not exactly PCI Compliant.

Unfortunately that server has been killed off, so I don’t have a screenshot to take.

Once we started selling Awards, we quickly realized it we needed a tool to help track that business.  Zack’s first project was to explore .NET 4.0  and he built Vendetta our first license restriction system.

image (3)
image (1)

What a joke that was — we stopped enforcing licensing restrictions almost out of the gate and this system became a glorified license key generator.  Zack continued to work on Vendetta, by this time he wanted to learn AngularJS and our sales were growing to the point where we needed a system that could help track commissions on complex deals (split payments, multi-year deals, multiple people getting commission).

We worked together to roll out this system.  It was clunky, but it supported everything Secure VO did + commission tracking on recurring and non-recurring deals.  It also contained a system for support people to log into clients with. (Prior to this we had a google doc that had hashed links).  Pretty crazy to think how ghetto things were.  This was a part time project for nearly 1.5 years.  It was slow, and buggy.

It had one key flaw, it didn’t produce invoices, instead it relied on statements.  Like many of my bad decisions, I based my solution based on accounting that an accountant would appreciate, not a common person.  Thus each month resulted in confusion and frustration for people who had to pay our bills.  Eventually we built in a hacked invoicing workaround but by this point Vendetta’s days were numbered.

As we built up Vendetta we also used it to synchronous information from multiple systems.  Today marks the last of those syncs being turned off (with Basecamp).

We learned a ton building Vendetta.  Namely AngularJS, using Azure Cloud Services, and the limitations of Azure Cloud Sites.

A few months ago we decided on the replacement for Vendetta.  Our whole strategy shifted from building these super custom tools to match our specific workflow, to finding the best of breed software to solve our business needs — then sacrificing the fringe cases that weren’t super important.

Part of making this decision was deciding that the NonprofitCMS business was no longer relevant.  The consulting business model was way different from a SaaS sales model, so that decision too allowed us to simplify things.

Keeping the Open Water theme in mind, we named this project SONAR.  We were able to stand this up in a few weeks of development by following two principles:

  1. Find systems that solve core needs
  2. Use APIs to make integration happen
  3. Refactor but mostly copy previous integration code from Vendetta

Now we solve our most common needs as follows:

  1. Commission Tracking
    1. Sales tracked in salesforce
    2. Billing automatically tracked in Xero
    3. Sonar combines both feeds of data to compute monthly commissions
  2. Provisioning and Billing Clients
    1. Client Licensing Restrictions tracked in SONAR
    2. Billing tracked in Xero
    3. SONAR then combines data to make sure clients have paid up
    4. The OpenWater Platform queries SONAR to lock out users who haven’t paid
  3. Ensuring Only Supported Admins Get Support
    1. Supported Admins Tracked in Xero
    2. All Help Tickets get pushed to SONAR before they are processed and are tagged with SUPPORTED vs NOT SUPPORTED attribute

We frowned upon this strategy earlier because we thought we could do it better and cheaper if we went custom.  In hindsight, we spent hundreds of hours building Vendetta and supporting it.  When needs changed we became a bottleneck to our own progress.  Perhaps when we set out on this course years ago, the APIs of these platforms were not robust or easy enough to work with, but more likely it was just overconfidence in our own skills and ability to code quickly and bug free that held us back.

Here is a look at SONAR.


Magazine made for you.


No posts were found for provided query parameters.