Agile software development is a group of software development methods based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. It promotes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen tight interactions throughout the development cycle.
Agile methods generally promote a disciplined project management process that encourages frequent inspection and adaptation that allows for rapid delivery of high-quality software. Agile implementations use a routine and formal daily face-to-face communication among team members. Team members report to each other what they did yesterday, what they intend to do today, and what their roadblocks are.
There are many specific agile development methods. Most promote development, teamwork, collaboration, and process adaptability throughout the life-cycle of the project.
Iterative, incremental and evolutionary
Agile methods break tasks into small increments with minimal planning and do not directly involve long-term planning. Iterations are short time frames that typically last from one to four weeks. Each iteration involves a cross-functional team working in all functions: planning, requirements analysis, design, coding, unit testing, and acceptance testing. At the end of the iteration a working product is demonstrated to stakeholders. This minimizes overall risk and allows the project to adapt to changes quickly. An iteration might not add enough functionality to warrant a market release, but the goal is to have an available release (with minimal bugs) at the end of each iteration. Multiple iterations might be required to release a product or new features.
Efficient and face-to-face communication
No matter what development disciplines are required, each agile team will contain a customer representative. This person is available for developers to answer mid-iteration questions. At the end of each iteration, stakeholders and the customer representative review progress and re-evaluate priorities with a view to optimizing the return on investment (ROI) and ensuring alignment with customer needs and company goals.
In agile software development, an information radiator is a physical display located prominently in an office, where passers-by can see it. It presents an up-to-date summary of the status of a software project or other product.
Very short feedback loop and adaptation cycle
A common characteristic of agile development are daily status meetings. In a brief session, team members report to each other what they did the previous day, what they intend to do today, and what their roadblocks are.
Specific tools and techniques, such as continuous integration, automated unit testing, pair programming, test-driven development,design patterns, domain-driven design, code refactoring and other techniques are often used to improve quality and enhance project agility.
The various agile methodologies share much of the same philosophy, as well as many of the same characteristics and practices. But from an implementation standpoint, each has its own recipe of practices, terminology, and tactics. One of the main methodology contenders we use is SCRUM.
Scrum is a lightweight agile project management framework with broad applicability for managing and controlling iterative and incremental projects of all types. A key principle of Scrum is its recognition that during a project the customers can change their minds about what they want; Scrum adopts an empirical approach focusing on maximizing the team's ability to deliver quickly and respond to emerging requirements. Scrum has garnered increasing popularity in the software community due to its simplicity, proven productivity, and ability to act as a wrapper for various engineering practices promoted by other agile methodologies.
At Cosine Consultants, we approach every new project with a fresh eye always aiming for choosing the best approach to match the client and the industry it operates in.
Experience has shown that the use of modern structured techniques and methodologies provide a much greater degree of certainty that a project will result in meeting its stated objectives. For technology projects, we make use of our project management and software development methodologies that are based on PRINCE and SSADM, respectively. We use these two methodologies in combination to create a blueprint of our work regarding a project.
Our Project Management Methodology is designed to help us conduct technology projects effectively and efficiently. To that end, it provides a structured approach to addressing project organization, planning and control, monitoring and reporting.
Moreover, it has been designed specifically to enable project management to achieve its long-standing objectives: to ensure the timely and cost-effective production of all the deliverables; to maintain acceptable standards of quality; and to achieve the benefit for the enterprise for which the investment in the project has been made.
Going deeper into our approach to producing software, the methodology we use to develop a system involves tasks and activities that carry responsibilities in assuring the project success. We aim to develop systems that are of high quality and are addressing all the requirements as specified by the users.
The use of our systems development methodology, in combination with our project management methodology, ensures that our projects are always delivered on time and within budget.
Our software development methodology warrants the following project stages:
Stage 1 - Requirement Analysis
This stage aims at defining the requirements of the project.
Deliverables: Requirements Analysis Document
Stage 2 - Design and Specifications
This stage focuses on transforming the requirements in Stage1 into detailed design specifications, which will specify how these requirements will be met in terms of system functions, screens, fields and processes.
Deliverables: Design Specifications Document
Stage 3 - Software Construction and Testing
The third stage uses the software specifications that were the result of the prior stage, in order to construct the system based on the requirements.
Deliverables: New System (Application Software)
Stage 4 - Implementation
The implementation stage consists of a variety of activities which include setting up the technical operational environment, installing the software and training the users and the administrators of the new system.
Project initiation is marked by the selection of the resources to be involved in the project from the part of Cosine, but also from the part of the Customer. The objective is to create project champions to assist in the implementation process and make the whole project a success. To that end, the customer indicates the people to act as 'key users' and 'administrator' who will be trained by Cosine on one-to-one basis for that purpose.
Cosine offers extensive training to two types of users as specified above. Regarding the administrator training, it takes place in parallel with the project stages. Cosine is asked to assign a resource that will be trained by our expert consultant in a hands-on mode.
Deliverables: Documentation &Trained Users
Stage 5 - User Acceptance Testing
The primary purpose of this stage is to secure final approval and acceptance of the system from the users.
Deliverables: New System (configured, fined-tuned, tested) & Signed Signoff Letter
Stage 6 - Maintenance & Support
After the final acceptance (at the conclusion of Stage 5) all our customers are encouraged to go under a Maintenance and Support agreement so that we can continue supporting them with the following services:
• Assistance and advice in operating the system
• Software amendments (bug fixes)
• Software Fine Tuning
Cosine offers you expert and professional service and quality before we even present our packaged products or custom designed solutions.Only after we have fully understood your business, established its strengths and addressed its weaknesses, can we recommend the right products and ensure that you enjoy the maximum benefit of an integrated IT system.
Customer support is to IT, what a mechanic is to a racing car. At Cosine we want to make sure you stay on the fast lane and come out a winner.
Aiming to establish long-term relations with our clients, we have been working hard to maintain the high standards of our CYS EN ISO 9001:2008 Certification we have been achieving since 2006. Our support team is fully trained in the product area to provide excellent system maintenance services as well as in your environment to provide continuous, reliable support.
How do we assure Quality?
The tasks and responsibilities involved in assuring the quality of the project deliverables are complex and generally not well understood. Quality, although not clearly understood by many, has only one definition for us and that is ‘conformance to requirements’. Using this definition of quality the level of quality, or more practically, the lack of quality, can be measured in terms of defects or non-conformance aspects. Our approach to ensuring quality in software solutions is based upon the practices of quality control, quality assurance and quality planning, which are briefly discussed below.
The definition of quality control is ‘the operational techniques and activities that are used to fulfil requirements for quality’. In other words, quality control is checking for conformance to requirements. With respect to information technology and software engineering the two main quality control techniques are reviews and testing. We believe that it should be mandatory for all written material, whether it is produced internally, by the customer, or by a third party, is adequately reviewed and all software tested and approved before acceptance.
Quality control, although vital, is an after the event process. It is product based and results in either a pass or fail of the item being checked. Quality assurance, on the other hand, is the set of planned and systemic actions necessary to provide adequate confidence that a product or service will satisfy given requirements for quality. In other words, by planning in advance which documents will be reviewed and against what criteria and by specifying what will be tested and how we will ensure that all defects are eliminated. Quality assurance is, therefore, process based and is applied to projects from the beginning through planning, the application of appropriate standards and effective use of reviews and testing.
Quality planning is an essential part of the approach to project management and we view the importance of the quality plan on an equal basis with the project plan. We will work with the appropriate parties on the project to establish a quality plan, which will guide us throughout the project and will specify everything that needs to be done to ensure the quality of the product and service.
It will define the standards being used, the procedures to be followed and it will define which items are to be reviewed or tested and against which criteria. The actual scheduling of these activities is included in the project plan.