Design Your Business for Acquisition, Not IPO

If you are thinking about defining the exit strategy for your company focus on getting acquired, not an IPO from the very start and design your business correspondingly.

I recently read “Strategic Entrepreneurism: Shattering the Start-Up Entrepreneurial Myths” by Jon Fisher, and wanted to share my take-aways.

Your business goal shouldn’t be to go for an IPO, but you should aim for an acquisition as your target exit strategy. Acquisitions get you the most amount of return in the shortest amount of time. An IPO on the other hand gets you greater return, but it takes much longer, and the risk is also much higher. This doesn’t mean you should aim for an IPO and  settle for an acquisition, it actually means you should aim for an acquisition because it will impact how you run the company.

Partner up with carefully selected customers. Find customers for your product who are also customers of your potential acquirer or are customer your potential acquirer would also want as a customer.

In most cases  your target customer should be an enterprise (or large company) rather than individuals. You get more return from one single large customer than many small customers given the same amount customer acquisition cost/time. Also, a large customer has the added benefit that you get to ride their brand recognition. Once you have one large customer it is much easier to acquire more large and small customers, while the reverse is not true.

Partner with your customer to define the product/service together. Any book written from a Silicon Valley vet post dot-com bubble will tell you the same thing. Don’t build a business by blowing through money first, rather, focus on building the product for a specific problem for a specific customer. This is the same message I’ve heard every modern startup chant. It is also the same that is formalized by the Customer Development process in Steven Gary Blonk’s ”The Four Steps to the Epiphany” (or the short-hand version). If that’s what you are looking for, go to the bible of the process, and don’t seek it in “Strategic Entrepreneurism”

Minimize dependency on VC funding. This is rather obvious as getting external funding means that your shares are diluted, the VC’s get the preferred stocks, and you lose control of the company.  This is important because VCs want to aim for an IPO and make decisions to grow-fast, but slow-and-consistent growth is more optimal for acquisition.

Focus on consistent growth of your business. Trying to build your business quickly, that is, front-loading product/service development heavily while having negative cash-flow is high risk because the customers may not come (or come fast enough) and therefore leads to a rapid demise. Instead, make sure that your expansion is consistent and driven by reinvestment of profits. The former strategy is typically associated with trying to go for an IPO as your target, while the latter is more targeted for an acquisition. Potential acquirers obviously want a company that has consistent growth of customers and not hemorrhaging cash.

Hire veterans from potential acquirers. This obviously makes it far more obvious to the acquirer that the company will easily be able to integrate into their business post-acquisition.

If you are thinking about exit strategies and you have some basic knowledge of startups I would just recommend reading chapters 4 and 6, “Strategically Designing Your Company for Success” and “Design A Company to be Acquired.” Much of everything else is intuitive or heavily covered in other books/blogs/etc.

Scaling Up, Out, and Around

The most common question we get at PHP Fog is “is this like a VPS?” Many PHP developers have worked with shared and dedicated hosting wonder what a “cloud-based” (fully managed) stack like PHP Fog can provide. We provide unprecedented scalability, but what does that mean?

Scalability in this context is the ability for your application to increase capacity to serve web pages by easily adding more servers (scaling out), or increasing the power of each server (scaling up).

Over the past few weeks I have been working at PHP Fog as a Product Manager. PHP Fog is a new type of hosting provider for PHP applications developers to build applications the good old-fashioned way but with easy scaling, reliability, speed, and easy deployment/management compared to traditional shared/dedicated hosting. As a Product Manager, I am the conduit between the product team (i.e. the developers), and the customers; in that context I get to talk to a lot of customers. Since most PHP developers build applications hosted on shared or dedicated (“traditional”) hosting, I frequently explain the differences between traditional and cloud hosting. Many questions can be answered by this PHP Fog Technology overview page. Most customers understand reliability, easy deployment, and speed; scalability leaves them hanging. So lets look at some scenarios where scalability plays a role.

  1. Site shut-down due to surge of traffic: You have a WordPress blog hosted on a popular shared hosting provider like HostGator, BlueHost, DreamHost or RackSpace. You have an article on their you post to a popular service like Slashdot, Digg, Mashable, or Hacker News, and it actually picks up traction. You get a surge of traffic to the site, and your site gets shut down immediately. Shared hosting fail! Your site will be shut down either because you used up your bandwidth, or because your website was impacting the performance of the other websites hosted on the service.
  2. Consistent growth leads to performance degradation and forces re-design: The first scenario happens, but it’s rare enough that few plan for it. The more common scenario is that you build some kind of small website and host it on a dedicated server. The website slowly gains popularity and it starts impacting the load time. Now you have to do a ton of work to figure out where the bottlenecks are, how to alleviate them, and quite possibly re-implement some core pieces to make it scale with the consistent growth.
  3. Paying for underutilized servers: You build a SaaS application for business customers. Looking at the usage pattern you will see that between 9AM and 5PM you get thousands of hits but virtually no usage after 5PM and before 9AM the next day. In that case you have to pay for the dedicated servers to run the applications 24/7 even though most of the time they sit idly.

