RSSAmplifier

Blog

Software Engineering

Recent content on Software Engineering

richashworth.comRSS feed ↗19 posts

Latest posts

Introducing Fidra: Monte Carlo Forecasting for Software Teams

Most teams I’ve worked with are asked to commit to delivery dates. The difficulty is that software timelines are uncertain, and a single-date commitment doesn’t capture that. When a team says “March 15th”, it’s unclear whether that’s a best case or a conservative estimate, and stakeholders will often hear it as a promise. Fidra is a tool I built to make these…

The Friction Matrix: Visualising the Cost of Tech Debt

This post outlines a practical, data-driven method for understanding how technical debt impacts upcoming deliverables. It helps teams and their stakeholders quantify where debt is creating the most friction so they can prioritise work to tackle it effectively.

Privacy Policy

This website respects your privacy and is committed to protecting your personal data. Analytics We use counter.dev for simple, privacy-friendly analytics. Counter.dev is a privacy-focused analytics service that: Does not use cookies Does not track individual users Does not collect personal information Only collects aggregate statistics about page views and visitor counts Data Collection The only…

Analysing Subtitles with Natural Language Processing

A write-up of how we used Natural Language Processing at ITV to analyse how different topics are represented in our content through subtitles. Link to article: https://medium.com/itv-technology/analysing-subtitles-with-natural-language-processing-4969071b9839

Building A Smarter Business With Event-Driven Architecture

Write-up of how we’ve used event-driven architecture at ITV to enable a data-driven approach to the content supply chain. By rearchitecting an existing message-driven, microservice-based system, we were able to introduce data and analytics capabilities without impacting feature development.

Decision-Making in Autonomous Teams

One of the most difficult aspects of a leader’s role is striking the right balance between giving direction and encouraging teams to make decisions independently. While experience may suggest that a particular approach is likely to be the most effective, it’s unlikely to be successful unless the team commits to it. There’s also a chance that better solutions exist, and given the…

Interactive Kotlin with kscript and fswatch

Experimenting with snippets of code and getting rapid feedback is a good way to get up to speed with a new language or library. I’ve been using Kotlin and Λrrow at work this week, so have been looking for tools that help achieve this workflow. Worksheets in IntelliJ provide some of this functionality, but personally I prefer the immediacy of a text editor and the command line for this kind…

Scala Central: Functional Design Patterns in Scala

Video recording of a talk I gave on functional programming at a Scala Central meetup.

Moving to a Startup: The Changing Role of Dev Manager

Moving from the corporate world to a startup can be an exciting and rewarding experience. As a technical leader, there is a lot to adjust to in terms of what the new environment demands from the role. That said, there are a number of valuable lessons that can be applied from the corporate world. Having made the move myself, I was invited to discuss this on the latest episode of the Venturi’s…

Functional Design Patterns in Scala: 3. Monads

Learning (and subsequently trying to explain) monads has become something of a rite of passage in functional programming. Burrito analogies aside, the most helpful description I have come across is given by Noel Welsh and Dave Gurnell in Scala with Cats : “A monad is a mechanism for sequencing computations .”

Functional Design Patterns in Scala: 2. Lenses

Case classes provide a convenient way of working with immutable objects in scala. Manipulating fields within them can be tedious, however. In this post, we will look at how lenses can be used to abstract over this complexity while preserving the benefits of immutability.

Functional Design Patterns in Scala: 1. Monoids

Monoids are used to describe an aggregation pattern: whenever we need to combine values of a particular type, a monoid instance helps abstract the mechanics of the aggregation from the program’s business logic. In this post, we will use the LCD Digits kata that we tackled previously as a motivating example for applying this pattern. The goal here is to transform a sequence of input digits into a…

Agile Estimation For Distributed Teams

The teams I’m working with use Planning Poker to estimate the size of user stories. This has proved to be an extremely useful activity, and we rely on it to plan upcoming work. In the past, we used special card decks for this, which worked well when everyone was based in the same room. However, with team members now distributed across two continents, this quickly became less effective. To…

Steve Reich’s Clapping Music with Akka

Using functions to express musical ideas is nothing new: Harmony, time signatures, the relations between notes in a scale and musical form all have their roots in mathematics, and composers have used mathematical abstractions for millennia (see Pythagorean Tuning for a 2500-year-old example). These abstractions, however, are not always obvious from they way that music is written down, leading to a…

LCD Digits Kata with Scala

I recently attended one of the coding dojos run by the London Scala User Group . It was great fun, and I’d recommend getting involved to anyone who’s interested in meeting other developers and learning more about scala and functional programming. After breaking into groups, we set about tackling the ‘LCD Digits’ problem from cyber-dojo.org . Although fairly straightforward as a programming…

Turbocharge Your Mocking Framework With PowerMock

As mentioned in my last post, I am an ardent fan of the Mockito Framework . Originally developed as a fork of EasyMock , it equips developers with the tools to create mock objects using clean and expressive code. In this post, we will show how PowerMock can be used alongside Mockito (or EasyMock) to create mocks for classes that appear at first ‘unmockable’. Suppose we have the following class:…

Using Reflection To Create Mock Objects

Well-established tools like Mockito and EasyMock offer a powerful range of features for defining and interacting with mock objects. I use both heavily in my unit tests, and would recommend them to anyone looking for a mocking framework. Sometimes, however, a real (i.e. non-proxied) collaborator is called for, or adding third-party libraries may not be an option. In most cases, a suitable object…

About Me

I’m a technical leader and software engineer with experience in scaling high-performing engineering teams. To get in touch, please send a message via LinkedIn. CV available on request. Richard Ashworth -->

Projects

--> Fidra Monte Carlo forecasting for development teams: a tool to predict project completion dates using statistical modeling. Try Fidra | Blog Post Planning Poker Agile estimation for distributed teams. Blog Post | GitHub | Demo Environment