Guy Kawasaki – problems and solutions in a VC-backed company

If you work in a VC-backed company and you don't read Guy Kawasaki's blog, you should start. If you work in a startup that might be VC-backed someday, you should absolutely start reading Guy's blog -- for you, it might come in time to save your neck.

Guy's latest entry is called After the Honeymoon, and it deals with problems that come up after you've got financing in place and you're trying to make it to that great liquidity event in the sky. There's only one problem: if you wait until you're in trouble to read his article, you're already dead.
When I read through his problems, it sounded like an eerie echo of the last four years at my last place of employment. We didn't have all of these problems, but we had most of them. The funny thing is, though, I don't think that merely having the answers to the problems would have been enough to fix them -- at least not in our case.

When I look back at the events that unfolded over the course of the last few years, so many of the really fatal problems were put in place very early on -- the rest were just harmonics of the fundamental injuries. We set in motion a game plan that directly caused some of the problems that killed us. Of course, we didn't know it at the time -- at least not in those black-and-white terms.

So what if someone had objected to the plan? What if they saw problems well in advance of the hurt and tried to route the company around them? In an environment where everyone looks bad if there are any problems, it's dangerous to be the messenger. That's what got our founder / CEO in trouble. So there's problem #1 from Guy's list. Not quite the same circumstances, but whatever, right?

Next up is problem #2. Let's say just for grins that when you close your VC round, the round is supposed to fund sales and marketing ramp-up. Then, also hypothetically, of course, let's say that the investors want to see you broaden your market. You're gonna need product changes. You're also going to need lots of Professional Services resources, because the new direction implies big sales, big implementations, and big support. There's no funding for development, though, so make hay with what you've got. Or less, since you're now training the new Sales & Marketing people, and your headcount is being funneled into PS. Oops ... late product. That's number 2.

Sales is problem #3, and it makes a certain amount of sense that it's hard to ramp up sales in a market other than the one where the company and the product grew up. Nevertheless, you bring in all the best Rolodexes and light up the phones with news of the Great Elephant Hunt. If nothing else, it makes good Boardroom material for a couple of quarters. Later on, it starts turning into an uncomfortable conversation about, "just how long is our sales cycle, anyway??" Like Guy points out, chasing those big accouts is a rush when it's hot, but the cricket noises in between deals gets old after a while.

Problems 6 and 7 are logical extentions of your other problems at this point, and problem 9 is inevitable when things are going this well.

So at what point do you bring this bad news to the Board, and who's gonna bell that cat, anyway? Our founder would have given them the straight poop -- in fact, she did, and got sacked. That's a lesson that wasn't lost on everyone else. That kind of environment breeds yes-men. Hard-working yes-men can right the ship if the list isn't too bad, but if nobody can tell Captain Smith to slow down, well, you know what happened.

So read Guy's list again. Print it out and tape it where you can see it from time to time. If you're not in too deep already, heed his advice. If you are in too deep, I've got some great advice about using SugarCRM to help your job search. 😉

Epilogue

Although this post reads like an indictment of our VC’s, it’s not. They were remarkably tolerant and stood by us for a long time (maybe someday I’ll write about what sort of reward we got for sticking around to the end, but not today).

In fact, this is an indictment of the system. We were a couple of checks and balances short of a solid foundation. Until I lived through a VC-backed startup scenario, I never really understood the importance of independent directors on a Board. I do now. Maybe this is the state of the art for VC-backed companies (hence, “Venture”?). After all, how are you going to get a high-quality independent Board member to help a fledgling startup? Well, here’s an idea: it’s routine for VC’s to partner with other VC’s to do a deal. Broaden the partnership to include a VC that doesn’t have a stake in the deal. Structure it so it’s a swap – you watch over this deal for me, and I’ll watch over this deal for you.

I’d love to hear your thoughts and feedback – let me know what you think.

SugarCRM for Job Search Management – Part 2

In part one of this article, I introduced you to SugarCRM and got you up and running. Now, we're going to ramp up your productivity with usage tips and an introduction to customization.

Usage Best Practices

