CI/CD for outsourced software development

This time I’m back in the trenches after the high-flying in show business in the last post.

I’m still using film business as an example as I’m not allowed to talk about projects I’m doing as a employed consultant for different clients.

Introduction

As you may recall, the tool-chain for collaboration in film production is not scalable as we have a number of process bottlenecks. 

One way of solving those issues would be to develop custom integrations and custom apps for our users.

As we all know, custom development takes time, is expensive and costly to maintain. So if we develop an CI/CD pipeline and a software architecture for microservices, would custom development be more feasible?

I have also been in the IT business so long that I know that you can’t give free hands to developers if your want things to work together. At least not for a very long time.

Solution concept

We made an example of a high-level design that used micro-services three years ago, and we could probably re-use parts of those thoughts.

Our strategy is that we will not run any application servers on-premise. Everything should be on cloud as we don’t have internal resources for support.

Our main Directory and some of the applications (Microsoft Office 365) are in Azure. The other shared applications are hosted on AWS by their respective suppliers.

We also use Postlab in Cloud as a repository for film edits, and this service is based on github.

Solution concept

So far, this is more of a green-field operation as we only use COTS solutions. For those with legacy code, it’s much more complex.

If we look at a full CI/CD cycle, we talk about Edit code, Build, Test and Deploy in production, and at the same time assure software quality.

CD : CD flow.jpg

We also need to have environments for development, test and production. In addition to this we need test data.

But we don’t want it to complicated or expensive, therefore open source solutions is a good alternative. It also makes it easier to be vendor agnostic.

As the software we develop will give us a competitive advantage, (why bother otherwise), we need to protect our source code. Something that have an impact on using open source.

We assume that if we use containers for both our source code and tools, will it be easier to maintain them and to replace them later on.

Having a UNIX-background, unless going serverless, I would suggest Virtual Linux servers, Eclipse, Docker, Github , SonarQube and Jenkins as a start for the tool-chain, but also we need to evaluate Microsoft options.

If needed, we could even do a PoC on a new Raspberry PI as a server and host our hello world examples on a private GitHub in the cloud.

Summary

By using a standard CI/CD flow for all new software development, our assumption is that we can reduce the cost of developing and maintaining bespoke solutions.

The other question is when manual processes will be to slow and/or to expensive compared to development of new functionality.

Custom software development blues

There are two main challenges with customer software development, compared to using package based software.

The first one is how to be ready in time, on budget and with the fulfilment of requirements. This is especially true when you develop a system that would replace something existing. 

The other is more long term and how to build a bespoke solution that could be maintained over the years. If it’s a bigger investment and core business, you will need to develop a solution that there for many years.

On the other and, package based solution with to much customer based code inside is also very cumbersome to maintain, so as a decision maker you are between a rock and a hard place.