LinkLog: The Critical Thing About Design

I, like a lot of others in the software industry, belong to the Fred Brooks fan club. I first read The Mythical Man Month in 80s but since I was just doing my first startup,  did not fully comprehend some of the problems Brooks was talking about. After 25 years in 4 startups and a couple of dozen products, I feel that many insights Fred  Brooks provided in that book are still very valuable.

In this interview Brooks talks about design. A few nuggets:

Brooks: The critical thing about the design process is to identify your scarcest resource. Despite what you may think, that very often is not money. For example, in a NASA moon shot, money is abundant but lightness is scarce; every ounce of weight requires tons of material below. On the design of a beach vacation home, the limitation may be your ocean-front footage. You have to make sure your whole team understands what scarce resource you’re optimizing.

Great design does not come from great processes; it comes from great designers.

When I first wrote The Mythical Man-Month in 1975, I counseled programmers to “throw the first version away,” then build a second one. By the 20th-anniversary edition, I realized that constant incremental iteration is a far sounder approach. You build a quick prototype and get it in front of users to see what they do with it. You will always be surprised.

Brooks refuses to predict the future of software into the next 50 years  saying that:

All of my past predictions have been, shall we say, short-sighted.

This interview is a nice read and I am sure the book The Design of Design will be a great one. It is nice to see that some of the classics like The Mythical Man Month still sell a lot.

Does the Full-featured DBMS Scale to Web Scale?

I am a little attached to RDBMS and SQL since we worked on an engine called Integra SQL, for a decade starting in 1985. Declarative queries fascinate me. In fact declarative anything fascinates me since I think it is the only we can push complexity under the hood and have application developers deal with higher levels of abstractions.

I have been watching the NoSQL space for a while. I really don’t like that name. I have watched ORMs (object relational mappers), columnar databases, Entity stores (just another name?), document databases, Open Linked Data, RDF stores and the whole galore. There is a common thread. Large data sets, web scale computing, distributed data are some common themes.

So when I saw this link for the panel discussions on VLDB, I thought it deserved a read. I am not sure why a dated article fell into my infostream. Here is an interesting snippet.

Does the full-featured DBMS scale to web scale? Microsoft says the Azure version of SQL server does. Yahoo says they want no SQL but Hadoop and PNUTS.Twitter, Facebook, and other web names got their own discussion. Why do they not go to serious DBMS vendors for their data but make their own, like Facebook with Hive?

Who can divine the mind of the web developer? What makes them go to memcached, manually sharded MySQL, and MapReduce, walking away from the 40 years of technology invested in declarative query and ACID?

A few more interesting quotes from this page:

The appeal exerted by the diverse language/paradigm -isms on their followers seems to be based on hitting a simplification of reality that coincides with a problem in the air. MapReduce is an example of this. PHP is another. A quick fix for a present need: Scripting web servers (PHP) or processing tons of files (MapReduce).

query languages that were ever universally adopted were declarative, i.e., keyword search and SQL

It is an interesting space to watch. If this movement is the real thing, it may change a lot of the way we build data driven apps in the future.

Meta:

I found this article while I was doing some testing of InfoPro, a product we have been working on a for a few months.

A few more things you may want to lookup – couchdb, cassandra, mongodb

A Few Python Resources and a Twitter App to Track Them

I work with students quite a bit. When I talk to them about Python, they want to first know why. I tell them Why I love Python and why they should look at Python. If they are convinced, then they ask me whether I have any pointers to resources or how they can learn Python. I point them to a couple of really good free ebooks on Python. After a while the students come back and ask me whether I can give them a few problem sets.

So I started putting together a simple resource list for people interested in learning Python. I added a few tiny projects and a couple of other places they can go to get projects.

I gather a lot of information in Python since we are using it to build products, write a few tools and teach students programming.  I would like to organize them a bit and share them in these pages.  You can track this list using a simple twitter app called checkpage (Yes, we wrote this app in Python and used a popular Python web framework called Django). All you have to do is to tweet:

@checkpage start http://dorai.wordpress.com/?s=python

Check page simply checks a page at regular intervals and notifies you, if it changes. It is free. For example, you can use it to track the popular python links on delicious

@checkpage start http://delicious.com/popular/python

Good luck and leave a comment here if you have any suggestions.

The product is not available any more. Planning to merge this functionality into some of our other products.

 

Random Thoughts on Startup Ideas

I was re-reading Paul Graham’s essay on “Organic Startup Ideas”  today. Paul (as usual) gets you thinking. This essay, may in fact trigger a lot of posts. I will share one of our own experience on an organic startup idea.

The best way to come up with startup ideas is to ask yourself the question: what do you wish someone would make for you?

This is how we came up with our product InfoMinder. I was doing some research on XML towards the end of 90s. I found many interesting sites and bookmarked them. Soon I realized that I had over 300 bookmarks. I figured that even if I spend a minute on each page, it will take me about 5 hours to go through them all. So had one of my developer friends code a simple script to import the bookmarks and check pages daily and send an alert when they change.  This way I needed to visit only the pages that changed.

Once we had this simple notification scheme, we realized that just getting an alert was not enough. When I visited the changed page, I had no idea  about the actual changes on the page. We added a small feature. When we detect  changes in a page, we highlight the changes and deliver a link to the highlighted page. This worked well for a while.

Very quickly we noticed a pattern. We were getting a lot of notifications for trivial changes.  So we had to add a filter to ignore trivial changes. And we gave the product to a bunch of friends. We started getting some really useful feedback and that triggered a whole set of updates to the product.

We did one mistake, though. We kept the bookmarks private for each user. So we missed the entire social bookmarking revolution, even though we had all the features delicious had.

So here is the lesson. While you can start with a useful product idea, try it out and even find a decent number of customers, some times it take a little bit of additional inventiveness to make it a movement.

If you are are startup or thinking of doing one, certainly read Paul Graham’s essay on Organic Startup Ideas.

Don’t forget to share your stories in your blog and post a link here or just add a couple of paras in comments.

Seven Ways You Can Help a Startup

I keep meeting people in the startup community. They share one attribute – passion. Some of them have great ideas and others not so great. Some of them are good at  building their products and others are still trying to figure out how to implement their ideas or build concept prototypes. Some of them are looking for partners and others are looking for some kind of funding. Most of them can use some guidance from more experienced people.

Why should you help a startup? Think about it for a minute. If you want to help some one at all, whom would you pick?Two types of people come to my mind – students and startups. I will cover helping students in a different post later. Here is a small checklist on how you can help a startup.

  1. Talk to them. Ask them what they do. If you are a potential user/customer of their product or service, wear a customer hat and ask them questions.  This costs you very little. Depending on your level of interest and time, you may meet one startup a week or one a month. You don’t know how to get hold of startups? Leave a comment here on this blog and I will send you a list of resources.
  2. Become a guide. If you are expert marketing person, teach a tech startup how to market their products/services. Guide them on how to find their first few customers. If you are an expert in selling, share a few tips with them. If you are a designer or  programmer, you can offer to review and make suggestions.
  3. Become a beta tester. You may need to spend only a few minutes a day or an hour or two a week. Helping them test an initial product and pointing out areas where things are not very clear is a great help. Be a part of their evolution.
  4. Become an early adopter. Many startups struggle to find initial customers. They provide their service for a discount or even free in exchange for being a referral. If you can use their product or service, this may be one of the best ways of helping them.
  5. Become a part-time coach. This is the amplification of “becoming a guide”. A coach can actually provide a service for a price. Just make sure that it is something they can afford. Pick an area where you can help them effortlessly.
  6. Help them raise or earn  money. If you really, really like the startup team and have some faith in their offering, help them raise some money. If you don’t want to invest or do not have any friends interested in investing, then give them some consulting jobs so that they can earn money. Most of the software companies are bootstrapped (self funded through personal money or consulting assignments).
  7. Become a mentor. If you are a successful entrepreneur, you probably have a lot of things many startups can learn from. Find a couple of them and share your experience.

There may be many other ways of helping startups. If you have ideas, share them in the comments section.

All of us  have a responsibility to encourage and help entrepreneurs. It is not the job of few isolated angel investors, incubators and VCs. Entrepreneurs provide employment, create wealth, provided much needed products and services. Helping them may be one of those random acts of kindness. You will not regret spending time with these energetic souls. It is my new found hobby and I am enjoying it thoroughly.

What Technologies Will Have Major Impact In the Next 5 Years?

During the lightning talk session at DevCamp #dcc1, I asked the audience to predict “What Technologies Will Have Major Imact in the Next 5 Years”. Here are some answers (in no particular order):

1. Google Wave

2. HTML5 and CSS

3. iPad like devices, interactive books

4. Windows 7 Phone

5. Mobile Applications

6. Mobile Commerce

7. Augmented Reality

Add to this list if your favorite one is not here.

Added four more from Satya (see comments)

8. Small Business applications (services)

9.  Human-Machine Interaction space

10. Online Gaming. (Virtual Reality)

11.  Social Applications