Archive for the ‘Product Development’ Category

What Programming Languages should you learn?

March 19, 2008

I have always been a firm believer that as a software programmer – unlike their real life – one should avoid getting married to one programming language (at least personally this is what I expect from most of the pure computer science specialists). I know that there are people who will hurl stones at me when I say this. However, openness to explore something new in this regards, has always been a key criteria for me to select people in my group.

My views certainly got validated by Christopher Diggins in his article “Learn as Many Languages as You Can” in Dr. Dobbs Journal. While he certainly has his preferences set for Scala, however he is also encouraging programmers to leave their safety zone to effectively expand their thinking.

Regarding expansion of thinking – Chris points to an interesting hypothesis called as Sapir-Whorf’s Hypothesis (Wikipedia Link). This is the first time I have read this theory. It talks about how a particular linguistic language influences the thinking of its speakers. What this means is that if a Person A uses English as his speaking language vs Person B who uses Chinese as his speaking language – there is a high probability that both of them would have a different outlook towards exactly same aspects in life. I agree with this theory as I have observed this to be true in my real life. So what Chris is saying is that if this hypothesis is true, why not learn as many languages in order to get a wider outlook towards general software programming.

I completely agree with you, Chris!

Add to Technorati Favorites

Across Browsers Compatibility

March 19, 2008

Some things never change, do they?

I was watching the team yesterday meticulously trying to make sure that the user experience of the application is same across various browsers and their versions. It reminded me of my early days of the programming career little over decade back. Same story, same issues, and same hair-pulling experience! Mozilla vs. IE (it was Netscape vs. IE in my days); Works in 7.0 but does not work in 6.0; works on Joe’s IE but does not work on mine; blah blah. Same story but a different year! Or should I say a different decade?

I do agree that Web Programming has become extremely cooler and sophisticated over the last decade. I can recall a time where in order to make a web site interactive, all you could do was to pop-up an error or confirmation box using JavaScript on the Client Side. Today, however, the possibilities of what you can do in an application running in a browser is amazing. However as much as the complexity and wide-reach of Web Programming has increased, the technology to help in resolving the challenges associated with rolling out a Web – based product has not improved that much. It is still very human dependent as it was about a decade back. I am saying this even with the good web testing frameworks (Watir, Selenium, etc.) out there. There are certain things that still requires human eye.

[On the side note - I sometimes wonder why many programmers today shy away from Web Programming and prefer to confine themselves dealing with more structured programming languages (Java, RoR, etc.). IMO, Web Programming today is much more challenging than it ever was.]

Add to Technorati Favorites

Version 0.1 for Workstreamr

March 13, 2008

The team just released the first Iteration Release of Workstreamr this Monday and I was amazed at the terrific job they did. As I told all of them – this is probably the first time in my working experience that I have a seen a relatively functionally stable product released by the Development Team after the first iteration. Typically in my past experience, the first iteration release to the QA was when all the hell would break loose (sorry, there is a slight exaggeration here). QA cursing Developers for what they have handed them, Developers passing the buck to the Requirements Engineers for unverified requirements, and so on. It used to take few iterations and multiple patches to make the product stable for functional testing. In this case, the product was put to actual usage after the first iteration. It was a perfect synchronized dance between all the members.

The team sat down for an interesting retrospective meet yesterday.

Some key things which the team claimed worked very well for them were

  • Well defined and understood Iteration Goals. Goals were kept in an achievable format. (Team had spent substantial time at the start of the iteration to talk amongst themselves about the goals and success criteria)
  • Requirements in visualized formats (from wire-frames and prototypes).
  • Good team coordination and quick turn-around for queries. (Team uses Velocity Methodology & Platform)
  • Test Automation

Areas of improvement which the team suggested -

  • Branding Planning & Design should happen before the engineering starts.
  • In Iteration Planning Meets – plan for things beyond the next iteration.
  • Although it worked in the current iteration, Iteration Planning & Estimation process needs to be more rigorous.

There are three more iterations left for the release. I am sure the team would have excellent opportunity to implement these improvements. At this time, however, they should savor their achievements. And yes, a pizza is due on me!

Add to Technorati Favorites

Product Engineering approach for Startups (3): Goals driven planning.

March 12, 2008

[This is third in my series of blogs about Product Engineering Approach for Startups. In my previous blog, I had talked about why should startups invest in prototypes.]

