Tuesday, September 7, 2010

Strategy for approaching a new Problem:

There are three main strategies for approaching a new problem in software development
1. Integrate into the system existing software product, component or service – commercial or open source (for example, Payment Gateway as PayPal, Blog Engine as WordPress, CMS as Drupal, UI Components as Telerik and so on)
2. Imitate good enough solutions and adapt to your problem (Architecture Patterns as MVC, available code examples and guidelines as MSDN, borrow ideas from blogs, open source projects, Starter Kits, SDK and so on)
3. Innovate and create new solutions or make significant improvements to existing approaches
Strategy comparison
Integrate Imitate Innovate
Time to market Fast, if effort to integrate with other system components is low Slow, but predictable, if not many hidden pitfalls or adaptation problems are encountered Unpredictable as any innovative work
Cost Low, if components are reasonably priced and not much integration work needed More expensive and depends on complexity and adaptation effort Unpredictable
System integrity (with system architecture and environment) Acceptable if new components don’t screw and over-complicate core architecture Good, if developers adapt ideas to existing architecture Solution is built to match core architecture and customer needs
Required Expertise Not much specialized expertise is required, usually external support is available for integration Good developers can effectively adopt good ideas that are explained well High level expertise, creativity and specialized knowledge are required for good innovative solution
Control over code and future development Little control and you are on mercy of external developers Good control if ideas are applied well and not over-engineered Full control
Competitive advantage and uniqueness Not much for the standard solution that many can use Depends on quality and creativity in adaptation Innovation is an excellent opportunity to gain advantage
Maintenance, support and improving capabilities Work is outsourced to dedicated external developers who fix, support and improve the product Your effort is supported in original source of ideas if you are lucky Completely your own effort
Learning curve, tacit knowledge, help Usually supported by help, tutorials, training and community involvement Partially supported by original source, however can drift far as the result of internal implementation Should be covered by you to enable effective support and future development by existing and new developers

A short answer to dilemma: maximum integration and minimal innovation.

No comments: