Click a category to see related articles

Posts in Software-development

  • Technical Health over Technical Debt - December 27, 2018

    Prefer technical health over technical debt as a metaphor for developer practice changes for better code.

  • Of Languages And Containers - December 09, 2018

    Run production on a workstation or embrace a new way of working...

  • Orchestration And Choreography - April 29, 2018

    Orchestration and Choreography are often confused. This is how I think of them.

  • Quantifying Commit Risk - February 17, 2018

    All change carries an element of risk but not all changes are equal.

  • The path to a million (loc) - July 07, 2017

    How do projects get to a million lines of code.

  • Builder anti-patterns - June 19, 2017

    The Builder pattern has become very popular over the last few years but there is a growning tendency to use it everywhere. Here are some of the problems and alternatives that you might find a better fit.

  • Commit History Metrics - June 15, 2017

    What can your commit history tell you about the health of your project?

  • Defending the Domain Model - June 06, 2017

    Keeping a domain model is hard. Implementing a anti-corruption layer with the right separation of concerns can help.

  • Testing Logging - May 26, 2017

    Logging - one of the most crucial aspects of any system. But how well is your logging tested?

  • Templated styles - May 20, 2017

    A clean/DRY way to style content based on model data

  • Dependency Inversion - Applying the principle - July 11, 2016

    Another look at a classic OO pattern

  • The Value in value types - January 25, 2015

    Value types are an oven often overlooked OO and DDD technique. Here is why I think they are an undervalued technique

  • Build Analytics - better development understanding - January 19, 2015

    Working with small teams is a lot of fun and I find it fairly easy to keep track of what is happening with version control and build systems. Errors and failures don’t come up that often and when they do they can quite often get solved there and then. On larger projects or working in a large organisation it’s impossible to keep track of everything. There are too many moving parts and changes. Incidents are more frequent and their impact much larger. A broken build or build system can affect 10s or 100s of people. For these larger development projects I find I have to collect and chart data, looking for tends and anomalies and then delve deeper into the data if and systems if there are problems.

  • Service IoC containers - April 07, 2014

    How can we get the benefits of IoC containers at a higher level - the services that we deploy into environments? Typical service tiers are implemented with a fronting load balancer that allocates servers to satisfy requests. Applications or services that need these services are give domain or IP information of the load balancers and the load balancers are given details of the servers running instances of the services that they need. Essentially each system with dependencies news an instance of its dependencies. Inverting this dependency requires a container but it leads to some interesting advantages.

  • Container-less web apps - April 07, 2014

    In his keynote ‘This is water’ Neal Ford talks about “Yesterday’s best practices become tomorrow’s anti-patterns”. This seems to be the case for application servers like WebSphere, WebLogic and JBoss.

  • Cling A C++ REPL?! - December 19, 2013

    Browsing some blogs recently I came across some interesting C++11 lambda code and thought it would be cool to try it out for myself. The idea of spinning up a project or even putting a new test in an existing project did not feel right. Wouldn’t a C++ REPL be useful for just these occasions?

  • Boost program_options - December 06, 2013

    I have been spending time recently writing command line apps in C++11. Each time I wanted a way of handling command line arguments flexibly. I chose to use the boost::program_options library. The documentation is pretty good but there are some assumptions (aliased namespace) and the example code is broken up with paragraphs of text explaining what the code does.

  • Java build tools 2013 - November 15, 2013

    I am about to embark on a new Java project so I thought I would take a look at the current state of build tools for Java projects. First I thought I would draw up some assessment criteria to use as a loose guide. This is what I came up with:

  • ci console 0.0.2 released - October 12, 2013

    I like to commit code frequently when working on a project. I also like to use the command line for building, testing and committing code. So I thought it would be nice to have a way to check the build status from the command line. I have been wanting to write something in C++11 and a small lightweight command line tool seemed like a good opportunity.

  • Zero Down-time - relational databases - August 29, 2013

    Continuous Deployment is the act of automatically deploying an application every time the build is successful. I am currently working with a development team that is working towards continuous deployment as part of their continuous delivery adoption plans. The system involves several internal web services which seemed like a good place to start working on not only automating the deployments but maintaining a very high degree of up-time during those deployments. Automating deployments involves both development and techops groups so I thought I would search for some worked examples that would help illustrate the techniques and steps required. I found several blogs and articles talking about different approaches but no worked examples.

  • next_permutation - August 03, 2013

    Working on a small program recently I found a quirk in next_permutation. The prorgam read a sequence of characters from the command line and then tried to find words by testing each permuation. For a sequence of 3 characters there are 6 permutations.

  • Emacs Sharing - July 25, 2013

    I like Emacs. Some people like VI(M) but emacs has been in my toolbox for a long time and I feel very at home working with it.

  • I can't believe I missed this! - February 06, 2013

    Just over 20 years ago Jack W. Reeves wrote an article in the C++ Journal entitled “What is Software Design?” and I missed it. Not only that but no one thought to point out that I was missing a very important article. An article that challenged and changed/clarified my mental model of software design and construction - 20 years after it was published. A copy of the original article can be found here. I guess it is better late than never and it demonstrates that some things stay relevant and important. Sometimes they remain controversial.

  • DRYing out code - December 31, 2012

    Removing duplicate code is a great way to improve the internal quality of your application code. Duplications mean that you have more code than you should and are often the source of more subtle bugs of the “I’ve already fixed that ..” variety.

  • Automated refactoring for library updates - July 23, 2012

    After watching Clang MapReduce – Automatic C++ Refactoring at Google Scale I was struck with the idea that this could help with the upgrade problem. Almost every application uses libraries. Those libraries need to be updated from time but each time they are updated all the code using those libraries also needs to be updated. For development teams finding time to upgrade to the latest libraries against competing functional updates is challenging. What if as part of the release a set of refactoring commands or programs accompanied the libraries. These refactoring scripts would automatically update the consuming application code to use the new libraries saving time and money.

  • Metrics based Refactoring for cleaner code - January 02, 2012

    Refactoring is a key practice to improved code hygiene. Making refactoring part of your next project is one thing but if you have just joined a team or project with a significant amount of debt how do you work on making things better? Over the last few months I have been assessing a number of code-bases and speaking about technical debt management. While preparing for these engagements I realized that combining two code and project metrics could be used to help focus efforts on code that would deliver the most benefit. Toxicity is a combined measurement of static code analysis metrics. Volatility a measure of changes made to files within a code-base over time. By combining these two measures we can create a source file scatter chart correlating toxicity against volatility.

  • Oh My ZSH shell productivity - December 27, 2011

    oh-my-zsh is framework for managing zsh configuration. The default configuration adds some interesting enhancements.

  • Encapsulating Databases - August 11, 2011

    Small systems grow with success. As these systems grow they often take on more and more functionality either directly into the main system component or into sub-systems. As the systems grow in complexity and responsibility their database requirements grow at a similar rate become more and more complex.

  • Insulating against failure using Caching Reverse Proxies - July 07, 2011

    Reverse proxies have been around for a very long time and depending on your application either interesting additions or a key element to your architecture.

  • Open Source project durations - April 28, 2011

    During a recent discussion about open source development we wondered how long these projects lasted. In particular if there was a rapid drop off in activity.

  • Stabilizing Velocity - March 26, 2011

    I came across this post by Michael Norton and thought I would reference it here: Stabilising Velocity Michael makes some keen observations on both causes and effects of unstable velocity.

  • Rake db:migrate MySQL gem dependency - January 24, 2011

    If you have already added gem 'mysql2' to your Gemfile but get a message saying that it is missing when you try to migrate

  • Create MySQL database with Capistrano - January 24, 2011

    I was playing about with Capistrano over the weekend. I wanted to automate the deployment of a Rails application to my server. The server was (I thought) just about ready to accept the app but I did not want to go through another manual deployment. I thought I would take the opportunity to script the deployment. The first task I set myself was to create a production MySQL database. Searching for how to do this threw up lots of interesting information about building and deploying database.yml files, but not much about configuring MySQL. The first set of tasks I came up with were:

  • Progressive Enhancement - December 24, 2010

    Progressive Enhancement is a web development technique or pattern. The basic premise is that a web site should be accessible to all users and then to overlay additional functionality based on the client’s capability.

    Web technologies and good web development practices over the last few years had encouraged this approach. Popular web sites delivery semantic HTML to allow screen readers and other client devices to understand the content of being delivered. Advances in both browser capabilities and CSS have encouraged this and the use of inline styles has reduced over time. The advent of JavaScript libraries that hide browser compatibility problems have made the development of progressively enhanced content easier to achieve.

  • Haml - December 19, 2010

    Haml is a markup language for generating xml and other markup - most popularly HTML. Over the past few weeks I have been writing a few Ruby on Rails applications and chose Haml as the templating language. For someone who has traditionally avoided positional languages this was a strange choice. Having written a few simple applications I find that the writing HTML in Haml is both straightforward and intuitive. Good HTML is naturally hierarchical and having this structure both encouraged and enforced in Haml feels right.

  • Test Driven Talks - November 07, 2010

    Taking a leaf out of the XP book and in particular test driven development I have had some successes in using this idea when doing a presentation. I have dubbed the idea ‘Test driven talks’. The basic idea is to quickly canvas the audience for things that they would like covered during the presentation. Once these have been captured on a whiteboard or flip-chart.

  • Testing - what to test when - October 20, 2010

    After tweeting that I wanted to have suggestions for blog entries I got a single reply asking for my thoughts on DAO and unit testing – essentially asking should DAO be unit tested.

  • Technology Synergy - October 20, 2010

    I started writing this post quite some time ago but never got around to wrapping up the loose ends. The article is really a summary of what I learnt during a pretty intense media web site development project. Since pictures equate to 1000s of words here is my effort to express how technologies can work symbiotically to delivery value that is more than the sum of their parts.

  • Dallas geek night - August 18, 2010

    Last week I happened to be in Dallas for a client and was invited along to the Dallas Geeknight held at the ThoughtWorks offices there.

  • Optimising build times - June 28, 2010

    I just came across this post and want to remember it so posing here. http://doublebuffered.com/2009/02/11/optimizing-build-times-for-large-c-projects/. I am most interested in the uplift in compilation time based on unused #includes and build reductions for SSDs.

  • New BTree algorithms for virtual memory systems - June 20, 2010

    This is a very interesting article http://queue.acm.org/detail.cfm?id=1814327 which demonstrates that we should not take things for granted - including algorithms that have been around for a long time.

  • Performance testing web applications - April 25, 2010

    When performance testing a web application (as in raw operations per second) I have seem many people try to benchmark their new system against the agreed performance level right off the bat. The problem with this approach is that most applications need to be tuned to get the most out of them. Optimistically firing off 100s of requests will most likely cause the server to choke and if you are unlucky die in a gibbering heap.

  • Post Redirect Get web interaction pattern - March 27, 2010

    Post/Redirect/Get or Redirect after Post is an HTTP interaction pattern that can be used when developing web applications. I have been mentioning it quite a few times in my consulting work and thought I would take a stab a at diving a little deeper in the pattern and its benefits.

  • It always takes a second - March 18, 2010

    Why do application developers think that adding more functionality is always a good thing for the user? When I first started working on GUI applications (Windows 1.0) we worked very hard to get sub-second response times. Now in theory applications running on multi-core 2+GHz processors should out strip 286 CPUs running in the MHz range. What seems to have append instead is that applications have maintained the same sort of response times (in general) taking 1 or more seconds to perform a task.

  • Face to Face pairing - February 28, 2010

    Since joining ThoughtWorks in 2004 I have enjoyed Pair Programming and my programming skills have improved significantly. Working on a problem with someone else full time is one of those practices that is difficult to convince people off until they have actually tried it. Laurie Williams at NCSU has done some pretty interesting research into the effectiveness of of pair programming, which is well worth a read.

  • Server Rebuild - Part II - February 25, 2010

    So after having the server nicely set up and ready for configuration I could not resist just ‘getting on with it’. I had grand plans to plan it out and record everything (good practice) but each step seemed so simple it seemed simplest just to get stuck in.

  • Server rebuild – part 1 - February 18, 2010

    I have been running my own server for some time now but my requirements have changed and the current underlying VM architecture does not conveniently support what I want to do.

  • The rise and fall of waterfall - on you tube - February 09, 2010

    If you have been in software development for a while this might make you chuckle :)

  • Switching back and forth - Intellij IDEA and Eclipse - February 05, 2010

    I have to confess that I am an IntelliJ Idea fan. I will confess that the key bindings take a little getting used to - especially on a Mac but I find I am most productive using it.

  • XP and the cost of change - February 01, 2010

    I have found myself drawing the classic cost of change graph a few times recently so thought I would blog about it. The graph was popular a few year ago in explaining the differences between and eXtream Programming (XP) team cost and a waterfall team cost. XP Wall Graph.png

  • Web application testing - episode 1 - January 20, 2010

    This is my first screencast so all and any comments welcome!!

  • Testing abstrations - November 18, 2009

    These ideas were presented as at ThoughtWorks Agile Southeast conference in Atlanta. The idea for these diagrams came about after the first time I spoke about web test driven development at Agile East in Philadelphia and New York. I am striving to show how introducing a level of abstraction affects development costs.

  • How the Pendulum Swings - November 05, 2009

    Car parts in a box

  • Java Properties handling - 1 - July 18, 2009

    I have been on a number of Java projects recently and one of the things I end up brewing for each of these projects is some enhanced management of runtime properties.

Posts in Travel

Posts in Writing

  • Five Ws sitting on a bench - January 22, 2011

    Over the past year I have been involved in preparing quite a few documents, proposals, presentations etc. I have also been asked to review quite a few of these documents. As an author or reviewer I like test what I am working on against 5 Ws and one H to see if the important aspects have been covered. The Wikipedia article provides a good background and history, including the 1902 reference to Rudyard Kipling Just So Stories.

Posts in Presentations

Posts in Quotations

  • If - February 14, 2013

    Quotes: Things that inspire and be remembered