Tuesday, October 13, 2009

Project Management

In the world of programming, a project's life cycle includes more than simply coding away and building something ready to run. Even if it plays a small part in the project, the database design is still integral to the project ... in many ways e-commerce sites, web portals, search engines and customer interfaces are all basically interfaces to the backend database and the database is like the foundation of the house - if you did something wrong there, no matter how nice or trendy the house looks, it will still be torn down by the first wind.

Developing Software Solutions

1) System Requirements - gather system and software requirements.

2) Software Requirements - By the end of this phase, you have a paper describing all the hardware needed for implementing, testing and deploying the application. You also need the software platforms your application will be developed and tested on. This must also include an opportunity study at the beginning and a feasibility study at the end. "Do we really need this from the business point of view?" After you establish the requirements, the feasibility study provides a high-level cost and benefit analysis so that a ROI can be estimated.

3) Analysis - a team of analysts gathers information regarding tasks performed, schedule, equipment, etc. Analysts build the database, describe the reports and the operations the software must do - a written annex is added to the contract with all of these features agreed on by the customer and a timeline. Analysts try to fully understand customer needs - they define software functionalities, transcribing them in a professional analysis for the software engineers.

4) Program Design - Reading from the specifications of the analysis, the design team creates a user-friendly, attractive interface that can be presented to the customer and changed to fit the customer's taste. They develop prototypes that the customer must agree on - usually throw-away code. After this, the coding begins.

5) Coding - based on agreed upon doc., coders should know exactly what to do and code the application.

6) Testing - After coding, the software is installed on a test platform at the customer site and the customer team simulates using the software for a definite period of time. Bugs are revealed and fixed.

7) Operations - Customer has an application that runs by agreed upon date and deploys on production machines.

Now, how best to manage the software development life cycle (SDLC) ...

The Waterfall Method

Just as it is stated, you follow the 7 steps listed above in sequential order. The input of each phase consists of the output of the preceding one.

Advantages
  • Simplicity
  • Everything is documented and agreed upon with customer
  • Because of planning, it is easy correctly estimate the project costs and timeliness.
  • The rigorous initial planning makes the project goals clear
  • All requirements are analyzed and validated by the customer, so the customer can estimate the benefits incurred by the software application before it's actually implemented.
Disadvantages
  • Customer is not able to see the product until it is completely finished = costly to make changes
  • It has little flexibility for scope changes during development
  • The architecture limitation are often not discovered until late in the development cycle
  • Because testing happens at the end of the coding phase, unexpected problems with the code might force developers to find quick fixes at the expense of the planned architecture
  • Doesn't work on projects whose requirements can't be rigorously planned from the start
The Spiral Method

This method is more suitable for large, expensive, complicated projects. It is an iterative waterfall in which every iteration provides increased software capability.

It consists of a spiral divided into four quadrants. Each quadrant represents a management process: Identify, design, construct and evaluate. The system goes through four cycles of these four processes:

Proof-of-concept cycle: Define the business goals, capture the requirements, develop a conceptual design, construct a "proof-of-concept," establish test plans, and conduct risk analysis. Share results with user.

First-build cycle: Derive system requirements, develop logic design, construct first build and evaluate results. Share results with user.

Second-build cycle: Derive subsystem requirements, produce physical design, construct second build and evaluate results. Share results with user.

Final-build cycle: Derive unit requirements, produce final design, construct final build, and tes all levels. Seek user acceptance.

Advantages
  • The entire application is built while working with the client.
  • Any gaps in the requirement phase of the Waterfall method are identified as work progresses
  • The spiral representation conveys very clearly the cyclical nature of the project and the progression through its lifespan.
Disadvantages
  • Requires serious discipline on the part of the client.
  • Executive control can be difficult because in most projects the client is not responsible for the schedule and budget.
The Rapid Application Development (RAD) Method

In this method the client works with the software as it is being developed and consists of the following phases:

  1. Business modeling
  2. Data modeling
  3. Process modeling
  4. Application generation
  5. Testing and turnover
RAD allows for rapid generation and change of user interface features. The main disadvantage is that the client will always want more enhancements to the software.

Extreme Programming (XP) Method

XP eliminates a lot off the phases from the traditional Waterfall method, is simple and based on communication, feedback and courage.

The professional analysts are replaced with the client, who is very active in the process. The client writes a document named "User Stories" which is a simple description of the desired functionality of the software. The programmers read the doc and give an estimated timeframe of every functionality implementation. The customer then chooses a group of functionalities to be developed first.

The developers use a test-driven design in the implementation phase, meaning that a testing method for the desired functionality is conceived before the code is actually written. Code is written by a programmer under supervision of another who tests it. After the code for the iteration is complete it is given to the customer for approval or disapproval. The programmer keeps improving until that iteration passes.

The software is deployed in a number of releases, composed of one or more iterations - the software gets the final release when all iterations that contain all the functionalities described in the User Stories document pass the acceptance test.

Because no single method is best, a good project manager must know in theory a little about all of them to choose the best one for the current project. In some cases, it might be best to do a mix of methodologies.

The eCommerce Project Cycle

The best bet in eCommerce development is the Waterfall method or some variation thereof.

  1. Understanding the customer needs - customer wants an eStore where a range of products can be advertised and bought. You need to know the type of products the customer wants on the site and a little about future strategy.
  2. Creating a web prototype - should be only a web site template.
  3. Designing the database - developed from the requirements gathering phase and agreed upon by customer. The logical design describes what data you need to store and the relationships between different entities of data.
  4. Implement the data tier objects - implement the data access logic that will support the other tiers in your application.
  5. Build the middle tier - implement the error-handling, data-manipulation strategies and business logic for your project.
  6. Build the user interface - web forms, web user controls, master pages - you can build off of the prototype in 2.
  7. Final testing - database is populated with real records, a simulation is made to test the efficiency of the ordering process, any programming errors are revealed.
  8. Find/ provide a hosting solution