My Startup, a Retrospective
rdegges.com
rdegges.com
One thing that was underemphasized: They built in response to actual need, which was great. If you click through to the announcement post [1], he explains that he had spent 4 years doing telephony stuff, and was always bothered by the lack of an API.
Good for them for taking their small proof of need and building small. And then using that to get more proof of need as a way to justify further investment. That's in contrast to a classic startup mistake, which is to jump in and build something you just think other people need.
>"I think the single largest mistake we made was to not invest more time into OpenCNAM as it was growing. Instead of devoting time to other projects, we should have doubled down and focused on developing the product even more, and made it into the best possible product.
At the time, it seemed like a good idea -- but in retrospect, I believe that if we would have really focused on adding more features to the API service, cleaning up the user dashboard, and fixing some UI elements -- we could have won a lot more potential customers over."
While he acknowledges that this is only apparent in hindsight, he does not seem to give himself credit for diversifying his risk portfolio at the early stage, when success was uncertain. It may be that doubling down earlier would have put the business in a better situation now, but that does not mean the expected outcome of doubling down was better than the expected outcome of maintaining parallel projects.
Since they ended up starting their re-write just weeks after launch- This is a great example of how the opposite of over-engineering is not adequately planning for success. Startup teams tend to naturally learn towards one or the other extreme and need to fight for balance. I personally try to remind myself of this fact as much as possible :)
"we started having issues keeping up with customer demand"
"To keep things running smoothly, I scaled up our Heroku Dynos, but quickly realized that things needed to be rewritten as soon as possible to avoid major problems."
What you are saying is possible, by the article suggests they either did have problems serving customers or there was major risk of that happening...
We did the rewrite to avoid problems, and by the time we relaunched our new Flask backend we were struggling to support customer demand. All in all, NewRelic really helped save us here ^^
Heroku has always been great for us!
I'm always a bit surprised about the RapGenius stuff because their problem is not really a Heroku specific issue, IMO. If you're running code on Heroku (which uses random load balancing), you need to have a proper multi-threaded web server to serve requests concurrently.
In our situation, we were able to service many concurrent requests per dyno, and maintained very low response times (10ms or less), in most cases.
To that end, he also created a fantastic Django template `django-skel`[0] that uses good industry-standard practices. As a newbie, `django-skel` helped me understand code modularity and the importance of organizing your code in more ways than one.
To top it all, Randall is a thoroughly nice guy to chat with. I'm glad OpenCNAM is growing and I wish it continues to grow for a long, long time to come. :)
I'm delighted OpenCNAM has done so well and I wish him the best in the future. :-)
I currently work on a Django project and I'm pushing tastypie to its limit as well. Working on switching to django-rest-framework.
At a high level, what does your flask service architecture look like? I dug through your blog but couldn't find much. I'm particularly curious how you handled migrating from a django database and schema to whatever you ended up using.
- opencnam-accounts (user accounts, and billing API) - opencnam-www (the public facing site and web portal) - opencnam-api (the developer API service)
We're currently splitting the backend up into several other components as well, so in the end-game things will look more like this:
- opencnam-www - opencnam-api - opencnam-auth (or possibly use Stormpath) - opencnam-billing - opencnam-email (handling drip email, etc.) - opencnam-logs (all logging information, metrics) - opencnam-delivery (telco CNAM retrieval stuff) - opencnam-storage (our CNAM storage product, still in development)
Each of the services basically gets their own Heroku app, their own NewRelic monitoring, and their own resources (cache, database (if necessary), etc.).
I can't even begin to say how helpful having multiple small apps actually is. Our codebase shrunk in size (total lines of code), became WAY more maintainable, way simpler, and way nicer in general.
As a side effect, it's also a lot easier to do teamwork type stuff, since you can have one person work on one service for a while, etc. Makes keeping things running smoothly really easy.
I wrote a bit about this in some other blog posts a while ago:
- http://www.rdegges.com/service-oriented-side-effects/ - http://www.rdegges.com/service-oriented-problems/
Right now we get CNAM from the authorative telco sources.
He searched for a repeatable and scalable business model. He found it. He scaled. He delivered excellent ROI to his investors. That's a startup.
People who think it's not real if it doesn't involve angels and VCs and TechCrunch write-ups and whatnot are fashion victims. Pity them.
Below you will find a comment by the OP that suggests he is going to really scale the business by expanding the offering and focusing on it. Probably using the revenue he is generating. Which is awesome — no need for VCs for his business as it was profitable from day 2. For this next tier of growth though, it probably will be a startup, one where he isn't sure whether the investment will pay off or not. If you ask me, that is the essence. Once you've figured that out, it isn't really a startup anymore.
In the end we had all partners (3 of us), and a full time employee -- so it was fairly big I'd say (all with profitability, etc. from day one).
Along the way we could have definitely hired more engineers and grown the team, but we decided to treat it as a passive business after we got some big successes and didn't think hiring / etc. would be necessary (at least for a while).
If I could go back in time and re-do that, I think the company would be much larger now (and more successful) had we scaled our engineering team early on with the money we got, and tried to shoot for quicker growth.
It seems scalable and repeatable enough as it is, to the point where I'm not sure what VC money and an enterprise sales team would add.