Software Engineering - Winder.AI Blog

Industrial insight and articles from Winder.AI, focusing on the topic Software Engineering


GitOps for Machine Learning Projects

GitOps for Machine Learning Projects

Fri Mar 11, 2022, by Phil Winder, in MLOps, Software Engineering

Not so long ago, developers used clunky consoles to provision infrastructure and applications. It wasn’t long before someone realized it was better to automate such a process via scripts and APIs. But it wasn’t until Hashicorp showed that APIs were not enough. Their insight was to declare a canonical representation of the infrastructure. You can then reconcile this declaration against the live view of the infrastructure. In 2015-16 we helped WeaveWorks develop their cloud monitoring platform.

Developing a Real-Life Project

Fri Jun 12, 2020, by Phil Winder, in Software Engineering

I’m often asked questions in the vain of “how did you figure that out?”. Other times, and I’m less of a fan of these, I get questions like “you estimated X, why did it take 2*X?”, which I respond with a definition of the word estimate. Both of these types of questions are about the research and development process. Non-developers, and especially non-engineers, are often never exposed to the process of research and development.

Local Jenkins Development Environment on Minikube on OSX

Mon Mar 11, 2019, by Phil Winder, in Software Engineering, Cloud Native

Developing Jenkinsfile pipelines is hard. I think my world record for the number of attempts to get a working Jenkinsfile is around 20. When you have to continually push and run your pipeline on a managed Jenkins instance, the feedback cycle is long. And the primary bottleneck to developer productivity is the length of the feedback cycle.

How to Test Terraform Infrastructure Code

Wed Aug 22, 2018, by Phil Winder, in Software Engineering, Cloud Native

Infrastructure as code has become a paradigm, but infrastructure scripts are often written and run only once. This works for simplistic infrastructure requirements (e.g. k8s deployments). But when there is a requirement for more varied infrastructure or greater resiliency then testing infrastructure code becomes a requirement. This blog post introduces a current project that has found tools and patterns to deal with this problem.

Research-Driven Development: Improve the Software You Love While Staying Productive

Research-Driven Development: Improve the Software You Love While Staying Productive

Mon Oct 16, 2017, in Software Engineering, Talk

Slides Abstract Have you ever wondered which parts of your job you love or hate? Chances are that like most developers you love learning and new problems to solve. You hate monotony and bureaucracy. You’ve probably put strategies in place to mitigate the things you don’t like. An anarchic development process like Agile, to reduce the amount of time in meetings. But have you ever thought about the way in which you approach learning and problem solving?

How to use Javascript Promises to lazily update data

Fri Apr 7, 2017, in Software Engineering

Last week I was working on a simple implementation updating a shopping cart for a site, the frontend was written in html/javascript. The brief - when the quantity of an item in the cart was modified the client could press an update cart button which would update the cart database, after which it was necessary to recalculate the total values of the order and refresh the page with the new totals.

Surprise at CPU Hogging in Golang

Tue Jan 3, 2017, by phil-winder, in Software Engineering

In one of my applications, for various reasons, we now have a batch like process and a HTTP based REST application running inside the same binary. Today I came up against an issue where HTTP latencies were around 10 seconds when the batch process was running.

After some debugging, the reason for this is that although the two are running in separate Go routines, the batch process is not allowing the scheduler to schedule the HTTP request until the batch process has finished.

Gocoverage - Simplifying Go Code Coverage

Tue Oct 11, 2016, by phil-winder, in Software Engineering

Go introduced vendoring into version 1.5 of the language. The vendor folder is used as a dependency cache for a project. Because of the unique way Go handles dependencies, the cache is full code from an entire repository; worts and all. Go will search the vendor folder for its dependencies before it searches the global GOPATH. Tools have emerged to corral the vendor folder and one of my favourites is glide.