How formal the project is affects virtually every activity throughout the life of the project. More formality means more overhead. But larger projects require more planning and attention to detail. (McConnell 2004:657)
A personal home page might require less formality than, for example, a stock trading web site. At the formal end of the spectrum [[Computer security|security]], [[software bug]]s, etc. are major issues. Depending on formality, lifecycle activities can range anywhere from no planning at all, to formal [[Software documentationSoftware_documentation|documentation]], etc.[[test areplan]]ning, major[[change issuescontrol]], [[requirements analysis]], [[software architecture|architectural description]], design and construction practices.
==Planning and Management==
Planning and management also depend on the formality of the project. On informal projects, organizations can plan the project incrementally. On more formal projects, organizations might need to do at least basic, up-front project planning. On informal projects, [[Software testing|testing]] can be planned as-needed, but formal projects should do at least some of this [[Test plan|planning]] up front. QA planning can be done as-needed in either case. And while [[change control]] can be informal on informal projects, it should be formal on formal projects.
==Upstream Activities==
The results of shortchanging upstream activities are predictable. Organizations that skimp on them will have to eventually do them anyway, at 10 to 100 times the original cost. (McConnell 1996:45).
===Problem Definition===
You first must understand what problem your web application will solve. Know who your users and stakeholders are. Then you must understand what their needs and challenges are. Understand the [[root cause]] of the problem, as well as any constraints imposed on the solution. Once you understand who your users are and what their needs are, you can come up with a list of features that satisfy those needs.
===Requirements Definition===
; requirement :
#A software capability needed by the user to solve a problem to achieve an objective
#A software capability that must be met or possessed by a system or system component to satisfy a contract, standard, specification, or other formally imposed documentation
(Leffingwell & Widrig 2005:15)
Depending on the formality of the project, [[requirement]]s specifications can be either informal or semi-formal. On more formal projects, requirements should also be reviewed as-needed.
===Architectural Description===
; Architectural description : An architectural description (AD) is a set of products that documents an architecture in a way its stakeholders can understand and demonstrates that the architecture has met their concerns. (Rozanski & Woods 2005:175)
On more formal projects with more up-front planning, an [[Software architecture|architectural description]] can be beneficial. Also, this might be the place to specify if you'll [[Code reuse|reuse]] any pre-built components, or build any components for future reuse.
==Technologies==
* Evolutionary delivery
* [[Spiral model|Spiral development]]
==Design==
On informal projects, design and coding can be combined. But on more formal projects, a separate [[Software architecture|architectural description]], informal detailed designs and as-needed design reviews can be beneficial.
==Construction==
Programmers can program individually, or in pairs (as in [[Extreme Programming]]). And depending on criticality, the project might need an informal code check-in procedure and as-needed [[code review]]s. (McConnell 1996:48)
==Testing==
* [[Performance Engineering|Performance]] (download speed)
Many types of tests are [[Test automation|automatable]]. At the [[ UnitComponent test| unitcomponent]] level, one of the [[XUnit|xUnit]] packages can be a helpful tool. Or an organization can create its own unit testing framework. At the GUI level, [[Watir]] is useful. ▼
===Unit and GUI test automation===
▲Many types of tests are [[Test automation|automatable]]. At the [[Unit test|unit]] level, one of the [[XUnit|xUnit]] packages can be a helpful tool. Or an organization can create its own unit testing framework. At the GUI level, [[Watir]] is useful.
==Deployment==
Deployment describes what software runs on which hardware. The act of deployment involves installing the necessary software on the hardware. Again, depending on the formality of the project, the deployment procedure can be either formal or informal.
==Tools==
* [[CakePHP]]
* [[.NET Framework|.NET]]
===Building Reusable Components===
Evidence suggests that smaller, more specific components are better targets for reuse than larger, more generalized ones. (McConnell 1996:533) And it pays to question whether or not reuse will be worthwhile in the end. For example, if you only plan to build one photo sharing web site, the resources put into making your components reusable might not pay off. But if you plan to build several photo sharing web sites, reuse is almost necessary. (McConnell 1996:492)
==Search Engine Optimization==
In the case of a public web site, as opposed to an [[Intranet]] or otherwise private site, it is usually very beneficial to have high [[search engine]] rankings.
{{Sectstub}}
==See also==
|