Today is a big day for me for two reasons:
1) One year ago today, I moved with my family to Silicon Valley from Washington, DC, a city we love and miss very much.2) Also today, DotNetNuke Corp., the company I co-founded, announced that we have closed on our Series A round of venture funding.Adjusting to Silicon Valley has had its challenges. Having to drive everywhere after getting around mostly on DC's Metro was the hardest adjustment. Our friends, DC's breathtakingly beautiful monuments, abundance of fantastic (and free) museums and overall character of the city are all missed. That my daughters were both born at George Washington University hospital in DC means that my family has an unbreakable bond with the city and we expect to live there again in the future (perhaps when I run for Congress, a dream of mine).The past year in Mountain View has been a year of discovering California, rekindling old friendships, making new ones, enjoying great weather and the many playgrounds in this area. We are slowly adapting and beginning to enjoy what Silicon Valley has to offer. I'll be candid, reaching the funding milestone is certainly going to make a difference in terms of quality of life.All startup entrepreneurs make sacrifices to see their dreams come true. In this business, it's called "skin in the game." I can say unequivocally that my co-founders (Shaun Walker, Joe Brinkman and Scott Willhite) and I have a lot of skin (and probably additional layers) in this game. Building a company based on a free, Open Source product is challenging, to say the very least. But we had a vision and continued to persist despite the challenges we encountered. Raising growth capital was one of them.In the summer of 2007, Shaun and I made several trips to Silicon Valley to meet with VC's. Everything that followed was textbook venture fundraising. We had many positive meetings but no takers. Our team quickly realized that we were missing three things:We decided to address these three issues as best and as quickly as we could.
Since I had the lead role in the fundraising process and did not have significant constraints on where my family lived, moving here was a no-brainer for me. While it was a major move, I was determined to do what needed to be done to ensure the success and longevity of our business. I did not see any way we could be successful at raising capital without having a local presence in Silicon Valley. Savi, my wife was supportive as ever in this decision. The other co-founders and I agreed on a course of action. I took on the role of CEO with a charge of focusing on raising capital and prepared for the move.But there were more challenges. Savi was pregnant with our second child due in late October. Gia, our first daughter, was three years old at the time and we had to find a Montessori in Silicon Valley that met the standards for teaching and cultural diversity that we had become accustomed to in DC. Also, since we paid our own health insurance, we could not make the move until after the baby was born, otherwise we would have to assume the full cost of the delivery -- totally impossible for us (and most people, I would imagine). We decided to wait until January 2008 to move. We made a couple of trips to the Bay Area, checked out schools and settled on a Montessori in Mountain View. With that done, it was now time to find housing. We did not find anything suitable during our visits. It was extremely challenging trying to find housing in Silicon Valley that met our requirements remotely from DC. A couple of these requirements greatly restricted our options and I remember checking CraigsList every 20 mins., all day, hoping to find a place we could call home. We were getting very frustrated and then things took a turn for the worse.On the evening of Sept. 5, I accompanied Savi for a routine pre-natal check-up, while my parents who were visiting from India at the time, watched Gia. The news we got from the doctor was scary. We were told that we had to go straight to the hospital as our baby was going to arrive five weeks ahead of schedule. With a great sense of fear, we got Savi admitted and began a very long night. In the morning, the chief resident told us that the baby was in distress and they had to deliver. Kaamya was born on Sept. 6. I got to hold her for one minute and then she was taken to the NICU (Neo-natal Intensive Care Unit). The next 12 days were a blur. Savi and I took turns keeping her company in the NICU hoping and praying that she would be OK. Our prayers were answered. Today, Kaamya is a healthy, happy and active one-year-old.After Kaamya's birth, we were able to move to Silicon Valley a little sooner than planned. Housing was still an issue. On a whim, Savi looked at short-term rentals, and found a place in Mountain View that matched all our criteria, but was only available for 3-6 months. My brother-in-law who lives in San Jose checked out the place, we found it acceptable and signed the lease. We decided that we would move immediately after my Las Vegas trip for Open Force '07. Thus, on Nov. 25, 2007, we arrived in Silicon Valley.I immediately began connecting with and setting-up meetings with people/firms to enable progress on the fundraising front and also to identify and work with business advisors and potential additions to our management team. Larry Augustin, founder of VA Linux and one of the most respected names in the Open Source world, was already our business advisor. He referred me to several exceptional people and firms, one of them being Navin Nagiah. At the time, Navin was CEO of Cignex, a company that specialized in services around Open Source CMS solutions. I met Navin at a Starbucks in San Jose on Dec. 18, 2007. Almost immediately, Navin saw DotNetNuke's tremendous potential. I too saw how Navin's experience in the Open Source Enterprise CMS space would be valuable for DotNetNuke Corp. We started meeting regularly 2-3 evenings a week. Within a couple of months, Navin formally became our business advisor.Working closely together, and with the support and input of the other co-founders, we developed a solid business model and investor pitch. We were a little slow off the blocks, but with all three of the missing items addressed, we were confident that getting funded was an inevitability. We made rapid progress through the summer culminating in today's announcement. (I have been working on collecting my thoughts around what we learned in the process and will blog about it in the future.)I am incredibly gratified to have reached this major milestone. There are many, many people who made it possible, many of them are behind the scenes. To all of them, I am grateful. A special thanks to my family and the families of my co-founders, who stood by us and supported us through thick and thin (mostly thin) as we made it to this point. And thanks to everyone in the DotNetNuke community who have time and again demonstrated support for DotNetNuke Corp. and confidence in our product -- DotNetNuke.This is the first step in a journey. We have a great team and I am looking forward to doing my part in building a very successful and profitable company while making DotNetNuke the platform of choice for .NET-based websites. I am very excited for the future.I have been thinking on and off about Posterous since I first used it and decided to put my thoughts down in a post. Nischal asked the question "Would you stick to Posterous?" My answer today is "No" for the simple reason that it's difficult to make the commitment to use Posterous as my primary blog until custom domains are supported. Redirects just don't cut it.
Also, the brutally honest truth is that Posterous is on borrowed time. If the service does not start innovating rapidly, get huge user adoption and then create a significant reason for users to stay, it will soon become irrelevant. Its primary feature -- email to blog -- is not enough of a differentiator because technically it is not very difficult to implement and other blog engines will be quick to offer it to their users (some already do).I think Posterous should be thinking about ways in which they can continue to stay relevant and even attractive to bloggers by doing the exact opposite of what they are doing right now. Instead of trying to be a blogging platform, they ought to focus on being an email publishing utility very much like FaceBook is positioned as a social utility. The AutoPosting capabilities available on the service are a great way to start, but they could be so much more. Instead of just supporting vanilla posts with title and body and hosting the photos/media here, they should go all out and implement email to MetaWebLog and other API's. Being able to use email to make a complete, detailed post to WordPress, DasBlog and other blogging engines would be great. Add template, tagging and categorization and it starts to get really interesting.And while they are at it, they should do it for not just 10, but 100's of other services. Basically, email enable every ProgrammableWeb.com API for which email posting makes sense and that has any kind of traction. That would be killer and greatly increase the barriers for competition as users don't like changing habits unless there is a very good reason. Imagine "posterous" becoming a verb for "posting something to any web service using email." I think this would be a bigger opportunity for the company and allow it to become truly indispensable compared to where it is now -- a "me too" blogging platform which re-posts to other services.
Bottom line, forget the blogging and focus on the email.
Last month, a few days before my birthday, I decided that I needed to acquire some new skills and do some new things, while broadening my knowledge of things I already know (i.e. software development). More importantly, I wanted to not spend as much time in front of the computer. Instead of posting about it and then hoping to follow through, I decided to do the opposite. I started the process and am now happy to report that I have made good progress in five areas:
1) Building Stuff: I love working with tools and making things. My first project was to build a swing set for my daughters. I got lumber from Lowe's and built one from scratch. My kids love it and it's great not having to drive down to the playground every day.
My second project is to build earth boxes, five to be precise. Savi wants to grow vegetables and the earth boxes are the perfect solution. It's labor intensive to build one, but not very difficult. I have completed one and am working on the rest.
2) Baking: I love bread but rarely find bread I like at the store. Solution -- bake my own. Savi got me a bread-maker for my birthday and I love it. So far I have baked a loaf of plain, white bread and yesterday, I baked a walnut-raisin loaf. I am not much of a cook and making eggs is the extent of my culinary expertise. But after baking this bread, I am beginning to see why so many people love to cook. It is quite relaxing and to have an end product that family and friends can enjoy is quite rewarding.
3) Mixing: As I have mentioned on this blog before, I am an avid fan of A/V. Until about 2003, one of my favorite things to do was to V.J. parties and weddings for friends. I never did it for money as then it would become work and stop being fun. After moving to DC in 2003, I never did any gigs until last week. Friday (8/8/08), my friends Todd and Diana got married in Napa. My daughter Gia was the flower girl and I had the honor of providing the entertainment for the wedding. Since I did not want to abandon the wife and kids during the reception, I did something novel (for me) -- I created a video mix on DVD for the entire evening's entertainment. Everything from the bride/groom dances to the various dance sets were all on DVD and all I had to do was press Play. I used an 80's theme and mixed lots of music videos from the decade along with an intro scene from "Back to the Future," Todd's favorite movie. I enjoyed making the mix so much, that I am now motivated to create more DVD mixes of my kids photos/videos for family back in India.
4) Software: This item is more about broadening my skills beyond ASP.Net and DotNetNuke. I have been an avid fan of Google AppEngine since the day it went live. Since I had no prior knowledge of Python or Django, I had to come up to speed fast. I attended a few meet-ups at Google and picked-up a copy of Python Power. Between the book and the meet-ups and just tinkering with code, I now have progressed far enough to create fairly advanced apps on AppEngine in Python. I plan on continuing to learn more advanced concepts and focus on developing a single application that will also be the basis of my AppEngine presentation at the DotNetNuke OpenForce / SDN Conference in Amsterdam this October. More about this application in a future post.
5) Teaching: I love to teach kids. It doesn't matter what the subject matter is, it's just fun to be able to share and help them learn. This summer, I have undertaken to teach my 12-year-old nephew how to program, continuing indefinitely. After researching the topic, I settled on Phrogram as the language to use for instruction. So far, I am quite impressed with everything about the IDE and the language. I setup a virtual machine, put it on a DVD and mailed it to him (he is not allowed to use the Internet other than for class assignments). He was able to install VPC, get the virtual machine up and running and write his first Phrogram. I will have some detailed blog posts about my experience on this in the near future also.
Yes, it's true that three of the five things require time in front of the computer. But they still represent a shift and have helped me achieve my goals.
Great music and fireworks at the Mountain View July 4 celebration.
As I go through the process of getting familiar with Google AppEngine, I'll post interesting things I learn (mostly so I can find them later). Here's a quick note on GQL query syntax:
Assuming a model called Customer, you can use:
1) customers = db.GqlQuery("SELECT * FROM Customer ORDER BY name LIMIT 10")
2) And since GQL queries always return data objects, you can skip the SELECT * and abbreviate to:
customers = Customer.gql("ORDER BY name LIMIT 10")
3) You can also use parameters like this:
customers = Customer.gql("WHERE name = :1 ORDER BY name LIMIT 10", "Smith")
4) And finally, #3 with named parameters like this:
customers = Customer.gql("WHERE name= :person ORDER BY name LIMIT 10", person="Smith")