Last Updated: 5 January 2021
We use the latest best-of-breed software development tools to enable us to work as effectively and efficiently as possible. We pride ourselves in creating good quality, maintainable code which results in a more stable, bug-free product that your end users will love. To help achieve this goal, we use Continuous Integration (CI) and Continuous Deployment (CD) automation mechanisms on platforms such as Microsoft Azure DevOps, Docker and Rancher. All code we write is analysed for bugs, code smells and security flaws by SonarQube.
Find out a bit more about how we create great software from the highlights below.
The default tool for virtually all of our software development. We also support most previous versions of Visual Studio, including Visual Studio Code.
Although there is still a need for on-premise deployment of .Net, .Net Core and SQL Server workloads on Windows Server and IIS, there are many great benefits to deploying to the cloud. We have experience with 100% cloud-orientated systems leveraging Microsoft Azure as well as hybrid solutions where parts of the system remain on-premise. Azure can be used to deploy traditional .Net applications that would normally be hosted in IIS, as well as containerized front ends, APIs and other tools. We can advise on how to best use Azure SQL databases, Azure Service Bus message queuing and other Azure resources.
For today's mission-critical, super-scalable and highly available applications, we recommend .Net Core (or Asp.Net Core) and Docker. We generally prefer to build Linux-based images, which are smaller and can be deployed without the need for expensive operating system licensing.
Our free Microsoft Azure DevOps Build Screen app for displaying the status of your builds is distributed on Docker Hub.
For critial transactional database systems, and in keeping with our utilisation of the Microsoft stack, SQL Server is a high performing and highly available RDBMS that forms the data tier of many of our bespoke applications. For price sensitive projects, and where data storage volumes are low, we also use the free edition, SQL Server Express.
We can support all versions of Microsoft SQL Server including 2012, 2014, 2016 and 2017 - including versions running on Linux. We also have experience with running SQL Server in a containerized environment using the offical Microsoft SQL Server Docker images.
Azure Dev Ops is our first choice for both Git source control and agile .NET development workflow management. We have in-depth experience of setting up automated builds that are tailored to your team's needs. We regularly set up Continuous Integration (CI) and Continuous Deployment processes for our clients, and also have a selection of custom Build Actions available - such as auto assembly versioning, service password generators, and more. Last year, we managed the migration of very large TFSVC code repository into nearly 100 individual Git repos. This was done in such a way that the 60-strong development team experienced no inconvenience or downtime, and the process was completed in its entirety on a Saturday afternoon.
Rancher is a complete software stack for teams adopting containers. It can manage multiple Kubernetes clusters across any infrastructure, while providing DevOps teams with integrated tools for running containerized workloads. Compatible with Kubernetes hosted on your favourite cloud provider including Amazon EKS, Microsoft Azure AKS and Google GKE, or with your own on-premise clusters installed on your own virtual or physical servers.
Rancher has a quick learning curve and a beautifully simple web UI, and can be integrated easily with your DevOps workflows such as Azure DevOps build and release pipelines, or Jenkins.
This renowned productivity tool has truly awesome code inspections, automated refactoring features and simply brilliant all-round coding assistance. This tool improves the speed and quality of our code, and after many years of using it we wonder what we'd do without it. We are always happy to introduce ReSharper to new users, and teach them how to code smarter and perform complex but risk-free refactoring.
nCrunch is our favourite tool for automated execution of unit tests in the background while we are writing code. It provides instant indication inline with our actual code to indicate which lines are covered, which aren't and which unit tests are passing or failing.
There are several free file comparison tools on the market, but we use Beyond Compare - which really lives up to its name. We prefer Beyond Compare's smart diff view and three-way merge - a must when integrating complicated pull requests. Integrates seamlessly with Visual Studio and Git to replace the default merge/diff tools.
After testing several productivity alternatives to using the Git command line - including the popular Git Kraken and Source Tree - we settled on Git Tower. Tower works perfectly with Visual Studio, TFS and Azure DevOps (with repository cloning direct from the Web UI), this tool also supports Git Flow, Git LFS and GitHub out of the box. Tower has a neat, beautifully clean user interface and is available for both Windows and macOS.
SQL Sentry is a great way of crunching the information that SQL Server spits out in the form of a Query Plan. The visualization of complex stored procedure call trees allows us to identify the root cause of performance bottlenecks quickly and accurately.
We use the ANTS suite of tools for finding performance bottlenecks in .NET and SQL code. To date our greatest success with this tool was to reduce a custom Windows service from using 20GB of RAM to just under 8GB. Although ANTS Performance Profiler has a fairly steep learning curve, we are always pleased to transfer knowledge to your dev teams. The latest profiling tools in Visual Studio mean we are using ANTS less and less these days, but it's still useful when we need to roll out the big guns.
We like to use Selenium for creating robust, browser-based regression and other automated UI tests. It's free and supports most browsers, and we can implement a testing framework for you that targets multiple browsers simultaneously, thus vastly reducing the time required to run your entire test suite.
One less common use of Selenium involves using it as a headless browser to implement automated web bots. For example, we might implement a web bot to perform 'screen scraping' of data from legacy web based applications, or to automate processes from closed or third party systems.