The Inside Story of a Small Software Acquisition (Part 2 of 3) | Rob Walling
Вторая часть истории о покупке небольшого софтверного продукта DotNetInvoice. После месяца переговоров и проверки автор приобрёл права на продукт, но в первые же сутки получил более 30 гневных писем от клиентов о множестве багов и отсутствии поддержки. За две недели он нашёл и исправил 23 критических бага, добавил подробную инструкцию по установке и выпустил бесплатное обновление до версии 2.1. Выяснилось, что прежний владелец продавал версию без поддержки, и автор убрал эту опцию. Постепенно доверие клиентов удалось восстановить, но в конце первого месяца его ждал новый сюрприз.
The Inside Story of a Small Software Acquisition (Part 2 of 3)
Закулисная история покупки небольшого программного продукта (часть 2 из 3)
When we left Part 1, I had emailed the developer of an invoicing software package, asking if he would be interested in selling the rights to his product.
В конце первой части я написал разработчику пакета для выставления счетов, спрашивая, не хочет ли он продать права на свой продукт.
Negotiations
Переговоры
The developer and I began an email exchange that lasted nearly a month. I received screen shots of the revenue for previous months. I reviewed code samples and data models. I played with their online demo, inquired about their customer base, how many copies they had sold, and how much time they spent supporting the product. I put it all together and, using what I know about small software product valuations, made them an offer.
Мы с разработчиком начали переписку, которая длилась почти месяц. Я получил скриншоты выручки за предыдущие месяцы. Изучил примеры кода и модели данных. Поиграл с их онлайн-демо, расспросил о клиентской базе, количестве проданных копий и о том, сколько времени они тратят на поддержку продукта. Собрал всё воедино и, опираясь на свои знания об оценке небольших программных продуктов, сделал им предложение.
After some negotiating we arrived at a final price. I received the signed contract, sent the funds via PayPal and within a few hours the code base, sales website, and domain names that make up DotNetInvoice (then at version 2.0) were mine.
После некоторых переговоров мы пришли к окончательной цене. Я получил подписанный контракт, отправил средства через PayPal — и через несколько часов кодовая база, сайт продаж и доменные имена, составляющие DotNetInvoice (тогда версии 2.0), стали моими.
I don’t think I can properly convey the excitement I felt opening the source code for the first time; the joy of a successful acquisition. If you’ve ever gone through a month-long process of investigating and negotiating a purchase you know how exhausting it is. The hours spent combing through documents and code, negotiating a price, and drawing up and signing document are all spent knowing that there is a high likelihood that the deal will fall through.
Думаю, я не смогу в полной мере передать то волнение, которое испытал, впервые открывая исходный код — радость от успешного приобретения. Если вы когда-нибудь проходили через месячный процесс изучения и переговоров по покупке, вы знаете, как это выматывает. Часы, потраченные на изучение документов и кода, согласование цены, составление и подписание документов — всё это время вы понимаете, что с высокой вероятностью сделка может сорваться.
I basked in happiness for the entire evening. I called a few friends, began scribbling down ideas for new features, and gazed at the marketing website for hours. The next morning I emailed a few existing customers to inform them of the ownership change and ask for their opinion on a future direction for the product.
Весь вечер я купался в счастье. Позвонил нескольким друзьям, начал набрасывать идеи новых функций и часами разглядывал маркетинговый сайт. На следующее утро написал нескольким существующим клиентам, чтобы сообщить о смене владельца и спросить их мнение о будущем направлении развития продукта.
That’s the Sound of All Hell Breaking Loose
А вот и звук надвигающейся катастрофы
Within 24 hours I had over 30 replies in my inbox, all of them filled with angry comments about the lack of support and the number of bugs in the software. There were issues with the recurring invoicing, unencrypted storage of data, buggy searches, and on and on.
В течение 24 часов в моём почтовом ящике оказалось более 30 ответов, и все они были полны гневных комментариев о полном отсутствии поддержки и количестве багов в софте. Проблемы были с повторяющимися счетами, незашифрованным хранением данных, глючным поиском — и так далее, и так далее.
It felt like someone had dropped a ton of wet cement on my chest…had I just spent thousands of dollars on a complete piece of crap?
Было ощущение, будто мне на грудь сбросили тонну мокрого цемента… Неужели я только что потратил тысячи долларов на полный хлам?
Had I completely dropped the ball during due diligence?
Неужели я полностью провалил проверку при покупке?
After a few hours of panic I arrived at a game plan: email everyone, put together a complete list of bugs, and fix them.
После нескольких часов паники я пришёл к плану действий: написать всем, составить полный список багов и исправить их.
All of them.
Все до единого.
Every last one.
До последнего.
There was no doubt that this is where I had to begin to salvage the reputation of the product. At the same time I was preparing to break the news to my wife that I would be sleeping on the couch for the next 10 years until I recouped my investment.
Не было никаких сомнений, что именно с этого нужно начать, чтобы спасти репутацию продукта. Параллельно я готовился сообщить жене, что буду спать на диване ближайшие 10 лет, пока не верну вложенные деньги.
Moving Forward
Движение вперёд
Within two weeks I had found and fixed 23 major bugs. One of the key issues was with the recurring invoicing piece. The scheduling mechanism is cleverly written to take advantage of the caching functionality of ASP.NET so that it doesn’t require a separate scheduling installation. But it didn’t work.
За две недели я нашёл и исправил 23 серьёзных бага. Одной из ключевых проблем был модуль повторяющихся счетов. Механизм планирования был остроумно написан с использованием функциональности кэширования ASP.NET, чтобы не требовать отдельной установки планировщика. Но он не работал.
There were a few logic errors that meant the schedules were all over the place. The bugs were hard to find and took several hours to pinpoint, but the fixes were minimal, often changing a < to a <=.
Несколько логических ошибок приводили к тому, что расписания шли вразнобой. Баги было сложно найти, на их обнаружение ушло несколько часов, но исправления оказались минимальными — зачастую достаточно было заменить < на <=.
I also added detailed installation instructions (with the generous help of Joseph Voldeck from www.MadGig.com), since the existing instructions were geared towards experienced .NET developers. The product now includes a PDF with screen shots that walk you through the set up step by step.
Я также добавил подробную инструкцию по установке (при щедрой помощи Joseph Voldeck с www.MadGig.com), поскольку существующие инструкции были рассчитаны на опытных .NET-разработчиков. Теперь продукт включает PDF со скриншотами, которые пошагово проведут вас через весь процесс установки.
With these improvements I released the next version, DotNetInvoice 2.1, as a free upgrade for all customers, even though no one had purchased support.
С этими улучшениями я выпустил следующую версию — DotNetInvoice 2.1 — как бесплатное обновление для всех клиентов, хотя никто из них не покупал поддержку.
WHAT?!…No one purchased support?!
ЧТО?!.. Никто не купил поддержку?!
The previous owners offered a cheaper purchase option that didn’t include support. The problem is, with or without support, when a product doesn’t work you expect someone to help you. So although everyone had purchased the “un-supported” version, they (rightfully) expected someone to reply to their emails when the product had bugs.
Предыдущие владельцы предлагали более дешёвый вариант покупки, не включавший поддержку. Проблема в том, что с поддержкой или без — когда продукт не работает, вы ожидаете, что кто-то вам поможет. Поэтому, хотя все купили версию «без поддержки», они (вполне справедливо) ожидали, что кто-то ответит на их письма, когда в продукте обнаружатся баги.
Needless to say, within weeks of taking ownership I removed the un-supported version from the purchase options.
Само собой, через несколько недель после вступления во владение я убрал версию без поддержки из вариантов покупки.
In addition to the weeks of development, I spent untold hours emailing customers asking them for feature requests, offering free support, and trying to regain some confidence in the product. After releasing version 2.1 I finally felt like the product was my own.
Помимо недель разработки, я потратил бесчисленные часы на переписку с клиентами, спрашивая их о пожеланиях по функциям, предлагая бесплатную поддержку и пытаясь вернуть доверие к продукту. После выпуска версии 2.1 я наконец почувствовал, что продукт стал по-настоящему моим.
I couldn’t have been happier. The new release fixed every known issue, the existing customers felt supported, and a few new sales had rolled in. Things were looking up.
Я не мог быть счастливее. Новый релиз исправил все известные проблемы, существующие клиенты чувствовали поддержку, и пришло несколько новых продаж. Дела шли в гору.
Until the end of the first month rolled around.
Пока не наступил конец первого месяца.