In these first two scenario serving websites was hindered because some limited resources were depleted… which ones?Is it the web server CPU/memory? Usually no. Typically code is fast enough that it isn’t the first bottleneck. Avoiding some obvious poor implementations will help, then there are loads of ways for optimizing the code even further.

  1. Is it bandwidth (I/O) to your web server? Yup! Web servers are limited in the number of concurrent connections they can maintain (tubes aren’t big enough). This is typically the first resource that is depleted as a single page load requires many request/responses and each one does a little bit of processing.
  2. Is it database size? Rarely. Unless you are storing large data (e.g. images, GIS) in a database, chances are you won’t be running out of space on the database. For large data where complex queries are not required typically blob storage like Amazon’s S3 are a better option as opposed to relational databases like MySQL.
  3. Is it bandwidth to your DB? Probably not! The number of requests between your app server and your database is a fraction of the number of requests the client makes to your web server. Furthermore, databases are typically hosted in the same data center with high throughput and low latency between the web server and the database.
  4. Is it the CPU/RAM/IO on the DB? Yup. With larger data sets, more complex queries, needless queries, or sharing a database, it is forced to do a lot of query execution. This means that a single request can take a longer time to process.

This is just an introduction to the concept of bottlenecks and how to alleviate those bottlenecks. Before you figure out how to scale your application, first you need to make sure that it is written to be efficient end-to-end. There are many things you can do to make a website faster. Like with any problem, first you’ll have to diagnose, then you’ll have to solve the problem. To diagnose the problem you can use tools like YSlow, Jiffy, and WebGrind. These will only help you identify where the bottlenecks are; you’ll have to identify the root cause and fix it yourself. The article “Fast PHP – effective optimisation and bottleneck detection” is a great start for helping you fix those bottlenecks. Just as a hint, some common solutions include, caching, fixing slow code, optimizing DB queries and DB design, not using shared resources, client-side optimization (e.g. javascript), and optimizing intermediate code. PHP Fog does it all of this except making changes to your code.

Once you have done this, you can increase the performance, and therefore total capacity quite significantly. Caching alone can improve application performance 50+ percent. But once you do all these things, you will still need to handle more users. This is where scalability comes into play.
We can now assume that we’ve optimized the PHP application and the corresponding MySQL database to the best of our knowledge. And it still isn’t enough. There are two options for scaling (making more resources available) for your web server.

Scaling Up/Out

First option is to scale up your application server. This means you increase the overall power of the server (CPU, memory, etc). This will provide more of the resources we were talking about before. While easy, this unfortunately isn’t a good strategy for scaling. The server is still bound by its hardware (or virtual hardware), so there is still a clear limit when you just increase the power of a single server. Furthermore, as explained before, the first bottleneck is typically the bandwidth (I/O) not the CPU or memory, so this helps some, but it’s only adding resources but in the wrong area.

When scaling up does not work any more, the only other option is scaling out. You almost always have to do this yourself. This option is not provided by any VPS or most other hosting providers. It means adding more servers to spread the traffic across numerous servers. As mentioned before the first bottleneck is typically the bandwidth (I/O) on the web server. This a mechanism to spread the load, which is done by a “load balancer”, a special kind of server which intelligently forwards requests to one of your web servers.

I’ve been focusing on scaling up and out; however, scaling down for business is equally important. People want to pay only for what they use. If you need to use 5 servers for a couple hours a day it would be great only to pay for those five servers for those couple hours only. Traditional hosting forces you to pay for the servers on a monthly basis, regardless of how much it is used.

Regardless of the type of host you are using, there are a few things you will need to do to scale out: (1) get a new server from the host provider, (2) setup and configure the server software, (3) setup your application on the server, (4) setup the load balancer to distribute the traffic.

