Skip to content

Jamie Wright Posts

Automated Deployments- An easy in with Octopus Deploy

Great news! Octopus Deploy is now offering a starter edition for small teams free! You can find their announcement here. Why is this great news? One of the key things that I have come to learn in the last few years is the importance of slick operation management. Lots of companies like to band around the word DevOps – but really it just automating things for our own sanity. Octopus Deploy has become a key player in deployments and has made my life so much easier. Deployments are a single click (well, a few clicks in some cases) and take…

Health checks in .netCore web APIs

Previously I have been writing health check controllers by hand. Now .netCore has a simple way of managing service health checks via middleware. You can test everything is operational all the way down to the database. You can even write your own custom checks in a few lines. A simple service operational health check can be enabled by adding two lines to your startup.cs file. One in the services configuration and one in the application configuration. The “/health” parameter specifies the route to be used for the health check. When navigating to the route, a message will be displayed on…

Running web apps in a Docker container

Running web apps in a Docker container requires a little more set up than just running your standard back end services. This method requires that your app be wrapped by .netCore as recommended by Microsoft when creating a SPA. This allows you to deploy everything as a simple DLL. The only change that is required from a normal container deployment for a back end service is the container itself. Most front end frameworks these days use NodeJS. We either need to ensure that this is already installed on the container image we are using, or install it in the container.…

Kubernetes – Terminology

If you haven’t worked with Kubernetes or any orchestration system before, starting can be a bit like jumping in the deep end of a pool. Most developers won’t have been exposed to the terminology spread throughout the product This can make figuring out what is going on all the more difficult. Below I have tried to give a simple high-level overview of the main components of Kube, and the relationships between them. The node This is a worker machine – or minion. This is usually a VM or physical piece of hardware and is where your programs are run. The…

NUnit test cases

Testing multiple scenarios through the same function can be a bit of a time sink. Writing out a method for each scenario and just changing the data passed into the function then checking the output against the expected result. Steve Fenton showed me NUnit test cases the other day though which make running multiple permutations of data against a result set a breeze! They have been around a while I think, but I somehow missed that boat. See below for a simple example of how they work. The test above will check multiple combinations of inputs against the expected output…

Refactoring – Flocking rules

I have always been a fan of Sandi Metz, and have finally got around to her book 99 Bottles of OOP. A key takeaway so far from this has been the flocking rules for refactoring. The name derives from the small changes an individual bird makes in a flock that is then reflected by all the other birds so everyone ends up going in the right direction. The premise is fairly simple, make small incremental changes that only change a single thing a time. A lot of people think they do this already, however small is not small enough in…

C# Interfaces and default method implementations

The upcoming C# 8.0 release came up the other day, or more specifically the inclusion of default implementations on interface methods. At first glance it seems akin to madness, blurring the line between implementation and inheritance. We already have abstract classes that cater for this, so why the need? Taking a little time to dig a little deeper though, and I think it does make sense and could be extremely powerful. The caveat being that it isn’t abused, which it most certainly could be. Using it looks to be pretty straight forward. You simply provide a method body on the…

The fragmentation of UI frameworks and structuring for the future

The highway of UI Given the fast moving space in which modern UI frameworks operate, its more important than ever to have some methods behind the madness. Adhering to some SOLID OO principles to help keep code clean, maintainable and most importantly; separated from the functions of the user interface. The most important of these SOLID principles in this case is the separation of concerns. By keeping the actions of the UI separate from the logic behind it we allow portability. A lift and shift exercise can be reduced from a back breaking week to a nice easy afternoon. Great,…

Why Limit WIP

I have worked with WIP limits before without really understanding why we have them. They appear to be just some arbitrary number on a board that people roughly try to stick to with no understanding of why. Why is normally the most important question! Normally it is very hard to do the doing without the understanding of why backing it up. I am personally trying to ask why a lot more, and so I decided to pick up a book which was recommended to me, “Why Limit WIP: We are drowning in work” by┬áJim Benson. It is truly an excellent…

Critical thinking in software development

Critical thinking is a key skill when it comes to software development. Being able to diagnose a problem and find common causality can save hours of effort and frustration. However it seems to be a skill that is often overlooked and undervalued. Sometimes you hear the phrase “10x” developer thrown around. This is a developer that can do ten times the amount of work in a given time than an average developer. Whether or not this is true is another argument altogether, however I would suggest that critical thinking skills and not development skills would account for much in this…