Controversial Aspects

 

The software industry is diverse and volatile. All methodologies for creating software have supporters and critics, and the CMM is no exception.

Praise

  • The CMM was developed to give Defense organizations a yardstick to assess and describe the capability of software contractors to provide software on time, within budget, and to acceptable standards. It has arguably been successful in this role, even reputedly causing some software sales people to clamour for their organizations' software engineers/developers to "implement CMM."
  • The CMM is intended to enable an assessment of an organization's maturity for software development. It is an important tool for outsourcing and exporting software development work. Economic development agencies in India, Brazil, Ireland, Egypt, Syria, and elsewhere have praised the CMM for enabling them to be able to compete for US outsourcing contracts on an even footing.
  • The CMM provides a good framework for organizational improvement. It allows companies to prioritize their process improvement initiatives.

Criticism

  • CMM has failed to take over the world. It's hard to tell exactly how wide spread it is as the SEI only publishes the names and achieved levels of compliance of companies that have requested this information to be listed. The most current Maturity Profile for CMMI is available online.
  • CMM is well suited for bureaucratic organizations such as government agencies, large corporations and regulated monopolies. If the organizations deploying CMM are large enough, they may employ a team of CMM auditors reporting their results directly to the executive level. (A practice encouraged by SEI.) The use of auditors and executive reports may influence the entire IT organization to focus on perfectly completed forms rather than application development, client needs or the marketplace. If the project is driven by a due date, CMMs intensive reliance on process and forms may become a hindrance to meeting the due date in cases where time to market with some kind of product is more important than achieving high quality and functionality of the product.
  • Suggestions of scientifically managing the software process with metrics only occur beyond the Fourth level. There is little validation of the processes cost savings to business other than a vague reference to empirical evidence. It is expected that a large body of evidence would show that adding all the business overhead demanded by CMM somehow reduces IT headcount, business cost, and time to market without sacrificing client needs.
  • No external body actually certifies a software development center as being CMM compliant. It is supposed to be an honest self-assessment. Some organizations misrepresent the scope of their CMM compliance to suggest that it applies to their entire organization rather than a specific project or business unit.
  • The CMM does not describe how to create an effective software development organization. The CMM contains behaviors or best practices that successful projects have demonstrated. Being CMM compliant is not a guarantee that a project will be successful, however being compliant can increase a project's chances of being successful.
  • The CMM can seem to be overly bureaucratic, promoting process over substance. For example, for emphasizing predictability over service provided to end users. More commercially successful methodologies (for example, the Rational Unified Process) have focused not on the capability of the organization to produce software to satisfy some other organization or a collectively-produced specification, but on the capability of organizations to satisfy specific end user "use cases" as per the Object Management Group's UML (Unified Modeling Language) approach.
  • From the systemic perspective, the CMM(I) represents a (n+1) classical engineering approach which does not take under consideration numerous human cognitive, organizational and cultural factors, essential for the success of every projects, see also socio-cognitive engineering viewpoint. On the other hand, a process design is strongly connected with the process carrier systems and their requested functions and goals, these clear computational relations are especially important for the validation of the results of the CMM(I) applications. It seems, the CMM(I) requires yet a solid theoretical ontological and epistemological background in order to be a trustworthy standard, for an example only, the arbitrary initial choice of the levels and Key Process Areas are not sufficiently motivated.
  • Critical analysis of CMM has been published in at least two papers. Bach raises questions about the validity of CMM's assertions regarding what constitutes good software-development processes. Bollinger and McGowan discuss flaws in CMM's use of assembly-line process models. They show that manufacturing is fundamentally different than software development, as the former is primarily concerned with replication and the latter with design.
  • Creation of Software Specifications, stating what is going to be developed, combined with formal sign off, an executive sponsor and approval mechanism. This is NOT a living document, but additions are placed in a deferred or out of scope section for later incorporation into the next cycle of software development.
  • A Technical Specification, stating how precisely the thing specified in the Software Specifications is to be developed will be used. This is a living document.
  • Peer Review of Code (Code Review) with metrics that allow developers to walk through an implementation, and to suggest improvements or changes. (Note - This is problematic because the code has already been developed, and a bad design potentially cannot be fixed by "tweaking".) The Code Review gives complete code a formal approval mechanism.
  • Version Control - a very large number of organizations have no formal revision control mechanism or release mechanism in place.
  • The idea that there is a "right way" to build software, that it is a scientific process involving engineering design and that groups of developers are not there to simply work on the problem du jour.