Scaling on traditional hosting

Scaling an application on traditional hosting is very difficult. All four of the steps for scaling out are done manually each time you want to add a new application. This isn’t trivial. There is even more pain involved with managing this over time. Every time you have to deploy a new version of your application, or add more servers there is going to be a lot of time spent on making sure everything is configured and setup properly.

Scaling on cloud hosting

With “cloud-hosting”, like PHP Fog, all of those steps are completely removed from the pictured and handled by the PHP Fog infrastructure. In PHP Fog if you want to scale out from 1 to 5 servers, PHP Fog will automatically do those steps 1-4 explained above in just 30 seconds. From our management console you only have to move the scale-slider from 1 to 5 and hit the “Confirm” button. When we say “easy scaling” that’s exactly what we mean. Scaling down is equally easy. Deploying a new version is also easy, you just push a new version via git push and your code automatically gets distributed to all the servers in just 30 seconds.

Fixing the TV with some Scotch tape

I have an Samsung DLP which is probably 4 years old by now. I still like the TV as the picture is good enough and its a big tv. However, I’ve been having a problem, when I first turn it on it shuts off by itself within a first few seconds. It will continue doing this for quite a while until eventually it finally lets me watch it. This can go on for like 30 minutes.

Anyway, I figured I would just take a peak inside to see if there was something that was obviously wrong. I didn’t find anything obvious; however, I did notice there was a trigger-like switch. It appeared that it was engaged when the case was on and the little fan cover. When I was taking the case off I didn’t notice it getting disengaged, so I suspect that someone opened the TV before me (it was a floor model when I purchased it) and it might have disengaged the switch and when the case was put back on, it was never engaged.

That by the way is just a guess, I have no idea what in the world that switch does. So I started to see what the TV would do if it was engaged. The TV worked just fine when it was engaged. When it was disengaged it was having the same problem before.

When I was putting the case back on I tried to make sure that the switch was engaged; however, it was incredibly difficult… quite possibly by design. That’s where the tap comes into play. I just taped the switch so it’d be engaged.

TV appears to be working so far. It was having problems with the audio recently too. Not sure if it will fix that.

Maybe I should just buy a TV.

Seattle Tour

Here is a list of places I typically take guests who visit Seattle for the first time. I know I am missing something, so please provide feedback.

  • Fremont
    • Theo’s Chocolate tour
    • Statue of Lenin
    • Troll under the bridge
    • Gas Works Park
  • Queen Anne
    • 5 Spot Cafe (fun decor)
    • Kerry Park (view of downtown)
  • Capitol Hill
  • Pikes Public Market
    • Original Starbucks
    • Mini Donuts
    • Flowers
    • Cabaret (Burlesque) show at the Can Can
    • Gum wall
  • Woodinville
    • Wine tasting in Woodinville (Chateau Ste Michelle and Columbia)
    • Redhook Brewery Tour (excuse to get drunk for cheap)
  • Underground Tour
  • Bainbridge Island (ferry ride)
  • Day trip to Vancouver or Portland
  • Space Needle (very touristy and kind of expensive)

 

Maple Bacon Wrapped Chicken with Basil

This is a recipe that I totally invented and I don’t remember exactly what I made it with, though I do remember that it was damn tasty. It is basically a piece of chicken with a half-leaf of basil wrapped in bacon and skewered with a toothpick. It was coated with brown sugar, maple syrup and either garlic or shallots (don’t remember exactly).

 

Rosemary Roasted Pork Tenderloin

A pork tenderloin, from Oslen Farms, cooked on top of crushed garlic and rosemary topped with two strips of bacon and rubbed in Dijon mustard, rosemary and garlic. On the side had some sun chokes layered with cheese. There was also some sliced zucchini with spices. This was the most successful pork tenderloin I have ever cooked. It was juicy and tender. This was one of the times that I actually thought the dish came out looking and tasting as good as it might from a high end restaurant.

Rosemary Pork Tenderloin recipe from Food Network.

Today’s Startup Lessons

Today I had the opportunity to meet with two people who have been entrepreneurs. One was with my manager at Microsoft, Justin Smith, and the other was Nikhil George of MobiSante (also a former officemate at MS). I asked both of them for advice, just as I have been with every other person I’ve been meeting who’s had experience as an entrepreneur. Since I met with Justin and Nikhil today, I’d like to share some of the wisdom those guys shared with me.