Now that you've got SugarCRM set up, how do you get the most out of it? I'll share some tips I've found, but you should expect to make changes where they make sense for you. First, the basics. The "big three" of CRM are Accounts, Contacts, and Opportunities. If you understand them, you can't go too far wrong. Accounts are companies - any companies or organizations. Contacts are people. They often belong to accounts, but not always. Opportunities are chances to sell something -- in this case, you're selling you! Opportunities will always belong to an account, and should have a contact, too. Most CRM systems (incuding SugarCRM) have another entity called a Lead - we'll use this when we're tracking something that isn't ready to be an Account / Contact / Opportunity yet.


That covers the basics - here are some tips to help things go smoothly for you:

  • Use leads for "new" items - they're fast to set up, you can attach notes to them, and you can convert them into an Account and Contact.
  • Convert leads early. I started using leads until I was ready to turn them into opportunities, and it was a lot of work. I ended up creating Accounts and Contacts by hand because I thought "converting" would always create an opportunity and delete my lead. Well, it turns out neither were right. Convert a lead as soon as you have a lot of activity or multiple contacts. You don't have to create an account if you don't want to - you'll still be able to access your old lead, and you can change it from "converted" to "In Process" to make it show up on your Home page again.
  • Create limited opportunities. I'm sticking to making an opportunity only after I've got a real interview -- not just a screen or HR conversation. This isn't mandatory, but I feel that before you reach this stage, you really don't have anything you could reasonably predict.
  • Track everything. When you make a phone call or send an email, take a few seconds to make a note under the "History" section for the contact or account. It can really help when you start getting a bunch of balls up in the air.
  • Make sure to use "archive email" instead of "create note" to record emails. It's got more room and can handle html content pasted from Outlook.
  • Use activities to manage to-do's. They show up conveniently on the Home page, and provide history of things you've done for / with contacts.
  • Google toolbar will highlight addresses and link to a map.
  • Keep an eye on the "Last Viewed" bar on the top of the screen. It'll usually save you a couple of clicks.


That's about it for tips - be sure to share any you come up with!

Customization

You'll find SugarCRM to be pretty usable just the way it is, but there are a few things you'll probably want to adjust. Let's start with dropdowns. All of the dropdown lists you see in the system are configurable. From the "admin" menu, find the "Studio" section, and the "Dropdown Editor" link. Open that up, and let's find a list to edit. You should see "account_type_dom" as the current selection, and that'll do just fine. This is the account type, and if you're using SugarCRM to track a job search, you'll want to make sure you've got values like "Recruiter" and "Job Prospect". Note the arrows on the right of the edit screen, where you can reorder the list. Take care when setting keys and order. The key is used to sort, so if you look at a dropdown like task order, the standard keys of "High", "Medium" and "Low" will cause your list to sort as "High", "Low", "Medium". I also found that integer values don't work right - they get mangled as you move things up and down the list. Instead, use keys like "1High", "2Medium", and "3Low" for proper sorting, and then order the list so that the value you want to use as a default value is at the top.


Next, let's look at adding a custom field. From the admin screen, find the "Edit Custom Fields" link, and click it. Choose the "Accounts" module, and click "Select". On the left of your screen, you should see a panel that lets you type in a field name, label, data type, and so on. Set the values you want, and hit "Save". Now, you've got a field, but you won't see it on any screens, so we've
got another setting to change.


Find the "Field Layout" link on the admin screen, and click it. You'll need to find the screen you want to modify - if you just added a custom field to Accounts, you'll want to edit the modules/Accounts/DetailView.html file - click "
Select" to start editing. This screen is tricky until you get the hang of it,
but easy enough once you've done it once or twice.


First, decide whether you're going to add a new spot on the screen or whether you're going to replace an existing field. If you want to add a new spot on the screen, use the "Edit Rows" link on the left, and click a "+" to open up a new row. Now, let's move your custom field onto the screen. On the left-hand panel, expand the "Sugar Fields" section, and find the field and label for the custom field you just added. Click on them and add to the staging area above by clicking the box in the staging area. Now, click the field from the staging area over to the screen, dropping it by clicking on a square where you want to put your field. Do this for field and label.


The last thing to note when adding custom fields is that you're usually going to have to edit more than one screen. For most screens, you should see a DetailView (read-only) and an EditView (for adding or changing). Be sure to change both, or you won't be able to use your new field.


