Just like it takes many more people than actors and cameramen to make a film, developing a software product requires combined paced efforts of different specialists besides developers. So, what happens behind the scenes at an IT company and who are the key figures involved at certain stages?
Big companies usually adopt a certain software development life cycle (SDLC) to make their workflows uniform and the results – predictable. Basically, SDLC means a set of distinct phases and best practices which all have to be completed to achieve the desired results. Over the decades, the IT community has framed a number of methodologies, with some common approaches being:
- Spiral model
- Rapid application development
- Extreme programming
Each approach has devoted adherents as well as diehard sceptics, and we must admit that none of them can claim to be completely fault-free. So, when choosing a methodology it is essential to take into account the needs of the project on hand. The following professionals jump in the project at different stages:
1. Conceptualization and Analysis
At the core of any software product there is a problem that it solves or an opportunity it creates, and at this stage the idea of the future solution is born. At first Subject Matter Experts (SME) (also called a Business Owner or a Product Owner) who are usually not IT people and work on the Customer’s side closely cooperate with the Business Analyst (BA) to formulate clear, concise, non-conflicting requirements to what needs to be built.
Then these requirements come under scrutiny to pass a check for feasibility. This is done to validate if the proposed system is technologically possible. One should also assess for financial viability to see if the implementation costs can be met. The cost/benefits analysis may also require participation of a Market Researcher and a Solution Architect.
This stage usually consists of two parts: high-level design (HLD) performed by the Solution Architect and low-level design (LLD) further implemented by the Team Lead or Senior Developers. The purpose of the former is to create an overview of the whole system and identify its key elements. As a result of the latter, the team works on a technical specification – a detailed description of the features – and breaks it down into smaller chunks to be developed.
The visual appearance of the system and the user experience are also planned at this stage by the Design Architect or User Interface and User Experience (UI/UX) Specialists.
Sometimes in case of the test-driven development, this stage already involves the Test Manager to work on the test cases and user scenarios to be used while the system is underway.
Once the requirement have been analyzed and the specification has been handed over to the Development Team, they can get down to coding. The team size may differ in number of people, but typically there will be several Senior Software Engineers as well as some Mid Developers and in some cases Juniors to handle routine tasks.
The Team Lead (or Development Manager) splits the tasks among other team members, supervises the process and reports to the Project Manager who controls that the project is delivered on time.
Sometimes implementation may interweave with testing: each time a feature is completed, it is immediately tested to detect and fix any bugs as early as possible and avoid expensive rework.
To guarantee that the developed solution corresponds to the system requirements the Testing Team checks it from the points of view of functionality, performance, volume and load scalability and security. Quality Assurance (QA) Engineers push the system to its limits to identify potential loopholes and weakness and then report bugs to developers.
After the bugs are fixed and the system is retested, the Testing Engineers may also involve a sample group of End Users for beta testing in the real business environment, sometimes it is also called User Acceptance Testing (UAT).
5. Deployment, User and Technical Training
When the software is ready to be launched, the Installation Engineers do the job making it available full-scale to the end users. A Technical Writer creates manuals and product descriptions to guide the users through the new system. In some cases Technical Training might be needed to help the system administrators to smoothly get going and make the full use of the functionality.
A few Software Engineers from the team keep on doing background work to maintain the solution and gather requests for changes, improvements and features to be implemented in the further releases. Maintenance work can be of different nature: corrective (to fix any problems and bugs discovered after the deployment), adaptive (to ensure that the projects stays up to date in the changing environment), perfective (to boost its performance) and preventive (to pinpoint latent flaws and deal with them before they can do any harm).
The Support Team deal with the user feedback and help them to troubleshoot and resolve any performance issues.
To ensure that a project is completed within the time and budget and the created solution does everything what it was meant to do, custom software development
has to be a well-orchestrated process. This would be equally true for both a small one-man PHP job as well as a long-term complex Java assignment.
Naturally, with regard to the project scope, resources available and tools used, some roles may be interchangeable or excessive, but still this overview provides a broad picture of all the issues that should be covered in a development plan.