I’m summarizing only a few key points which are immediately relevant; some will be more relevant in later stages of the company. In the process of these meetings I also observed the alignment with Pitching Hacks and The 4 Steps to the Epiphany. If you haven’t read those, I highly recommend both.

  1. Move from Details to People: As a technical founder you can really get deep into the details of the business. In running a business it is equally (if not more) important to consider the people and your relationships with them and their interests.
  2. Cultivate advisors: You will need help and that help can come from advisors. Find people with expertise in areas relevant to your business. For example, if you are building a caffeinated peanut butter get and advisor who knows the peanut butter industry, or someone who is in the supply chain, etc.
  3. Cash flow is king: Cash flow (in flow in particular) gives life to your company. You need incoming cash flow either from customers or from investors to build the value for customers. This reminds of an interesting point Eugene Osovetsky of WebServious pointed out, he said that 1/3 of his time is spent on building product, 1/3 on building customers, and 1/3 on getting funding.
  4. Do due diligence: Get a good lawyer to protect your intellectual property (IP), setup your corporation, etc. Get an accountant, tell them about your business needs, ask them how to setup bookkeeping, and setup the process.
  5. Prepare for an emotional roller-coaster: One day you’ll be sailing the Cayman Islands with six strippers on a private yacht and on another day you’ll be realizing that the business you have poured your soul into is a failure.
  6. Expect more from lawyers and investors: While a lawyer can provide legal counseling and investors can provide funding, they should bring a whole lot more to the table. Lawyers have great connections to investors and they have data they only get. VCs should provide advice, connections, leads, etc. not just the funding.

Facebook’s new login for the web could ruffle feathers (not mine)

I recently came across this article “Facebook’s new login for the web could ruffle feathers” which highlights a new feature that enables website developers to create registration forms which are populated automatically with user data.

Facebook Registration Form

What bother’s me is that people actually might get upset about this as the article suggest. I want to point out that this is an old concept, Facebook might just be the first to get it right. Exhibit A: OpenID Simple Registration Extension 1.0 spec. Yes, that is correct, June 30 2006. That’s more than four years before Facebook.

Open ID adoption sucked in comparison to Facebook. As insane as it sounds I had both the OpenID and Facebook identity protocols memorized (I wrote the specs for ACS v2 support). Who wants to remember a URL as their identifier, and what developer wants to implement the Discover and Yadis protocol. Facebook just knows how to appeal to users (probably why they have 500,000,000+) and to developers (e.g. User Registration can be achieved in only a couple lines of code).

16 Questions For Better SaaS Companies and Azure AppFabric

I recently came across the article “The @Dharmesh Test: 16 Questions For Better SaaS Companies“. I worked on one very cloud system, the Azure AppFabric. So I started asking myself these questions about the AppFabric, even though it is actually a PaaS, not SaaS. Don’t expect any secrets about the services, it is all from public knowledge.

1. Is there exactly one version of your software that services all users?
Absolutely. There is one code base for all.

2. Do you have a free trial
No, not in production. I’ve been putting pressure on the marketing team to at least provide limited free additions to digerati and educators. Other than the production release, there is a free version for the Labs/CTP release, which is a non-production environment with experimental features.

3. Do you track key metrics like CAC, LTV, and cancellation rate?
I won’t say what is and isn’t being tracked, but I will say that the emphasis isn’t on making money for Microsoft, but it is for ensuring the best performance and highest uptime.

4. Are your prices published on your website?
Yes, but frankly pricing is incredibly cryptic. I challenge you to understand the AppFabric pricing model for the Service Bus (the Access Control Service is strait forward). Nobody can really explain it very well. I believe this is the teams greatest failure, as the pricing model was designed to enable the services to be measurable and scalable for the team, not for the customer.

5. Can people start paying you (become customers) without interacting with a human?
Absolutely. Though the sign-up process requires like 20 steps. It’s a work in progress.

6. Do you make more money from users that are getting more value?
No, there is exactly one consumption/price ration and no special features. This is probably a win because it would further complicate the already complicated model.

7. Does your application have a simple, clean API?
N/A. AppFabric is a PaaS, not SaaS, so the whole thing is an API. I would consider it simple though, it is designed for the advanced developers. The ACS service though is working hard to making the APIs much simpler and cross-platform compatible.

8. Can customers export their data out of your system?
Yes

