There is a sometimes tangled relationship between what we can do and how we think of ourselves. I'm going to look at a part of this below. I can't do X because I'm a Y Have you heard someone (or yourself) ever say something of the form "I can't do X because I'm a Y"? … Continue reading Competence vs. Tribalism
Performance optimisation – for machines or people?
I recently watched a video and listened to a podcast that form an interesting pair of opinions about performance. The video is Patterns for high-performance C# and the podcast is SE-Radio Episode 357: Adam Barr on Software Quality. There are two things where the podcast and video have no differences: the system must behave correctly, … Continue reading Performance optimisation – for machines or people?
Unit testing database queries
In this post I will try to describe an approach to unit testing database queries. It happened to be inspired by some testing I was doing of some C# code, but you could apply the same ideas to other languages. Note that if you’re unit testing stored procedures then I recommend using something like tSQLt, … Continue reading Unit testing database queries
Software Engineering Radio Podcast on Web Scale
I'm still working my way through the back catalogue of Software Engineering Radio. I recently listened to a particularly good episode, with Pat Helland. There were a few things specific to web scale, but generally it was good because he explained general concepts very well. I'll mention two of his explanations here, but I recommend … Continue reading Software Engineering Radio Podcast on Web Scale
Mutation testing
Mutation testing is a way of judging the quality of your tests, just as tests are a way of judging the quality of your code. Usually, the tests that mutation testing works with are automated unit tests. In theory it could apply to manual and/or higher-level tests like integration or system tests, but I hope … Continue reading Mutation testing
Lazy initialisation and threads (in C#)
Lazy initialisation is a way to set up everything needed to initialise something, but put off the initialising until later, usually when the value of the thing-being-initialised is needed for the first time. You might want to use lazy initialisation because something is expensive to initialise, and you might not need it. Or because you … Continue reading Lazy initialisation and threads (in C#)
Documenting ASP.NET REST APIs with Swagger / Swashbuckle
Introduction Swagger is a way to document a REST API, and tools can automate much of this process (but not all of it). At the centre of things is a JSON file that describes the API. You can create this file by hand or use a tool to generate e.g. from the API source code. … Continue reading Documenting ASP.NET REST APIs with Swagger / Swashbuckle
Not all requirements are created equal
Requirements for an IT system come in several shapes and sizes. Even if you manage to get requirements that are clear, concise, comprehensive, unambiguous and agreed, they could still be badly behaved. I will try to warn you of some of the perils that requirements can cause. Well-behaved requirements Before I get onto badly behaved … Continue reading Not all requirements are created equal
Auctions and adverts
I'm slowly making my way through the back episodes of the podcast Linear Digressions. Normally it's about machine learning, but there are a couple of episodes (one big episode chopped into two) about auctions. As in, how do eBay and Google make money (not the same way) and which is better? There is some interesting … Continue reading Auctions and adverts
Guest Blog: Are you a bad interface between colleagues and your code?
Paul Boag, UX and digital strategy guru has kindly taken another post by me. It's called Are you a bad interface between colleagues and your code? The previous post of mine that he's published is about modularising code.