Sunday, March 23, 2014

5 points to remember while coding for a startup project

When you plan to code up an application for a start up, the best part is there will be a lot of excitement. What you build may be a trendsetter or a game changer. The thought itself is motivating and elevates the energy level. It opens up a lot of possibilities and a chance to explore and learn new areas.

Well that's the good part of it. And there will be an other side too to it.This assignment can be a lot more challenging than a normal project. Implementing a startup solution needs much more discipline and planning because of factors like time, lack of direction, budget and frequent iterations and pivots.

Here is a summary of my thoughts on the essential guidelines for a developer on a startup project  based on my experience with the technology and application development for startup.


1. Understand the business and primary goals.

This is an important factor on any kind of project. But in the case of startups this is much more important as there is narrow tolerance for mistakes. As a developer, you need to try  and understand the business and purpose of the application very well and the goal it is trying to serve. This helps in  setting priority while working on different components of the app. The data mining algorithm for an analytic tool is much more important than adding bells and whistles in its user profile section.

Also understanding the purpose helps in creating better test scenarios that will help in critical validation of the project.


2. Plan for quick releases and agile development.

There will be a conventional SDLC model with every organisation. The development team also will always tend to stick with it as it keeps them in there comfort zone. But a start up application demands much more agility. There will be an MVP stage mostly before the entire project completion and there will be many subsequent release cycles before the development is complete.  Some areas need to be re-coded and the UI's need to be redone based on beta customer feedback. Sometimes a total new functionality need to be implemented in a matter of days.This might not be an ideal scenario for a developer.

Well, there is no point in complaining about it.Accept it. Agility is part and parcel of startup projects. Only possible solution is to plan it as much as you can. Keep hooks in the code for change.  Keep a stand by resource in backup to manage the need to slog and be ready to scrap a portion of your hard worked module if the business side demands so.


3. Minimize experiments with the language.

Consider that you are an expert in LAMP or ROR and you are planning to expand your skill in NodeJS ( as it is the hot keyword among web developer community now). Your plan in most cases will be to code a portion of the next project if not all in Node. Considering the capabilities of node, it might not be a bad decision as well. But if the next project happen to be an advanced startup application my suggestion is to save your plans for next project after this and select the LAMP stack, in which you are a rockstar, for this project. The new language reduces your speed and efficiency as there is a learning curve. There is chance to make mistakes in method and implementation as you are still a beginner with the new technology. Both these factors may turn out to be critical blows for the project which cannot afford many. 


4. Code less but clean and reuse more.

The MVP' s are not meant to be complete functionally. Beta releases can afford a few unfinished areas if primary flow is working. The critical factor is time and cost vs effort. So for startup projects it is always important to identify key areas and spend effort based on this. You can keep stubs for some logics which can be coded up later. The optimized logic for handling a lakh concurrent  users  can be implemented later once the user base increases, if it takes a lot of time and effort. Think what need to be done in later stages and leave hooks for it and proceed.

 At the same time it is important to keep the code clean, manageable, reusable and structured. There may be a lot of change in subsequent phases which will be a pain to accommodate if the code base is too rigid. If there is enough generalization in the core entities and logics, new features can be inserted in like a knife in butter. 


5. Keep the system light and flexible.

Implement the minimum essential logics in the early stages while on startup projects. Expect pivots in requirements and plan accordingly. Those areas which are not functionally scoped out completely or has a higher chance for modification can be kept at the back of the priority queue or can be done in a minimal way avoiding fine tuning and optimization. 

Well, these are only few of the considerations. There can be much more. If you have a few suggestions share it too.

Monday, March 3, 2014

Why a startup should target a Minimum Viable Product ( MVP) First

The driving factor behind a startup in most cases will be a  great idea (well..good idea if not great), a solution for a gap existing in the targeted domain. An idea which will be shaped into a product. But all good products/ideas might not take off. There is a key factor called user adoption which determines your success chances. You need to caliberate your product to improve its user adoption chances. What's the best way? Any guess... Well getting feedback from your pilot customers iteratively is a good way.
It is always better to start engaging the customers early and validate your product with them.
If you agree with me so far, spend some more time to understand the keyword MVP.
 A Minimum Viable Product ( MVP)  is a practice by which a startup can reach there pilot customers with the core of your new product  developed with minimum effort (cost/resource) and in a very short time instead of complete solution in one shot. The product can be validated with its real users by this way and evolved further with the customers feedback iteratively.
Suppose the product that you are planning to implement needs $10000 to be spent in development and other related stuff to be completely ready for your customers. Till you hit the customers all you have mostly is a prediction based on your market study about what the customer want and how he wants it. There is always a chance that the product still has flaws which might repel a major percentage of the targeted customers. And you might need a much larger time span to get this product finished for the customer. It is painful, if you realize that you need to pivot for user acceptance, at a later stage after investing a lot of time and money.
 An MVP can save your valuable time and money here and yet helps to minimize customer rejection. Identify your pilot customers and identify what is the minimal core feature of the product that you can give to them for a review. It can be a mock up or a video or few basic use cases and a lot of detail about what you are planning to do. It might need only $500 or $1000 to get an MVP ready and may be a few weeks and you are ready to go live to your pilot customers for validation and feedback.
The customers can give you feedback about what they liked , what they think need to be changed, what more they want and how much they are willing to pay for the service. You can build your product iteratively further with the early customers giving valuable inputs. Some of them can become product evangelists who can seriously contribute in giving direction to the product. 
You can attract investors who can help you with the funding much needed to take your startup to the next level. Also you can attract good talents to work for your startup which is otherwise difficult. And the best thing is if a majority of the early customers think that the idea is not worth putting money on, you can think of pivoting with $9500 still in hand.
Your MVP will not be the final product but the core basic part of it which you can create quickly for your early customers. The early adopters are tolerant to problems and missing functionality and they can give you valuable feedback which can be used as the direction to drive your further evolution of the product. 
MVP is a very effective business strategy.You can consider it as a communication channel rather than the product. As it helps the product evolution in an agile way with customer involvement, it ensures higher market adoption and increases success chance.
So if you are an enterprenuer at your initial steps plan for an mvp rather than an enterprise solution as your first target.