9. Can you deploy (and rollback) a new version of the software in one-step without downtime?
Yes. A large chunk of engineering efforts for building AppFabric focused on building the operations, not the technology itself. The deployment process is incredible.

10. Is there an online community where users can interact with your team and with other users?
Yes. There are forums, email aliases to the entire team, and we even have dedicated “field” people to work with customers.

11. Do new developers commit code on their first day at work?
Theoretically they could if the check-in is small enough. There are a lot of habits new developers have to get used to, including code reviews, the check-in process and tools, etc. There is a learning curve, but it’s a good learning curve as engineering practices are top-notch.

12. Do you release code to production at least once a month?
No, but it goes out every 2-3 months. Still not bad.

13. Do you maintain a centralized backlog of new product ideas, bugs, and issues?
Damn right we do. The Feature PMs (my role) is responsible for all that goodness.

14. Do you regularly run A/B tests?
N/A I think this is for SaaS moreso than PaaS. We just talk to customers to see what they have to say.

15. Do you invest in design and user experience?
Yes, but not enough. One of the great challenges about working on PaaS is that it is designed by developers for developers, so it is incredibly technical. There are few people that care about UX. I happen to be one of the people that does care and I personally helped make some of the improvements in the Portal.

16. Does your company or product have a personality?
This is the squishiest of the questions, and I don’t know how to answer that.

I Quit Microsoft

I quit Microsoft. This means I am saying good bye to many things: stock options, stock awards, awesome health care, incredible gym membership, 401K contribution matching, a handsome salary, and most importantly, working with some of the smartest people in the world. I can’t emphasize the people enough. I get all the good things, I work side-by-side with the industry leaders in cloud computing and federated identity, they are driven, dependable, and much more… and none of the bad things, I don’t have to deal with politics, gossip, attitudes, or any of the typical office BS.

The economy is poor, unemployment is high, and I have a cushy job. I’m starting to look crazy for quitting. This warrants two questions: “why are you quitting?” and “what’s next?

Why are you quitting? I’m quitting because it’s been my dream to have my own startup since I was 13-years-old.

To anyone who knows me, this comes as no surprise. I started my first consulting business when I was 16-years-old with my allowance money. I’ve had other profitable businesses with customers as big as the former Seattle Sonics and Universal Map Inc. I started teaching myself to program while I was still in elementary school; by the time I was in high school I programmed my own boot sector in assembly, plugin for 3D Studio Max, stereoscopic 3D imagine processing, Linux drivers, automated blind TCP/IP spoofing attack, and CGI in C++ (before PHP and ASP were around). Ahhh, the good ’ol’ hacking days. You get the picture: I love building what people want (and want to pay for) and I love building software.

It’s clear that I want to build a company. Building a great company isn’t something that can be done in the evenings; especially not while working for a company like Microsoft which already demands so much attention. I need to dedicate myself beyond the standard 9 to 5 to succeed.

What’s next? I don’t know exactly, but there are a few things that I do know.

I know I have passion for all the right things. While I am passionate about building software people want (and want to pay for), I also want to build something that goes beyond just my immediate talents. I want to build a machine which adds value to people and organizations, makes the world a better place, and makes a profit as a result. (Two interesting related articles: “In Defense of Entrepreneurial Passion” and “Why ‘Be Passionate’ is awful advice”).

I know that visionary companies were started without a product. One such example is Sony from “Built to Last”. I don’t need a product and I don’t need early success to build a company.

I know that I can listen to customers. I deeply buy into investing in customer development per Steven Blanks “The Four Steps to the Epiphany” before investing in product development. That is, I will commit to having customers lined up with checks in hand to buy my product before I even build the product.

I know that I can build software. I have been writing code for more than half of my life. I’ve also been responsible managing product development at Microsoft for over five years. I can deliver the minimal viable product on schedule with limited resources, and iterate rapidly to evolve the product. Relatively speaking, this is the easy part.

Having said all that, I haven’t really answered the question.

My options right now are endless. There are really a number of avenues I will be entertaining. First, I have a few product ideas that I am entertaining; I will drive those product ideas through the customer development process until I have something that sticks. Secondly, I will continue working with some friends on other ideas and exploring various markets and talking to people to see if there are opportunities outside of the scope of my current product ideas. Lastly, I would also consider working for another startup if I believe in the company and I get to exercise my desire to build something beyond me.

My last day at Microsoft is to be determined, but will be no later than Feb 25th.

Follow

Get every new post delivered to your Inbox.