Software Development – Risk Management

The first thing to accept is that software development is unpredictable. No matter what new fangled software is implemented and how many function points are estimated, experience has shown that making the target date (let alone achieving the desired quality outcomes), is a hit and miss affair.

Risk may arise due to loosely defined requirements, difficulties in estimating the time and/or resources needed for the software development, dependence on individual skills and rapidly changing requirements due to changing needs.

Here are some thoughts on how to make the unpredictable a little bit more predictable.

Spend more time setting objectives

Project objectives are important. A project should not be initiated without well thought out objectives. Spend time analysing what the project is trying to achieve. The project objectives need to provide guidance to the programmer for every programming task. Pin up the objectives for each programmer to see.

Here is an example of setting an objective. I was asked to analyse the requirements of a busy manager. His manual filing system was constantly in use, and never in order. A system was needed that would maintain the current details, and ensure that records could always be found. That was easy enough. However, during the interview, the phone rang constantly, with requests for information. The objective finally agreed on was “Eliminate the phone requests”. This led to a very successful solution, but completely different to that originally envisaged.

Having set the objectives of the project, do an exhaustive analysis of how the objectives can be achieved. This should eliminate unrealistic objectives – like “The best and nicest and cheapest and quickest”.

Do not spend too much time gathering requirements.

Rigid analysis stifles programmer and user creativity. It is also no guarantee against a software disaster. Where the documentation of the requirements runs into several volumes, it usually guarantees a software disaster.

Users frequently do not know what they want, but they will recognise it when they see it! What was the original requirement may not be what was wanted at all. Rather spend time on creating a solid project framework that will enable you to achieve the major objectives.

Break a project into multiple tasks.

Wherever possible, a large project should be broken into smaller tasks. Each task will then be more predictable with less to do and less that can go wrong.

The initial programming task should be to create a framework with minimal functionality. Create dummy procedures to show the style and the intent – it is important for the users to see the “look and feel” of the project early in the development cycle. It is equally important for the users to get involved right from the start. What you want is users to start “owning” the project.

With the project objectives soundly set, the basic functionality should be subject to little change. The dummy procedures can be completed once the project concepts and design have been approved. Later tasks can then add the “bells and whistles”.

The project must be “infinitely modifiable”.

The project must be designed so that it can handle major changes to requirements. With a soundly defined framework and infinitely modifiable design, the effect of users changing their minds will be minimal. As will the consequences of new or better ideas as the project evolves.

There needs to extensive thought on how an “infinitely modifiable” system can be created. This must be done before any programming is initiated. “Top down”, modular design standards will help.

The consequences of having a rigid system are unpleasant. When change occurs, and it will, you will have very unhappy management when the target date needs to be extended. Equally unpleasant is to send the programmers on a “death march” to get the project finished on time.

Do not use new or complex technology

Using straightforward, tried and trusted Software provides a head start. There is always some advantage in using the latest version of software – but there can also be a heavy cost. If new technology is essential for the project, then an independent trial of the software is needed to ensure adequate technical knowledge and that all the software bugs have been ironed out (are they ever?).

Relying on immature software with limited programmer exposure to the software is a recipe for disaster.

Hire only the best and brightest

The success of a software project is mainly dependent upon the abilities of the developers. They determine, more than any other factor, the viability of a project and have a tremendous influence on productivity.

A few tips: The successful applicant should have a keen sense of humour (see De Bono and Lateral Thinking) and a good grasp of idiomatic English. Excellent communication is all important.

Do not proceed with a large project where the best and brightest have recently left the company. The company will be suffering from the “skim milk” syndrome – and you need the cream of the crop for successful development.

Reusable code

It is always productive to collect a large library of reusable code. The procedures should be used to standardise: error handling, database access, edit routines, grid handling, etc. The reusable code will reduce debugging times, as each procedure will be called multiple times. It also lessens the amount of coding needed.

Software Development Explained

Most of us don’t even know what software development means. Let me explain. Basically it means that someone works to develop or create new software, usually to meet the needs of business owners, for the personal use of the user, or to supply the potential needs of a client.

Developing new software usually is perceived as ‘computer programming’ to most people. That is only part of the process. There is much research that has to be done in the development of new software programs. This often involves many modifications, engineering and re-engineering, and maintenance of the finished product before it is declared ready for use by the general public.

