Costs of Inefficiency are evident in the world of business and also in the world of SoftwareDevelopment. The cost is sometimes failure or cancellation of projects and products.
Question: What are the inefficiencies present in the SoftwareDevelopment community and what can be done to minimize the impact of inefficiencies?
Discussion:
''Is TheCostOfInefficiency evident?
"I don't think most people have a clue as to areas of inefficiency, much less their costs. Discovering inefficiency requires a dedicated effort to search for it and identify it.''
The costs exist, whether people have a clue or not.
What costs are involved?
Costs are real and opportunity. The real costs are monetary and must be applied to some enterprise.
The opportunity costs are realized in failure to generate income and profits.
Inefficiency is generally the application of, or the failure of application of, methods, procedures, practices and allocation of resources in an approach designed for success.
That seems wrong. An inefficient approach can be designed for success (and even be successful).
I'll propose: Inefficiency is the difference in aggregate resource costs between an optimal solution and an actual solution. And a resource cost is anything required (constraining) and of limited availability.
Where I get confused is when dealing with dozens of different resources... it is often difficult to even decide what an 'optimal solution' looks like with regards to costs. It's always good to have the lowest cost possible, but the lowest possible cost is non-zero for a required resource, and often one resource can be traded for another. How shall one resource (time or man-hours, energy cost, heat production, power consumption, money, pollution or waste production, etc.) be valued against another?
Inefficiencies I have seen in large projects:
The biggest inefficiency is treating "requirements," "design," "development," and "test" as separate phases. In this approach, there is nothing to measure for efficiency and no known status. You only know where you are when you are done.
Evolutionary Approach
The alternative to the waterfall model is the iterative, evolutionary approach. With this approach you do not need:
I have succeeded with this approach in small projects where all developers see all of the code. I am currently attempting to consolidate various distributed systems in an very large organization (>75,000)- yes I am a little crazy. The architecture is moving towards J2EE standards. Different skills are required, multiple tools, different technologies used (JSPs, Java Beans, EJBs, Legacy connectivity, MQ, XML, LDAP, JNDI, DB2, and more...). I believe there is a minimal vision required (not a 3 year strategic plan!!) but at least some direction and understanding of how teams and technologies collaborate. I have seen great inefficiencies when developers just begin coding.
p.s. I prefer the term OrganicVsEvolutionary as it implies it we are not always in control of unfolding circumstances.