“Dirt Mode” Software Development for SaaS / internet startups

Dirt Mode

Here is my 6 point definition of  “Dirt Mode” software development which suits developing new SAAS based  products. This is a practical software development style  and in some way supports the lean software development principles.

Dirt Mode
(thanks to http://www.dirtrider.com for the image)
  1. Use a pluggable and adaptive design (adaptable to alternatives in technology). Dont integrate with any one particular technology too deeply.
  2. Don’t try to create a “sophisticated”  design / architecture.  Keep it simple and lean. Assume that you are going to throw it away the next quarter.
  3. Build no automation tests and write bare minimum UTs just for your own confidence on the code. You know that you may end up throwing the technology you are using, and adopt a completely new one.  Take a look at one of my earlier posts to see why it makes sense.
  4. Use Test Driven Development like technique – don’t write automated tests, but create a detailed test plan before writing code.  Spend time review these test plans more than the code. This would ensure that the code delivered in the first go is high quality with few surprises.   You would save a lot of time in code reviews.
  5. Be crazy about measuring software quality and success after launch.  You know that there would be surprises. If you get to see issues in the way it works today, be more than ready to throw away  / re-factor any of your components and do a quick re-write (instead of trying to hammer the same thing too much).  If you miss this one, it would be too late for you to do a re-write / throw away when your customers start telling you how buggy your product is.  So you should know how you plan to check if you software is working as it is expected to in the live environment before it becomes a big issue for your customers and your business.
  6. Be very careful about what technology you choose for your product. Relying on the latest may seem cool and fashionable but in my experience its a very risky thing to do un-less 1) you are developing this product just for the fun of it and you mean to make no serious impact OR 2) You are doing it for experimentation mostly for RnD. Try to use more mature technologies which have plenty of adoption and support.

Once you get a feeling that the design and technology choices you had  made are reasonably right which would happen after a few iterations depending on your initial attempt(s) , you can then start putting in the the heavy-weight stuff like automated tests, extensive UTs, hardening the design by integrating with the technology capabilities more deeply.

Also, the point #6 only makes sense when you have a variety of choices. If you are building something that depends on the latest technology that was released yesterday,  you have no choice.  Take the plunge !

These are my thoughts, I would love to hear yours. Please share your opinions in the comments section.

Effective brainstorming:Five tips to tune your thought process

Hello Again ! Like all other posts of mine, this is no step to step guide to do anything, but a few tips that might prove useful or might bring a new perspective to look at the same thing. Here I am going to write about how you should tune your thinking in a brainstorming session to make it most productive.  The purpose of your session  may be to review an idea or a design or may be come up with a new idea or a solution.

Here are a few tips that are to do with how an individual thinks. It might take you a month or two  to be able to follow these tips:

1.  Articulate agenda, concepts, entities in one line. This is hard and may not come naturally to most of us, but this is something that pays off big time. Try describing your ideas, concepts, entities within your brainstorming session in 1 single line. Try using it and you ll realize the power this practice in clarifying and simplifying things.

2. Try to solve your problem using few entities (less than 4)  and then expand on top of them. Lets say you have a solution and you want to express it on a white-board. I would say start with very few boxes or entities involved in your solution. Generally whenever an idea strikes one’s mind, it does not have too many boxes involved. If there are too many to start with, try to brainstorm further and put them into categories, essentially trying to box multiple into one.

3. Keep track of the starting point(the initial problem) in a long of chain of thoughts. This one needs no further explanation, but in one line – this would help you cover all you wanted to in your discussion without missing any important points.

4.Choose the timing of the devil’s advocate very carefully. This is a biggie. Most of the innovative ideas get shot down in the initial stages. Give your idea or chain of thought enough time before you bring the devil into the discussion.

5. Try thinking in terms of words rather than abstract concepts. This is kind of related to the first point. But thinking in terms of words is very powerful as it enables you to widen your thinking your horizons, get further clarity and understand what you are talking about.