Delivering high quality software successfully requires a mixture of applied components. One size most certainly doesn't fit all when it comes to getting it right.
The development of customised software, designed meticulously from the ground up, requires a blend of consistent, proven structure with a hint of project specific creativity. Delivery of each project requires a tactile approach to nurture it into being. This is achieved through a combination of planning and focused project management. Our chosen methodology is a combination of rigor, agility and principles from PRINCE2, Rational Unified Process and agile development.
Here’s a summary of the key strategies and concepts we employ for delivering high quality software on time.
Schedule to succeed
Delivering software on time starts with a well-defined and realistic schedule. We set small, frequent deliverables, which makes it easier for the project leaders to track progress and detect slippage early. We also schedule the “big rocks first”, and aim to get the most important and potentially most risky features completed early in the project.
We’re diligent about tracking progress on a daily basis over a project extranet, and on a weekly basis in status meetings, so that both our team and our customer are in tune with the schedule.
Functional specifications in iterative development
The key to keeping everyone in the loop and making sure the product is something stakeholders will actually buy is creating a solid functional specification. In new product development, the functional specification is a living document and prototype that can change with customer feedback or market demands, and must be kept up to date and made available to every team member.
Common development environment
For every project, we define a common environment, so that all members of the development team are using the same platform, the same tools, and a common set of coding standards.
Quality
Software quality starts with a comprehensive test plan that verifies functionality, performance, reliability and compliance with requirements. We believe quality is the responsibility of the entire development team, not just the QA team. We aim to have a working build as early as possible in the project and keeping the application in a working state as we add features. This way, the software testers and our quality assurance team can start verification early in the process. We use industry-standard issue tracking systems to track change requests and defect reports throughout the lifecycle of the project.
Communicate
One of the biggest issues in software development is communication. We designate a single-point of contact with the customer, and use a secure extranet so that everyone involved has access to the latest documentation and latest build for the project.
We also make extensive use of our collaborative intranet, so that the whole company can benefit from every team member’s knowledge and research. Tracking project knowledge in a collaborative portal also helps track the legacy of decisions, and eases the knowledge transfer at project delivery.
Project management
Our project management practices aim to create a tight feedback loop between our customer and the project team, to provide transparency with the client in the development process, and to ensure the project is on schedule and on budget through frequent milestones and consistent follow up.
Day-to-day project management
- Weekly team meetings to coordinate activities of the team members and bring everyone up to speed on current project status
- Communicate the “big picture” to the team so that everyone is motivated towards the common goal
- Automated web-based timesheet system so that project managers have daily status reports from team members
- We set measurable targets and specific objectives
Meeting contractual commitments
- We set small, frequent milestones and deliverables so that we have regular, measurable updates on project status and can correct small slips quickly.
- Weekly review of the project schedule to ensure that the project is on schedule and on budget
- We will flag to the client as soon as we see something going ‘out of bounds’ for whatever reason – changing requirements, slipping dates, etc
Change and configuration management
Our software configuration management (SCM) system is a combination of tools, process, and teamwork, ensuring the delivery of higher quality software. Whilst the functional specification is being used as the software project "bible", in real life changes are needed during development and after release. Software changes are thoroughly planned, coded, tested and released just like any other software project, whether it is part of a larger project in development, or a change to a live system.
Source code control and version control
For source code and version control we use Microsoft Team Foundation Server, a highly reliable and flexible source code and version control system. All inputs to the project that are not static are version controlled, including:
- Source files
- Test scripts
- Design documentation and requirements documents
- End-user documentation
- Graphics
For issue and defect tracking we use BugTracker.NET, a highly configurable defect tracking system. We also have experience working with a number of other defect tracking systems including Bugzilla and ClearQuest, and can adapt to a customer’s environment when needed.
Quality management
Our quality assurance strategies combine both black box (manual) testing performed by the quality assurance team, and white-box testing performed by the development team. Our process dictates that it is the responsibility of the developer to produce defect-free code, so that the QA team can focus on assessing the state of the product.
We perform both white box and black box testing because we believe that neither method will uncover all defects. For example, while unit testing and peer code reviews can discover potential vulnerabilities or performance bugs that would be nearly impossible to trace with black-box testing, black box testing can uncover defects such as inconsistencies in the user interface, compatibility bugs, unanticipated error conditions, and timing related bugs that can only be uncovered by manual human testing.
For any further information on the methods we adopt, please contact us by phone, email or using the Contact Us form towards the top of this page.