All this sounds like a lot of work, but it's not too bad -- it took about a quarter of the time to make the changes above than it's taken to write this article, so give it a shot!

Related links

SugarCRM home page
SugarForge - home of open source development for SugarCRM
SugarCRM VMWare appliance

Developer documentation for SugarCRM

Siebel CRM
SalesLogix CRM
VMWare
VMWare Player
VMWare community appliances

SugarCRM for Job Search Management – Part 1

As I indicated in an earlier article, I've found myself suddenly and somewhat unexpectedly in the job market. Not being one to take such things lying down, I began to make a lot of phone calls and send out a lot of emails. Initially, I used Outlook to track this activity, but it very quickly reached a point where it just couldn't do the trick. In short, I needed CRM, and I needed it fast. I'd recently seen that there was a VMWare appliance available for SugarCRM, so I decided to give it a shot.

Setup

SugarCRM is a mixed-source CRM platform. The basic open-source SugarCRM product is free and available for download, while more advanced Professional and Enterprise editions of the software are available for purchase. There are also hosted and hardware-appliance versions of SugarCRM available. SugarCRM is a fully-functional CRM system, competitive with commercial products like SalesLogix and Salesforce.com. It features the standard Account-Contact-Opportunity relationships made popular by Siebel, and used in nearly all CRM systems now.



In order to use SugarCRM, you have a number of options, including buying a hosted solution. In my case, I was job hunting, so free was good. That meant downloading and installing SugarCRM on my system, or getting the VMWare appliance. A VMWare appliance is a preconfigured OS image, ready to run in VMWare's free VMWare Player. For me, this option offered the fastest setup and great flexibility.



Downloads:
VMWare Player
SugarCRM VMWare appliance



Download and set up VMWare Player, and unzip the SugarCRM appliance. Open the appliance with VMWare Player and start it up. It'll boot into rPath Linux (a stripped-down distribution used to keep the size of the VMWare appliance as small as possible). Log in as "root" with no password. This is clue #1 that this isn't an enterprise-worthy install (nor is it meant to be), so use it only within your firewall. After you log in, type ifconfig and hit enter. Look for a line that says "inet addr" - this is the IP address the machine acquired during boot-up. Make a note of this, we'll need it for the next step.



Now, launch a browser and use the address you just wrote down to navigate to the SugarCRM login screen. Ex: http://192.168.0.5/sugarcrm Note: you can edit your HOSTS file in windows/system32/drivers/etc to add a textual name, like "sugarcrm" for this IP address. Log into SugarCRM as "admin" / "changeme" and take a look around.

Administration

One of the obvious benefits of using the VMWare appliance is that there isn't much administration. The most important thing to do is to make sure you've got good backups. Since this is a VM, this is pretty easy. First, we need to shut down the machine so no files are in use. Log into the console as root, and enter this command: "shutdown -h now". This will shut down the Linux machine, and you can then back up all the files - probably by burning a CD. After you've copied or burned the files, you can start the VM again. If you happen to be using VMWare Workstation instead of the free VMWare Player, you can use the "snapshot" feature to back up the machine.



There are a couple other options for backing up data, but they're not as convenient. First, you can back up all the application files (htm, php, images,
etc) by using the SugarCRM "backups" command from the "admin" menu (upper right on your browser screen). Choose an existing directory, or make a new one (mkdir) under the /usr/share/sugarcrm directory and set permissions (chmod 777) so that the web process can write to that directory. Once the backup completes, you can download the files by typing the appropriate address into your browser. If any of this sounds challenging, just stick to backing up the whole VM to CD.



Ditto for the next backup, which is the database backup. For this, you'll need to open the console, log on as root, change your directory to the backup location you used before, and use mysqldump to write the contents of your MySQL database to a text file (ex: mysqldump sugarcrm > backup_file.sql), and then download the database backup like you did for the application files. This
information may be helpful if you decide to install SugarCRM on a "permanent"
machine. For me, you can't beat the convenience of just burning the whole VM
to a CD.



That's it for part one. In part two, I'll cover usage best practices and
customization.

Job hunting? Avoid double submissions!

