1. Project Setup Tax

    With microservices gaining popularity, one consideration prior to adoption is new project setup. In fact this statement holds true for any new project that you decide to create.

    Each new project requires at a minimum

    • Source control - somewhere to actually store the code.
    • A project base - API, executable, library, application …
  2. X% of Configuration is Never Used

    Code configuration is essentially for the likes of URLs, credentials or other per deployable settings. Sadly configuration seems to fall into examples where there is simply too much configuration, or the system has so many configuration points the actual code becomes far too complex for its own good.

    Too Much …

  3. Pulling the Plug on Date Time Parsing

    Date/time logic is hard. Throw in time zones along with daylight saving and it's even harder. Recently a suite of tests that had happily been running for months started failing. There were no code changes and all the tests were somehow related to date/time ranges.

    Despite this the …

  4. Best of Breed

    Published: Tue 01 March 2016

    tags: retro

    Spikes are one of the best ways to aid the design of software. In some cases spike solutions can open more questions than they solve. The use of a technique known as Best of Breed can assist when this arises.

    Rather than producing a single spike, produce several. Either individually …

  5. Write Assertions First

    Writing a test as part of the TDD process is simple.

    1. Arrange
    2. Act
    3. Assert

    Many individuals recommend the process be reversed. Write assertions first. Then write the steps to perform the action. Followed by the required setup to complete the action.

    1. Arrange
    2. Act
    3. Assert


    You will write just enough …

  6. Gaining Ten Extra Hours a Week

    Published: Mon 01 February 2016

    tags: retro

    For a long time my work life balance has gone through phases. Some weeks I would spend hours after work writing code. This would exceed to well beyond midnight in some cases. This phase was not sustainable but it appeared to be the norm.

    My other hobbies such as reading …

  7. Sproc vs ORM vs Inline vs Polyglot

    Published: Mon 01 February 2016

    tags: retro

    With relational databases the common data access patterns tend to fall into three core options.

    • Direct access via inline SQL
    • Stored procedures using the standard library
    • ORM frameworks or libraries

    Individually these have both pros and cons, often leading to heated debate and discussion.


    • Leaky abstractions.
    • Dangerous in places …
  8. The N+1 Problem

    Published: Mon 01 February 2016

    tags: tutorial

    The N+1 problem is when multiple queries are executed against a persistent store when a reduced amount could serve the same purpose. This degrades performance, uses more memory and can cause complexity to be added to the code that processes the results. Most sources of the problem come from …

  9. Application Validation and Domain Validation

    Published: Wed 13 January 2016

    tags: tutorial

    There are two types of validation in an application - application validation and domain validation. This applies whether or not you practice DDD. One of my mistakes in the past has been confusing or conflating these two responsibilities at the same time.

    Application Validation

    Application validation is anything technical or anything …

  10. ReactJS and JSHint

    The ReactJS Getting Started Guide states that the recommended way of using React is combined with npm.

    This is great but poses a problem when trying to use JSHint. The default example outputs a single JS file containing both your code and the React library. The end result is the …

  11. Pre Computation

    Caching is a common technique, especially with HTTP as it is made so easy. However pre computation is an alternative that can be used to reduce failures as well as speed up processing and response times.

    Caching Example

    Assume a list of countries to be displayed on the UI. These …

  12. Abstractions in Code, Details in Metadata

    I've programmed many games - each one was special in its own way. One in particular stands out early in my university studies, a top down shooter. It was not graphics, gameplay, or sound that made it stand out however. It was the lesson it taught me about software development.

    Level …

  13. Coding In the Real World

    Published: Thu 01 October 2015

    tags: retro

    As a student when confronted with a problem, I would end up coding it and thinking - how do the professionals do this?

    For some reason I had the impression that once I entered the industry I would find enlightenment. Discovering the one true way to write high quality, professional code …

  14. Header Interfaces vs Role Interfaces

    In some languages such as C++ you must define header interfaces. These constructs define how a public type is exposed in terms of its public interface. Other languages take a different route. C# or Java do not require headers but they are still very much in circulation. This unfortunately brings …

  15. Set Based Design

    Each morning newspapers hit the newstands without fail. Live broadcasts are the same. Come show time they hit the air without fail. You can probably think of more examples of deadlines that are constantly achieved. So why does software development accept missed deadlines? Software development not only encourages software to …

  16. Release It - Highlights Part 1

    Release It! is one of the most useful books I've read. The advice and suggestions inside certainly change your perspective on how to write software. My key takeaway is that software should be cynical. Expect the worst, expect failures and put up boundaries. In the majority of cases these failures …

  17. Types of Test Doubles

    Mock is an overloaded term in software development. Sadly this leads to developers answering with "mock it" when a mock object may not be the right solution. Test Doubles are a more general term. I should try to use this naming more than I do at present - a goal I …

« Page 2 / 5 »