Weblog latest

____________________________________

C# compiler bomb        

Write some source code which occupies 512 bytes or less and which compiles into a file that occupies the most possible space. Largest output file wins! Read more

20-Feb-2017 23:50

____________________________________

BDD and soap operas        

Long before BDD was a thing, there was soap opera testing. This exaggerates and complicates the usual test scenarios in the way that television soap operas exaggerate and complicate real life. It has a high rate of success in revealing important, but often unanticipated, scenarios. Read more

16-Feb-2017 20:00

____________________________________

Circuit breaker implementation        

The circuit breaker design pattern is used to provide stability and prevent cascading failures in distributed systems. A circuit breaker is placed between a service and each of its remote dependencies - it can then isolate that service from a failed dependency to prevent that failure affecting the rest of the system. Read more

04-Feb-2017 21:20

____________________________________

Stop describing your development process as "agile"        

Clearly we should never use "agile" as a noun. But even as an adjective "agile" has become such an overloaded term that we should stop using it completely. Read more

24-Jan-2017 23:55

____________________________________

Scalability - dealing with overload        

Last time we looked at a good way of measuring load. This time we're going to look at ways of dealing with temporary overload, whether that's caused by bursts of traffic, glitches in response times, or some other mechanism. Read more

19-Jan-2017 16:30

____________________________________

Scalability - measuring load        

If you can't predict a system's scalability in the face of increasing load, you'll struggle with choosing the right design for your system - whether that's design at a high level such as component separation and interfaces, or at a low level with algorithms and data structures. Inevitably you have to test and test again - it's very difficult to predict scalability by just looking at an application's design and code. And for testing, you need a good metric that will tell you about scaling characteristics. Read more

31-Dec-2016 23:30

____________________________________

Frequency analysis with Parallel LINQ and regex        

One of the most basic exercises when you learn a new programming language is to count the frequency of all the words in a text file. Google has many C# word-counting examples, most of which are rather verbose and/or dubious.

Just how compact and fast can we do this? Behold the magic of Parallel LINQ and regular expressions.

Read more

20-Feb-2016 18:30

____________________________________

Designing an HTTP API for CRUD operations        

Nearly every developer designing his/her first HTTP 1.1 API makes the mistake of mapping the Create-Read-Update-Delete (CRUD) operations very simplistically to the HTTP verbs Post-Get-Put-Delete respectively. This rather crude approach is likely to confuse the developers building client applications for that API, especially when it comes to the Update and Replace operations.  Read more

01-Feb-2016 02:30

____________________________________

Joining a new team        

Whenever you arrive in a new team as a development or delivery manager, or perhaps as a lead developer, it's a good idea to dig into that team's people, culture, and work in some detail. This helps you to understand the team dynamics faster, integrate into the team, and find the one or two critical perspectives that might make a significant improvement in the team's output.

It's good to have a formal structure around the digging, rather than just being a randomizer. What follows is my structure. It's probably far from being the best approach, and isn't even particularly original. But it's been effective for me when working in line-of-business companies, and might be a good starting point for you.  

Read more

31-Jan-2016 17:00

____________________________________

BackgroundWorker vs async/await        

I wanted to see the benefits and drawbacks of moving my Windows service template from its current event-based asynchronous pattern (EAP) with the BackgroundWorker type to the more modern task-based asynchronous pattern (TAP) with async/await. The BackgroundWorker type still has its place, primarily with background operations behind a desktop UI. But there's no UI in a Windows service, so it's potentially an interesting place to explore the switch. Read more

27-Dec-2015 00:30

____________________________________

Software quality defined by size of bonus?        

In any line-of-business company, some end-users and senior stakeholders are focused on building and releasing important functionality as fast as possible. For these people, short-term velocity is the key attribute, as long as the software is reliable enough to give the right results at the right times - for given, often unspecified, values of "right". Crudely speaking, the quality of software is defined by the size of their bonus that year. Read more

20-Dec-2015 23:00

____________________________________

Line-of-business teamwork        

Somebody asked me what technologies had recently piqued my interest, and in what ways.

I'm usually more focused on solving interesting and/or hard problems, rather than on the technology itself. Without a specific grounding in the business problem, any technology-related changes that you make (for example, introducing NoSQL) will be built on a weak foundation and can be fragile and prone to disintegration.

Having said that, I'm just pushing the question one level down the stack.

Read more

14-Dec-2015 22:00