If you're a job seeker and you work with multiple recruiters or staffing / consulting companies, you have to be very aware of who is showing your resume to which contacts. If your resume shows up twice at the same company via two different channels, feathers are going to get ruffled -- this is known as double posting or double submission, and it'll cause recruiters and employers to drop you in a heartbeat.
My first experience with a double submission was close to ten years ago, when I received the same resume twice as a hiring manager. Not realizing the goo I was walking into, I interviewed the candidate, keeping the first recruiter abreast of my progress (we ended up passing on they guy). Shortly thereafter, I got a call from a very angry recruiter #2, demanding to know what the hell was going on. Boy, was I blind-sided.

More recently, I saw this happen again, and this time I was better prepared. I saw the problem before we called the candidate in for an interview (not always easy to do if the recruiter / staffing company mangles the resumes before submitting), and got both sources on the phone. I let them know what was going on, whose submission had arrived on my desk first, and asked them to sort out among themselves who was going to go forward. Many employers would not have been that cooperative.

Luckily, the two recruiters knew each other and reached a peaceful arrangement. If there had been even the slightest remaining conflict, I wouldn't have moved forward with this candidate at all.

Now, I find myself on the other side of the table. I'm working with recruiters, and they're trying to get me in to see some clients. I've tried to keep up with who's showing my resume to whom, and I ended up catching one today. A recruiter started telling me about a "Planning Architect" position, and it sounded familiar. A quick spin through SugarCRM while I'm on the phone, and I find where I've already learned about this position.

The letter of the law in these cases turns on who actually puts a resume in front of a client first, and though the first recruiter in this case hadn't actually sent my resume in yet, I was scheduled to meet them to discuss the position, and I felt compelled to wave off the second recruiter.

Close call.

Hopefully, this isn't a problem that you run into too often, but you do need to be aware and diligent to make sure you're not creating or walking into one of these situations.

Billable rate vs. Salary

When a company goes through the kind of turmoil I've seen recently, there are frequently opportunities to pick up some consulting hours to help with the transition. I got a shot over the bow last week: "Hypothetically, what would your rate be to do 'XYZ'?" I hadn't given it an awful lot of thought, but suddenly found it was time to do some "back of the envelope" calculations. I found a link that was helpful for me, and I dropped some of my calculations into an Excel spreadsheet that's available for you to download.
First, it may be helpful to consider whether you have any preconceived ideas about what you think your rate might be. They might turn out to be way off, but it'll be useful later to see whether the rate you compute is anywhere near the rate you thought you'd end up with.

Next, grab a copy of the spreadsheet and open it. This spreadsheet is based on a thread about the same subject on the Joel on Software site.

There are just a few numbers in here for you to adjust. I'll comment on them briefly here.

  • Salary. This is your W2-equivalent salary, or what you'd expect to make if you worked for someone else.
  • Hardware-software budget. After all, nobody's going to buy you that new laptop but you.
  • Insurance. Health, liability, and other insurance normally provided by your employer
  • Billable hours per week. This is the first of three factors designed to account for the fact that as a contractor, not all of your hours will be billable This is an area you'll want to give some careful thought to, as I'll discuss below.
  • Working weeks. You want vacation? Sick time? Holidays?
  • Utilization rate. Another billable hours factor. See below

The most important part of the spreadsheet to fiddle with will be the factors in the Revenue area. Generally, you're trying to account for risk here. There's nobody paying you if you find yourself without a client, so you need to plan for downtime to line up that next deal, as well as all the incidental time-wasters that come up during the week.

You can play with both the hours / week factor and the utilization rate factor to see what effect they have on your rate, but remember to leave a few hours per week for administrative tasks like accounting and IT support. You may also want to adjust the utilization rate to account for the length of your contract. If you've got a year-long contract, for instance, you can get a whole lot higher utilization than if you have a series of one-week contracts.

Even with a long-term contract, though, don't go to 100% utilization, since there will still be time spent at some point lining up the next gig, not to mention education, training, and decompression time. In general, the more confident you are that you'll always have another gig spun up and ready to go when another one finishes, the closer you can approach 100% utilization, but remember that 80% is considered a very healthy utilization for consultants that have a supporting crew selling deals for them.

