Skip to main content
Software Engineering

Our proven process

Our software development process is the backbone of any project we embark on. Whether we’re developing a simple concept demonstrator or a life-critical medical device, the same fundamental steps apply. The key to successful software delivery lies in the management of those steps.

Balancing the critical design goals with a measured approach to risk management, we aim to deliver functional, quality outcomes. We are continually reviewing and refining our development process in order to improve efficiency and align with the latest standards and regulations.

Balancing critical design goals and risk management

Risk management

Our risk management approach underpins our software development process, with the degree of focus on particular activities such as hazard analysis, software risk analysis and risk mitigation tailored to suit the nature of the project. Risk management is a continuous activity, as risks can be identified at any point during development, and it is important these are documented and mitigated appropriately. It is vital that risk management starts at the beginning of the project to avoid unexpected complications later on.

Tailoring the approach

Different projects require a different degree of focus on each of the programme steps throughout the development process. This may be driven by the regulatory and approvals demand of your industry, the safety-critical nature of your product or your own specific development systems.

Our experienced team work to identify the steps of our proven software development process that are most relevant for your project and determine the appropriate level of specification, risk management and testing. This allows us to deliver tangible software deliverables with the right level of documentation.

Planning

The key to success in any project lies in the planning. We take your important project milestones and determine which software activities need to be performed to what level of rigour in order to achieve them. We can work to a waterfall method of specification, implementation, test, and release, or we can iterate through many smaller, agile cycles to provide you with frequent, incremental releases.

We work with you to agree on the most suitable approach, but we also know things change over the course of the project, and we can update our plan to adapt to the changing environment.

Specification and high level design

The majority of software bugs and functional defects can be traced to inadequate, ambiguous or simply incorrect requirements capture. Establishing a comprehensive software specification and developing the architecture early in the project is critical to delivering software that works, within controlled and agreed timescale and budgetary targets.

We may be able to deliver incremental software releases that focus on different features or requirements as they become better understood through the project, but a high level design is crucial in avoiding unexpected incompatibilities.

Implementation

With an architecture and a high level design established, the implementation can begin. We use in-house coding standards to ensure our software avoids common pitfalls, code review processes to catch potential issues early, and source control systems to provide regular, retrievable snapshots of the development.

We have years of experience in various languages such as C, C++, C#, Python, Java and Kotlin – even Assembler if the need arises. We are comfortable with many development environments, including Eclipse, Gnu, Keil µVision, IAR Embedded Workbench, VS Code and many more. We are also very quick to adapt to new languages and environments, so we can tailor our approach to any specific requirements you may have.

Testing

Software testing is an iterative process, carried out at multiple levels from unit tests up to high level software system testing. The earlier in the process we can start testing software, the more time and effort can be saved in resolving any identified issues. Test planning is an important part of the process and can even help us plan and structure the software architecture to support the proposed testing approach.

Using the appropriate tools for the job, such as static analysis and code coverage tools, we can identify and resolve bugs before they make it into a release. A combination of black box and white box testing allows us to cover the full spectrum.

Once we have proven the software performs as specified, we can lean on our multidisciplinary team to test the product as a whole in order to identify any issues resulting from the integration of the software, electronics and mechanical aspects of the system. Our goal is not just software that works, but a product that works and meets your customer’s needs.

Release

Our software release process ensures that you know exactly what software you are receiving and for what purpose. Automating the build process as much as possible means we can make releases quickly and easily when you need them, whether this is to support an internal stakeholder session, a third party activity or the completion of the project. Being able to roll back to previous releases means any changes can be reversed without impacting the project schedule.