Hi everybody. I am a project manager with a mid level software development company. Some days back I came across a posting in a forum where a person, otherwise a competent finance professional, wanted to know about basics of software development process This got me thinking. In today’s world of multitasking, it is not rare to see people from different professional backgrounds converge and collaborate. But there seems to be pain involved in this. Why? Because, as I see, it, today’s highly focused professional education is creating people with one-dimensional capabilities. So when two such guys meet, more often than not, it is a trial and error sort of on-the-job-learning (they can’t really go back to school, can they?) leading to much heartburn and consequent delays, cost overruns, errors, rework, and lowering of confidence in otherwise very capable people. I am writing this series of software development basics to help people, especially non-IT professionals understand the way IT projects work. Please do chip in with more inputs. Let’s start with the basics. It cannot be emphasized enough that a detailed and intelligent process is a must if you are developing software. Process means a guideline description of a repeatable procedure that describes the way that your organization develops software. It also defines your organization because it is the process that will be applied to the development of future projects. Since Indian companies are choice of most organizations wanting to develop software, it would be wise to emulate their process, as it is the foundation stone of their providing high quality work at almost half the usual cost. Therefore, following is a little glimpse of typical process employed by the leading Indian companies like Infosys, BrickRed , Wipro etc. Domain Analysis It is usually the first step in attempting to design a new piece of software. It involves the investigation of the area such as: banking, marketing, retailing, insurance etc., where the software is to be employed. Know Thy Client The holy grail of any project, satisfy your client. For that you need to know, what is in his mind regarding his requirements. He is the best person to tell you, what they want. While skilled and experienced software engineers can fill in any incomplete, ambiguous or contradictory information. Specification Specification means precisely describing the software to be written in a rigorous way. Software architecture The architecture of a software system refers to an abstract representation of that system. Architecture is concerned with making sure the software system will meet the requirements of the product, as well as ensuring that future requirements can be addressed. Implementation (or coding) Reducing a design to code may be the most obvious part of the software engineering job, but it is not necessarily the largest portion. Testing Testing of parts of software is done by a software engineer to check out any bug or error. Documentation An important (and often overlooked) task is documenting the internal design of software for the purpose of future maintenance and enhancement. In my next posting, I will discuss methodologies adopted to successfully develop and implement software projects. I hope this posting, though not enough by any stretch of imagination, should give the beginners a little something.
To continue with my last posting, I will describe the methodologies successfully adopted by leading Indian companies like Infosys, BrickRed etc. in creating software solutions. Some try to discipline or formalize the seemingly unruly task of writing software, while others apply project management techniques. To meet expectations in terms of functionality, cost or delivery schedule, the following processes can be implemented: Waterfall processes The best-known and oldest process is the waterfall model, where developers (roughly) follow steps in this order: state requirements analyze requirements design a solution approach architect a software framework for that solution develop code test (perhaps unit tests then system tests) deploy, andPost Implementation. After each step is finished, the process proceeds to the next step, just as builders don't revise the foundation of a house after the framing has been erected. Iterative processes Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early, before problems or faulty assumptions can lead to disaster. Agile software development processes are built on the foundation of iterative development. Agile processes use feedback, rather than planning, as their primary control mechanism. This feedback is driven by regular tests and releases of the evolving software. Extreme Programming, XP, is the best-known iterative process. In XP, the phases are carried out in extremely small (or near "continuous") steps compared to the older, "batch" process. Critics of iterative development approaches point out that these processes place what may be an unreasonable expectation upon the recipient of the software - that they must possess the skills and experience of a seasoned software developer. The approach can also be very expensive if iterations are not small enough to mitigate risk. Formal methods Formal methods are mathematical approaches to solving software (and hardware) problems at the requirements, specification and design levels. Examples of formal methods include the B-Method, Petri nets, RAISE and VDM. These methods are not end in themselves. Depending upon project requirements, a combination of these methodologies or even a completely new procedure may be applied. One such process is the Model Driven Software Development (MDSD). I will elaborate on it in my next posting.