Developing software has to be one of the most challenging endeavors one could pursue. As much as I love technology, and creating something from nothing, sometimes software development can be a huge pain in the ass!

We strive to develop complete systems

As software developers, we strive to create complete systems. We try to handle every possible special case, and work to think of every possible exception. Our first step to develop a new feature is to outline the complete build-out process (specification). Then, based upon the specification, we create a time quote. We plan for exceptions that were missed and have a small buffer for updates.

Software development isn’t straightforward

The challenge is, software development isn’t straight forward. For instance, when you’re building a house, you have blueprints that account for all special cases and possibilities. Blueprints for foundation, wiring, plumbing, landscaping, the list goes on. I went down to city hall to review my homes blueprints and there were over 20 pages!

Software is dynamic, it’s impossible to blueprint every single interaction. For instance, there are dozens of ways to program a feature, and they are all correct based upon the requirements. Unlike construction, where verify if a pipe leaks, or if the foundation is level, software quality assurance doesn’t allow for as direct testing.

While you can test software to ensure the feature works as expected, you have to test it on different operating systems, browsers, devices, and for different use cases (since there’s usually multiple ways to interact with a feature).

Sometimes the feature works perfectly as expected under all scenarios, but under-the-hood, the code isn’t scalable, or has security issues. While the system is working on the frontend, it’s vulnerable on the backend.

Working with Amazon is a disaster

A client contacted us about setting up a connection between his website and Amazon to transmit product details. Having implemented a similar system before, we knew this would be a complex project (due to working with Amazon).

Amazon has a litany of requirements, and each connection requires custom consideration since we’re transmitting different details. We couldn’t copy the code from our previous project, it would have to be completely rewritten.

We estimated a few thousand dollars for the project, and 70% of the way through, greatly exceeded our estimates and communicated as much to the client. Our proposal was clear that our quote was an estimate and there may be additional charges.

How software development can go sideways

As clear as our proposal was, the client was livid. In consideration of the situation, there are other solutions available that perform the same function. They’ll charge you a monthly minimum and a percentage of all sales through Amazon.

Our solution was a one-time fee and a small flat-rate monthly ongoing costs that didn’t scale with increases in sales. But despite costs, we did run into software development issues, and the timeline was pushed back several times. Some due to our team, some due to their team and missed deliverables.

Regardless, the project turned from almost done to cancelled. The client decided to throw in the towel, scrapping all work completed. He made an emotional decision to cancel the project, being frustrated in having to invest more and wait longer.

I had a meeting with the client, and was unable to assuage his frustration and anger. In hindsight, we should have just written off the entire project as a loss and provided him a credit to use for a future project.

All was quiet, until it wasn’t

It was a few months later that we received a shocking email from an employee of the client. Someone we never directly worked with.

It was clear our client’s frustrations and anger was communicated to his entire staff. Enough so to motivate this employee to write an impassioned plea.

The takeaways

  1. As a logical and rational person – I like contracts and clear terms. However, many people don’t and you need to switch from being logical to being emotional and interact with them based upon their feelings.
  2. In dealing with people in an emotional state, it’s never a good idea to refer to the contract unless you’re prepared to follow through with legal action.
  3. Sometimes the pragmatic approach is best. In this case, writing the project off as a loss would have assuaged the client’s anger, reducing friction of future interactions. Even though – contractually – our decision was sound.
  4. Consider the damage of an angry customer and how anger spreads through their entire company, and outside it.
  5. Don’t second guess your decision. Although deciding to follow our mutually agreed upon contract wasn’t the correct decision, it’s the one we made. You can’t reverse: move forward with gusto and enthusiasm.
  6. Identify your client’s communication style and act accordingly. If you’re a logic based person, have someone on your team deal with emotion based clients and vice-versa.
  7. Don’t write hasty replies, take time to think about how to handle the situation.
  8. Be prepared for future fallout. Until you make things right with the client, there will be animosity brewing in every interaction. Even after making things right, in some cases you’ll never regain their trust and it’s best for both companies to part ways.

Below is the email string

Email #1
Sent: Tuesday, June 04, 2013 1:27 PM

Thanks for your response. That export feature is free, right?

I figured I should remind you that most hosting packages offer plenty of templates,  custom analytics, as well as google analytics integration, and all of this without the extra fees.

Let me just go ahead and throw this out there: your company isn’t really competing in the market, price-wise. You have a really bad habit of trying to commit us to projects with never-ending fees and unclear total costs. You guys should really re-assess the way you treat customers, because we all feel pretty thoroughly abused here. I don’t know how well communication happens around your company, but your fearless leader Lou is a real piece of work with a terrible perspective on customer service. You guys are signing your own death certificate when you assume that your customers can be taken advantage of and milked for all their worth. Your team is unable to deliver on ANY of the reasonable expectations for a custom ecommerce site and can’t do regular maintenance without constant charges. It’s a really shitty model, and you and everyone else deserves to know that we’re doing everything in our power to fix the site that you guys couldn’t build without wasting any more money on you guys. You’ve completely and totally turned us off to your company. Our contract with you weighs heavy over our heads and our continued business together has taken a huge toll on our business. You guys promised a lot, delivered a little, and charged us twice what you quoted.

You see why we might not want to work with you in the future, right?

You see why we take the term to personally warn everyone we know against your company, right?

Maybe it’s time to have a company-wide talk about ethics and values and customer-centric thinking.

Have a good day, and I hope your supervisors aren’t ruining your year like they have for us.

Email #2 – my reply
Sent: Thursday, June 06, 2013 2:55 PM

*** forwarded me the email you sent in to us June 4th.

I’d like to understand your frustrations, do you have a few minutes for a call to discuss?

Thank you,

Email #3
Sent: Thursday, June 06, 2013 4:45 PM

Hi Lou,

I’m actually writing you a formal explanation and apology and don’t want to jump the gun on more ‘sanctioned’ communication with you from work once my suspension ends, but, I’ll take this opportunity to represent myself from my personal email account. I feel it needs to be said that my previous comments were said in representation of my feelings alone, and it was a serious mistake to speak so inappropriately via a company email or to misrepresent my employer.

In short, I’ve been very frustrated by the situation that our website was left in after working with your team last year. We were led to believe that we would be able to afford a finished working product and this was not what happened. As a result of this and the now resolved issues with our merchant center feed, many of the employees, myself included, have had to survive severely cut-back hours to compensate for the loss of sales and the expenditure we poured into the site that yielded almost none of the integration and industry standard features we thought we were buying.

It is my sincere belief that the website your company built for us, is really our only modern, competitive ecommerce platform. We sell through a number of different sites, but ****** is definitely the most broad in it’s inventory and modern in it’s design and interface. That one website is, in a very real way, the only reasonable hope for a whole family of employees at this small, local business to get by in a world where online business is getting progressively squeezed out by big-box retailers just as is happening with brick and mortar stores.

So basically, I’ve been working a second job to get by and it’s frustrating to hear time and time again that it’s going to cost money that we can’t afford to get the site up and working and I find it especially troubling that we got priced out of a finished project halfway through our upgrade.

If you still want to speak on the phone, you’re welcome to call me at your leisure and I’ll do my best to be available, I don’t have a hard schedule right now.