Writing software can be a very complex and time-consuming task, involving a
whole team of software engineers and other specialists. As a result, many
methods and practices, which make the life of programmers easier, have
emerged. All they have in common is that the development of each software the product goes through several different stages:
- Gathering the requirements for the product and creating a task;
- - Planning and preparing the architecture and design;
- Implementation (includes the writing of program code);
- - Product trials (testing);
- - Deployment and exploitation;
- - Support
- The type of the application – for an example console application, desktop application (GUI, Graphical User Interface application), client-server application, Web application, Rich Internet Application (RIA), mobile application, peer-to-peer application or other;
- The architecture of the software – for example, single layer, double layer, triple-layer, multi-layer or SOA architecture;
- The technologies that will be used: platform (Microsoft .NET, Java EE, LAMP or another), database server (Oracle, SQL Server, MySQL, NoSQL database or another), technologies for the user interface (Flash, JavaServer Faces, Eclipse RCP, ASP.NET, Windows Forms, Silverlight, WPF or another), technologies for the data access (for example Hibernate, JPA or ADO.NET Entity Framework), reporting technologies (SQL Server Reporting Services, Jasper Reports or another) and many other combinations of technologies that will be used for the implementation of the various parts of the software system.
- The number and skills of the people who will be part of the development team (big and serious projects are done by large and experienced teams of developers);
- The development plan – separating the functionality in stages, resources and deadlines for each stage.
- Others (size of the team, locality of the team, methods of communication etc.).