The software developer is usually someone who’s main concern is with the many facets of the process. Their involvement is often guided by lead programmers during the developing of the software programs. It often takes a long time and no small amount of luck to develop a program that is finally free of glitches typically found in new software programs.

Programmers are the people who typically write the source codes, and the developers are often involved in many other aspects of the process, including, but not limited to specifications, designs, implementations and maintenance to name a few. Certain employees may have a single responsibility in just one of these phases of development, yet in a smaller place of business, it might be that just one employee would take on all of the tasks involved.

Companies take different approaches to how they develop software. Often it is regimented and structured when it pertains to business software. Other companies develop the software one step at a time. However the approach, there are some of the same combinations of methodologies used in the development of new programming.

A methodology in software language means a framework is developed that will structure the development process of new informational systems. Many frameworks have been used over a period of years, and what might be right for one project may not necessarily work for another. This is why new frameworks are being developed and used more often.

The same strategies are employed in both large and small companies. All involved employees would meet to discuss requirements, and proposals and recommendations are usually made at this time. The design work is worked out and clarified. Anything that needs to be updated is done now, and the developers can begin the job or working on the system. Once all this is completed, the system is delivered. Security measures are tested, and any glitches or bugs are worked out to everyone’s satisfaction. The system is deemed complete and is now ready to be distributed and used.

So, there you have it. The capsulized version of how new software is developed, and a brief discussion on who does the work that brings new and exciting developments to the software field. Assuredly there is a lot more to it than what I have discussed, but I think I have included enough information to give one a general idea behind it all.

Software Development Life Cycle – Basic Steps Leading to A Strong Product

After realizing and experiencing the alluring advantages of outsourcing, more and more companies are getting inclined towards outsourcing software development projects to major offshore destinations. However, having an in-depth knowledge of software development life cycle becomes a priority task for not only the service provider software development company but also the client to keep a check on the project progress throughout the software development.

Software development is an intricate process that requires a lot of planning, implementation and testing. You can not develop perfect software with full functionality unless it passes all the tests and quality analysis. So, companies should keep a check on SDLC while experiencing software development outsourcing, a company No software is perfect and in full functionality unless it overcomes all the tests.

A software development company put special emphasis on SDLC to produce the most effective, functional and mission critical software that can help one’s business in a long run. The software development life cycle (SDLC) is a pre-set framework that is used by all software development companies for through understanding and developing effective information systems and software.

Though software development life cycle can have many versions and each version carries its own plus points and minus points, but all version have same steps or activities that are discussed below;.

Feasibility

First of all, the project is checked for its feasibility if it should get the go-ahead. If the project is to proceed, then a project plan is thought out together with the budget estimates for future stages of development.

Requirement Analysis and Design

After testing the feasibility of the project, system or software requirements are gathered. Business analysts perform a thorough study and analysis of the business needs of the organization and the market trends. Necessary changes are proposed. From interface design to data design, every program is discussed in this stage to keep the software of high level design.

This phase considers the overall structure of the software and defines the strategy for its development. That’s requirement analysis and design phase is believed to be the most critical part of software development life cycle. Any flaw in this phase may prove very expensive for further stages of life cycle. In simple words, this phase considers the logical system of the product.

Code generation and Implementation

This phase involves the code translation of the well-thought design. Desired programs are created using a conventional programming language and with the help of programming tools like Compilers, Interpreters, Debuggers. The code is generated using various high level programming languages like C, C++, Pascal, Java, etc.

Testing and Quality Assurance

Apart from requirement analysis, testing is another crucial stage of SDLC that decides the effectiveness and functionality of the product. This phase unravels the bugs and errors of the system. Initially the individual modules of programs are tested separately which is followed by testing of the system as a whole. The system testing includes the integration testing to check whether the interfaces between modules are working properly, Volume testing to ensure the capability of the system to work on an intended platform with the expected load of data, and acceptance testing to check whether the system does what the user needs.

Maintenance and Support

Software system maintenance is an inevitable need. It undergoes various changes once it is delivered to the client. Software development should be flexible enough to inculcate required changes with time and according to changing business needs. Inevitably the system will need maintenance. Software may undergo certain changes once it is delivered to the customer. There are many reasons for the change. Change could happen because of some unexpected input values into the system. In addition, the changes in the system could directly affect the software operations. Therefore, the software should be developed in order to accommodate changes that could happen during the post implementation period.

Each and every stage of SDLC carries its own importance and plays a key role in success of any software development project.