One of the most important thing all the startups have to figure out as part of their Business Plan is what is going to be their go-to-market strategy atleast from Product or Services Delivery perspective. As critical as it is for almost all the startups, I see that many startups make the mistake of planning their go-to-market strategy using engineering milestones and not customer-driven milestones – especially in products which are more customer driven.

To explain my point here, let me take an example of two hypothetical Startups – A and B (assume that they are building same type of product).

  • Startup A sets its first milestone to roll out a Beta Release. So they plan a list of features to be implemented in Beta and drive their product engineering. The goal or purpose behind the Beta Release is somehow implicit here.
  • Startup B sets its first milestone to get 100 users start using their system. So in this case they drive their plan for Beta Release with the bare minimum features which will reach them to their goal. In some cases, these minimum features might be same as the features which Startup A is implementing. However, the point here is that purpose of the milestone is well defined in B’s case as compared to Startup A.

IMO, from the above example Startup B is in a much flexible situation where they can maneuver their engineering close to what customers or potential customers are expecting. They are customer driven. Also, there is also an implicit requirement on Startup B to be more Agile to reach the goal. Startup A’s strategy is more Engineering driven which may or may not be the same as Customer driven focus.

While I am personally in favor of following Startup B’s approach, I will also agree that organization’s circumstances to select either of the approaches may be driven by more wider range of issues.

From my experience, I have also learnt that Product Developers are more motivated and aligned when B’s approach is taken. They are more mission oriented. Whereas in A’s case, I have seen that the aim is more timeline oriented.

I would love to hear your thoughts/comments/feedback.

Add to Technorati Favorites

Sometimes these products amazes me…

March 8, 2008

Check out the Bluetooth-enabled pillow which is supposed to make its debut very soon.

I am trying to count the number of assumptions this product is trying to make here -

  1. Like teenagers, grown-up adults like talking on the phone lying down for a long period of time.
  2. Teenagers are not going to buy this product – well, atleast the normal looking at the price tag.
  3. While in the bed, people typically won’t like to bother their body while talking on the phone – well atleast anything other than the mouth muscles.
  4. The pillow would really require a long battery life – for more than 8 hrs of talking time.

I am sure the product manufacturer’s have done a broad market study to find this to be a viable product idea. However, I am sure people like me would have been left out of this market study.

Add to Technorati Favorites

What is Software Product Engineering?

January 25, 2008

After writing few blogs on topics associated with Product Engineering, few readers asked me as to what exactly is the meaning of Product Engineering? Is it Product Development? If yes, what does “Engineering” mean in there? Why not simply call it as Product Development?

All these questions are valid. The term “Product Engineering” is used in so many different ways that it reminds me the story highlighted by the picture below.

Elephant and the Six Blind Men Notion of what Product Engineering means to individuals is very similar to each of the blind man’s tale of how the elephant looked like. Like these blind men, based on from where I am coming from, here is my take on Product Engineering -

Software Product Engineering (SPE) is a well-defined engineering approach (well facilitated with methods and tools) which integrates all software engineering activities to build a software product effectively and efficiently.

Why do we need such approach? My opinion on that is that we software engineers still have not correctly figured out how to engineer and build products in comparison with our other counter-parts in Civil or Mechanical Engineering. Building Software Products is hard because it still remains a very creative process. Each software product typically has a unique DNA and a unique novel design needs to be used every time to build it up. Also, there is an extremely high human element involved in this.

This may sound slightly controversial, however I think I am right when I say this. Another dimension which adds to the complexity of building software products is that end-customers of the software products are still naive. These end customers could be the end consumers or people who are selling the products to the end-consumers. Like almost all of us as humans beings, they also do not have one consistent, well-thought idea of what they want. Their needs also changes as time progresses.

A good Product Engineering approach is required to help facilitate product development under the challenges listed above.

Add to Technorati Favorites

Product Engineering approach for Startups (2): Investing in Prototype

January 24, 2008

[This is second in my series of blogs about Product Engineering Approach for Startups. In my previous blog, I had talked about what made Product Engineering approach so different for Startups.]

Over the last many years, I have seen various different approaches being taken at the early stage of product development in software startup organizations. For the sake of discussion, let me categorize them into two types of approaches.