There's clearly a lot more sophistication that could be built into this model, but this should serve to help structure your "back of the envelope" scribblings a bit. Good luck!

CIO Article: Open Source Models

A couple months ago, CIO had a great article on open source models: Free Code for Sale: The New Business of Open Source. The really nice part about this article is not that the content is especially deep (it isn't), but that it's a great executive summary of what's going on out there. Having the article show up in CIO also lends real legitimacy to the topic of open source. The article does a good job of descriibing the real business models at work here -- this is more than just hobbyists hacking away on code in their spare hours. I've referenced this article a couple of times already to people who understand the software industry in general, and want to learn more about this aspect of the business.

Ch ch ch changes ….

It's been an eventful week.

Last Friday, I found out that the company where I've been working for the last seven years was shutting its doors forever. I'd joined Resolution EBS as a CRM consultant, and ended up building a commercial Business Rules Engine product. Now, I had the weekend to think about what I was going to do next.
It was pretty emotional at work on Friday, and Monday, too, when everyone came into the office to clean up their desks. I've been working with most of these guys -- heck, I hired most of them -- for several years, and it was a lot of change to absorb in a short period of time. As you can imagine, there was a lot of shock, a lot of disillusionment, and a little anger, too. The normal stuff.

It'll pass, but not for a while.

I've been through changes like this before, but you never really get used to them. My first job out of college was at a little insurance company that ended up getting acquired by a larger insurance company. There, too, there came a day when the moving vans showed up in the parking lot, and everyone knew it was over. Unlike this time, though, we had some warning. This time was pretty abrupt.

So, I spent this week getting my job search cranked up. I've got some tips to post here on that subject, so if you happen to find yourself in similar straits, please check back from time to time or point your favorite RSS reader at my feed.

Finally, if you've been reading AppDev for a while, you'll notice that I've personalized the site a little bit. After all, I'm marketing me now, you know?

Oh, and "so long, and thanks for all the fish."

David Lambert

This is the obligatory "who is this guy and what makes him tick" page.  I'm lucky enough to have had a really broad background in software development, but all the really good bits are about connecting business and technology.  I'm comfortable with work in both areas, which makes me somewhat unique in this field, I believe.

Technically, I've run the gamut of Microsoft technologies, with most of my recent experience in the .Net stack.  I was introduced to Agile practices before they were fashionable, though I've seen variations done well and less-well a number of times since.  I got a chance to build commercial software and to grow a software team early in my career, and these remain the most exciting parts of being in software for me.

My introduction to CRM was also another big learning opportunity for me -- seeing business transformation up-close at the C-level exec point of view really reinforced why we're building software.  It was really rewarding to work with business leaders who wanted to use those CRM rollouts as opportunities to evolve their businesses.  This lesson sticks with me every day -- our software is nothing if it's not a benefit to the business.

Tip: Avoid repetitive code

I'm still slogging through the aforementioned legacy code, and I keep stumbling upon places where the original coder just worked waaaayyy too hard. Case in point: I step into a page load subroutine in this ASP.Net code, and there's a page and a half worth of this:

strVar1 = Request("Var1")
If IsDBNull(strVar1) Then strVar1 = vbNullString
strVar2 = Request("Var2")
If IsDBNull(strVar2) Then strVar2 = vbNullString

There's an easier way.I'd already written some functions to handle DBNull values when pulling records out of the database:

Public Function intFromDB(ByVal dbField As Object) As Integer
    Try
        If Not (dbField Is System.DBNull.Value) Then
            Return Convert.ToInt32(dbField)
        End If
    Catch ex As Exception
    End Try
        Return 0   'DBNull or exception
End Function
Public Function strFromDB(ByVal dbField As Object) As String
    Try
        If Not (dbField Is System.DBNull.Value) Then
            Return Convert.ToString(dbField)
        End If
    Catch ex As Exception
    End Try
    Return ""   'DBNull or exception
End Function

(There are also functions for Dates and Doubles, but you get the idea). When I use this on the lines above, I get something a little more compact:

strVar1 = strFromDB(Request("Var1"))
strVar2 = strFromDB(Request("Var2"))

Update: as I work through this conversion, I've found a couple places where I could stand to have an optional param for default value.