We've helped some of the largest public and private sector organisations on their digital journey.
At a high level, we think that the process to successful project completion can be fundamentally broken down into three categories in a specific order - Analysis, Design and then Build. We follow these principles throughout all of our work, continually iterating until project completion.
We choose to operate our projects using agile methodologies, usually SCRUM, or KANBAN - waterfall has never proven to lead to successful project deliveries in our experience.
DevOps means different things to different people, for us it consists of a few fundamental concepts.
This one may seem to be totally obvious, but the architecture of your platform should be designed with performance and scalability in mind - applied sensibly this can actually represent some significant cost savings.
Employing auto-scaling and self-healing systems can also dramatically improve your customer experiences and free up time from your development and operations teams.
All of the code produced by your teams should be stored in a proper version control system, this ensures that changes are properly tracked and enables quick rollback of features should the need arise.
An effective version control strategy should always include pull requests, all code changes are then subject to peer review prior to inclusion into any output product or application - this is one of the most effective ways to catch defects early.
Employing proper configuration management ensures consistency and repeatability throughout all of your infrastructure and application deployments.
Your configuration tooling should be fully idempotent so that no unexpected configuration changes can make it into your builds.
Automated testing should be employed across the board for both business logic and infrastructure, empowering your developers and operations teams to ensure consistent releases and a considerable reduction in error rates.
Utilising continuous integration (and where appropriate continuous delivery) pipelines ensures a smooth path to production and should tie together tooling for the assessment of code quality, security auditing, integration testing and overall stability before your code makes it into production.
Your applications should follow a consistent versioning scheme.
Artifact management should extend well beyond just the output binaries/scripts for your applications, it should also manage cached copies of any dependencies - the last thing you need is for your applications to break due to an issue with an upstream repository.
Your applications, endpoints and systems should be should be continually monitored stability and performance and where possible trigger scaling events and other resiliency methods.
Your applications should output log information that is detailed enough to reproduce any error conditions or provide enough context for proper auditing in the event of a breach or failure of service.
These logs should be repeated to a centralised and highly available logging system to prevent their loss in the case that the instance(s) that generated them become unrecoverable.