Let me continue from where we left in my previous post. Is there a silver bullet? If yes, what it is? If no, how can we ensure project success? Before answering these questions, let us look at how we have evolved.
1980’s were the years when different operating systems (such as Windows and Unix) and 3rd generation languages (such as COBOL, C) were popular. This is when computer education started spreading many institutions several countries.
1990’s were the years when Relation Database Management Systems (RDBMS), Structured Query Language (SQL), 4th generation languages, Graphical User Interface, DW/BI, Internet or WWW, Extended Markup Language (XML), Unified Modeling Language (UML), and several other things became popular. Process compliance based on ISO or CMM got initiated in several companies across countries.
In 2000’s, after the historic internet boom and crash, we have seen widespread adoption of e-commerce, mobile applications, Web 2.0, Service Orientation (SOA, SaaS), Social Networking, Open Source, etc.
These days (2010 and after), we are hearing about ‘The Internet of Things’, ‘Green Computing’ , ‘Cloud Computing’ etc., In my opinion, we need better decision support systems! We come across articles about failed projects - large and significant projects meant for national security and crime investigation belong to this list. There are challenged projects in all countries. This leads to billions of dollars of waste or loss every year.
For software development, maintenance, testing and production support (known as software lifecycle), we have seen several methodologies such as waterfall, iterative, spiral, SSAD (Structured System Analysis and Design), RAD (Rapid Application Development), RUP (Rational Unified Process), and Agile Methods (XP, Scrum, FDD (Feature Driven Development), DSDM (Dynamic Systems Development Method), Lean, Kanban, etc.).
There are several standards in our industry. ISO standards and IEEE standards are well known. There are usability standards, coding standards, integration standards, architecture/design standards, security standards, and performance/scalability standards. Also, there are standards pertaining to business domains such as finance, healthcare etc. Year after year, standards are revised and new standards are added to the list too.
We have models too. We have software design models (Entity-Relationship model or ER model is a good example). We have estimation models (Function Point Estimation for example). There are process maturity models and so on.
In addition to these, there are other things such as techniques, tools, etc. How do project teams do the right things in the right way to deliver results? In other words, how do projects teams select the right methodology or approach and do necessary course correction while executing the project to deliver success?
In his paper ‘The use of systems development methodologies in practice: a field study’, B.Fitzgerald observes that the ability to select the right methodology, processes, and practices comes with experience as show in this graph.
In 2008, a celebratory panel took place at the 22nd International Conference on Object-Oriented Programming, Systems, Languages, and Applications in Montreal. The topic of this panel discuss was “No Silver Bullet” Reloaded – A Retrospective on “Essence and Accidents of Software Engineering”. An interesting observation by one of the panelists (Ricardo Lopez, Principal Engineer, Qualcomm) said, "Striving for excellence is the real silver bullet that will deliver an order-of-magnitude improvement through growth, both personal and professional. The silver bullet must come within, rather than without. WE are THE Silver Bullet – which we achieve by professional excellence.”
Striving for excellence is required at personal level, team level and organizational level.
With this background, where do we start? How do we ensure success?
We need to start from colleges and universities. Timely revision of syllabus is required. There has to be more than one stream (for example, one for those who want to pursue research and another for those who want to work in the industry, etc.). Students need to experience how methodologies, standards and models apply in group projects. These are few among the list of 15 suggestions to us.
How about a positive change at an early stage? Let us make engineers at all levels understand that it is very important to customize methodologies and make them context-driven. Let us nurture the culture of collaboration. Let us improve the focus on continuous improvement. Let us spread the realization that discipline and team work are essential.
It is hard to build software applications or products, which can stay long and satisfy customers. However, creating such applications or products requires excellence in terms of individuals, collaboration, team work, focus on continuous improvement, understanding customer needs and several such factors.