Managing and throttling serverless scaling with Azure Functions

3 October 2017

The serverless promise of unlimited scale-out can be a curse when your downstream processes and data stores have strict limits on throughput. With Azure Functions your options for mitigating this are limited, though the new durable functions may provide an answer…

How can Domain Driven Design help with large scale agile development?

20 September 2017

Agile teams spend time modelling software whether they are prepared to admit it or not. Adopting a technique like Domain Driven Design can help to make this more efficient, particularly at scale.

Running a .Net Core console application as a Windows Service

3 September 2017

Although .Net Core does not directly support creating Windows Services there are several different ways of creating applications that can be registered and run as services.

Are OpenAPI and Swagger trying to turn REST into SOAP?

14 August 2017

Open API and Swagger enable the same kind of automated discovery and integration that WSDL and SOAP were invented to support. In doing so they undermine the design of REST APIs and don’t even provide adequate documentation.

The poor man's Cassandra: scaling Azure Table Storage to maximise throughput.

22 July 2017

Azure Table Storage can be tuned for high throughput workloads, but you’ll probably be faced with some difficult trade-offs.

When does refactoring become rewriting?

19 June 2017

Refactoring describes a very specific and controlled technique for improving code. The problem is that it is often used to describe wholesale changes to code bases that should be treated as a rewrite.

Can consumer-driven contracts manage breaking change in microservice integrations?

4 June 2017

One of the more enduring problems with service integration is managing change in service interfaces. Consumer-driven contracts can help to detect breaking changes, but this visibility comes at a price.

Comparing serverless C# and .Net development using Azure Functions and AWS Lambda

26 May 2017

Recently released toolsets for AWS Lambda and Azure Functions are finally making serverless application development available to C# developers.

API management and the return of the enterprise service bus

16 May 2017

No self-respecting integration platform is complete without an API management story these days. Is this just a RESTful return of the enterprise service bus?

Using Docker to build and deploy .Net Core console applications

12 April 2017

Using Docker with .Net Core is initially straightforward, but to get beyond basic image building you will need to handle more than the simple scenarios demonstrated in quick-start guides.

Architectural governance can be used to foster innovation. No, really.

3 April 2017

Governance doesn’t have to be all about byzantine process and suffocating approval boards. It can be used to provide clear permission for teams to innovate.

Sharing libraries between .Net Core and .Net Framework applications

10 March 2017

Although .Net Standard does provide a mechanism for sharing assemblies between .Net Core and .Net Framework applications, as ever, you’re still very much constrained by your dependencies.

A simple (yeah, right...) guide to using Redux with React.js

12 February 2017

Learning React.js always starts so well, but adding Redux into the mix can make things unnecessarily complex. The lack of accessible examples doesn’t help - this is an attempt at writing a stripped down, bare bones introduction that focuses on the main ideas behind Redux.

Why agile software architects should write code

28 January 2017

No architect will ever admit to being out of touch with software development. However, unless you are writing code then it’s difficult to avoid becoming an ivory tower or PowerPoint architect that can only discuss systems in the abstract.

Event stores and event sourcing: some practical disadvantages and problems

7 January 2017

Event stores and event sourcing are a powerful idea, but they can be vulnerable to a number of technical and operational challenges when faced with real world complexity.