The first type of approach is more directed towards initiating the actual development and evolving the product as they go. The vision of product concept also starts getting built up as the actual product itself evolves. While the approach in Type – II is to have a more stress on Product Conceptualization and Visualization (aka. prototyping) first and then initiating the actual product development.

In my experience, the Type – I approach is more suited for a very small and highly cohesive team. The product architect who may have conceptualized the product is also typically engineering the product in this case. This approach is also much more suited to the teams wherein the key folks have already experienced building a product on the similar lines as what they are currently developing. There is a chance that the team may be able to save time in terms of total release time for the product, however more number of development iterations are required in this case to finally build the product. More number of iterations can add up to the cost. This approach is much more suited to startups who may already have secured funding as compared to the ones who are hoping to get funded based on the product they develop. IMO, organizations building products in a niche/new domain or untested markets should not follow this approach.

For organizations who find themselves not able to satisfy even few of the criteria listed in the approach described in the above paragraph or infact see opposites of them, the type – II approach is the safest one. This is very much required when you have a large or distributed team or when you are collaborating with an outsourcing partner to build your product up. The key idea in this approach is to conceptualize and visualize the product (in form of wire-frames, clickable prototype, stubbed application prototype, etc.) to an extent where all the stakeholders have the same understanding of the product and the engineering team feels comfortable to build it up. The engineering iterations are much simpler and faster in such cases.

Approach – II does require some additional investment (both time-wise and monetary). Organizations will also have to invest on special non-engineering skills here which are typically found in Product/Domain Specialists, Usability Specialists, Visual Designers, and Rapid Prototypers. However the returns on such investments are substantial. Barry Boehm has written about it in his book on Software Engineering Economics. (“The Options Approach to Software Prototyping Decisions” a paper from School of Computer Science at Carnegie Melon is also a good read on the same.). This approach would certainly help organizations to predict better and reduce the uncertainty associated with product development.

Trust me – Startups already have lots of uncertainties to deal with!

Add to Technorati Favorites

agile vs. Agile

January 7, 2008

I have become a big fan of Agile Methodology over the last few years. One of my responsibility in my current organization is to practice, preach, and eat my own dog-food about anything associated with Agile. When I talk or work with many while doing this, it amazes me as to how much mis-conceptualized Agile is. Majority of whom I have talked to claimed that they fully understand it, yet almost all of them could not point out the core values around it. This is when the ‘Buddha’ moment realized on me! Majority of them who said they understood Agile really were referring to agile (with a small ‘a‘). For them fast and continuous change, quick turn-around, being nimble and flexible for anything was probably the core of what agile really meant. However, this can probably be termed as verb‘ial understanding of Agile. Agile (with a capital ‘A’) is more than that. It is more of a philosophy or culture or set of beliefs like the way we all think about ‘Hinduism’ or ‘Christianity’ or any other religion/practice out there. Key behind adapting Agile is to understand the core beliefs that have set the foundation of Methodology. The beliefs and practice of these key principles is what is needed to use Agile Methodology for Product Development.

So next time when you say that you are keen in adapting Agile, take a minute to think if you would like Agile to be served to you with capital ‘A’ or small ‘a’.

Add to Technorati Favorites

Product Engineering approach for Startups. (1)

January 6, 2008

Having gone through the experience of working for few startups in my past life and now helping and working with plenty others in my current organization – I find myself in anecdotal situations lot many times when I explain those who have not tasted the sweet experience as yet. Majority of the software engineers in India still have experienced building software products from a services mentality. I would say this even if some of them may have worked for established Product Organizations here. By services mentality I mean where everything needs to be scoped. (When I say this, I am not saying that scoping is bad. Trust me, I work for a Services Organization and I understand the need for scoping continuously in order to keep us running our business.)

Product development requires a substantially different approach and more so when we are in a startup mode ready to roll out the first version of the product. 99.99% of the startups work in a “perish or exist” mode. You think of a project management variable (time, money, effort, etc.) and there is always a constraint there. And a very tight one too! ‘Scope’ many a times may have a shelf-life of few hours. And there is nothing anybody can do to stop that. So whether you are working for a startup organization or in a business of serving startup organizations like myself, you require a radically different approach towards taking an early stage product to the market. Yes, I mean radical.

My group in GlobalLogic is trying to do exactly that!

(This is part of many of my forthcoming blogs on Product Engineering approaches for Startups)

Add to Technorati Favorites


Follow

Get every new post delivered to your Inbox.