← Back to posts

Startup on a shoestring: building a poor man's CRM yourself

One of the questions that web startup founders often face early on when starting a web company without a big - or any - budget is: which tools to build, and which tools to buy? As a developer, in p...

One of the questions that web startup founders often face early on when starting a web company without a big – or any – budget is: which tools to build, and which tools to buy? As a developer, in principle, you can build at least a basic web-based version of just about any business tool in-house: it’s tempting, but the question is one of time and priority.

For example, while you can implement your own web site analytics, it makes more business sense to leave this bit to Google Analytics, which is free and powerful. For good measure, you may want to pump every page view in a table yourself, especially at the start, to be absolutely certain that you have correct figures. But don’t build that fancy dashboard for that data just yet, and focus on your product instead. (I know you want charts, I love them too, but PhpMyAdmin can chart query results too!)

Same goes for mass mailing (MailChimp has a free plan) for your news letter, having an online chat on your site (e.g. ClickDesk has a free plan). Then there’s a couple of other tasks that, in a first stage, a spreadsheet can help you just fine: creating invoices, keeping track of your revenue and expenses…

When your startup is aimed at businesses though, I have found that there is one part of your toolset that it may make sense to throw together yourself: a Customer Relationship Management tool, or CRM in short. This is basically a database that you use to organize all your activities and conversations with potential customers, so you don’t forget about anybody, and can have a clear view at all time what next to do, and how well you are doing.

The reasons hacking your own CRM together may be a good idea

The reasons I believe CRM is one of those business tools you may want to whip up yourself is:

  • It’s indispensable to maintain your sanity while talking with different early customers (once you have a first version of your product online, you are talking to potential customers and not just focusing on your site, right?).
  • Existing tools tend to be either very expensive, a bit too bloated, or both.
  • How you want to structure and manipulate the data is kinda hard to fit into the ‘spreadsheet’ mold.
  • A basic version that you whip up in an afternoon has huge value.
  • A CRM gains enormous value from being ‘close’ to your app-specific data (your users and accounts). Syncing your data with an external CRM can take up almost as much of your time (studying documentation…) as building an entire basic CRM yourself where you already intimately know the code, so why bother.

Ingredients of a minimum viable CRM

The most basic CRM, but one that already has enormous value, only requires very few tables and fields. Also, but this is probably something very few people would agree with: it’s ok if it is ugly. Here’s a snap shot of some entries in the home-brewen CRM of MyShoppingTab:

Original image: Screen Shot 2013-12-31 at 15.36.18 — unavailable in the surviving archive.

First there are 2 ‘settings’ pieces of data that you could put in a table if you wish, but they change so rarely you could also hard code them without much hassle, saving you 3 pieces of CRUD work:

  1. Sales reps. People who do the selling and who leads are ‘assigned’ to. This is probably just you and/or your co-founder at the early stage of your startup. And anyway, you can just use the users of your app with admin rights.
  2. Possible activities done on a lead. This is typically an ENUM field. I like to use: ‘reached out’,'conversation’,'demo’,'created account’,'sent quote’,'sent invoice’.
  3. Lifecycle stages. These allow you to prioritize on leads, and get a clear view on how well you are doing. I tend to use: ‘unknown’,'test’,'cold’,'warm’,'closed won’,'closed lost’.
  4. Possible lead sources. Another ENUM field: ’found myself online’,'newsletter signup’,'trial signup’,'referral’…

Ok, that’s the ‘setup’, now for the actual living,breathing data:

  1. Leads. This is the central table: all people you want to talk to, or are talking to, come here. In its most ‘bare’ version, it contains these fields:
    - creation date
    - sales rep ‘owning’ the lead
    - lead stage (see above)
    - name of the company
    - name of your contact at the company
    - e-mail of your contact
    - phone of your contact
    - lead source (see above)
    - an extra freeform text field to add additional details like the type of company, who initially referred you to the lead, its web site etc etc… Don’t try to structure these things too much: what you have for each lead tends to vary.
  2. Activities. This is where you log what has happened, and what should happen, on each lead. A minimal structure for this table would be:
    - ID of the lead it is connected to
    - type of activity (see above)
    - creation date
    - todo/done date
    - whether the activity is a TODO or DONE
  3. Deals. For the ‘closed won’ leads, i.e. customers. This is typically something you can infer from your main app database, but it’s handy to explicitely have it in your CRM, to be able to do at least a very crude revenue analysis, and to have an extra checks and balances if there are no errors between your business and your account plans.
    - ID of the lead it is connected to.
    - if it is a subscription, when it starts and expires.
    - deal value.

… And that’s about it! You’ll typically want to add some extra fields depending on the specifics of your business, links to immediately view the account of the lead, etc… But it shouldn’t be much more.

The user interface

To be honest, if your web app is built in Php and MySQL,  PhpMyAdmin does not make for too bad a CRM interface! You can bookmark queries, add,insert, update and search leads easily, etc. And again, you can easily create charts right within recent versions of PhpMyAdmin – I’ve found myself doing this more and more lately.

However, where’s the fun in that? Since your web app no doubt already has a private admin backend, and a standard design for ‘list of items that the user can create, read, update and delete (CRUD)’, might as well reuse that.

Wrapping it up

Ok, that’s about the gist of it. I was tempted to put some sample code here as well, but the fact is that you want this to work closely with your existing code and database conventions, since one of the benefits of building it yourself is that you don’t have to dive into developer documentation for an external tool. So I won’t.

Some final things to bear in mind if you take this route is: best not to get too attached to this. An internal app can be a fun ‘break’ from working on your main product, but if it’s costing you more than, say, one or two days, you’re taking too much precious coding time away from your main app code.

What’s more, if your startup takes off and starts to get significant amounts of revenue, leads, and a full-blown sales team, investing in a ‘real’ commercial CRM like SalesForce is definitely worth it, if only for the easy customization and reporting these tend to have. So be prepared to abandon your internal nifty CRM somewhere along the way.

So, conclusion: I think in the very early stages of a start-up, especially when your budget is extremely tight, a CRM is one of the tools that is worth whipping up yourself rather than spending money and time on an external tool.