Profile picture

Written by @sghill, who works on build, automated change, and continuous integration systems.

  1. June 08, 2022

    Do our plans pass a quick time check when considering implicit commitments?

  2. May 09, 2022

    When plans fail repeatedly there are often better bets to make.

  3. April 28, 2022

    By designing development workflows for the work, we can make the output high-quality by default.

  4. April 16, 2022

    Deciding against work that aligns with your values is difficult, but blindly saying yes is worse.

  5. February 18, 2018

    Using a git repository's clone uri as a unique identifier can be painful. Try a repository key instead to deal with these common data duplication issues.

  6. July 01, 2017

    We can fail the build when unwanted classes (e.g., java.util.Date) are imported through Gradle's built-in checkstyle plugin.

  7. January 05, 2016

    I picked up PowerShell on my last project and found it could accomplish a lot more than I realized. This small guide covers some of the functions I came to find really useful while working with PowerShell, from the perspective of someone who has grown to rely more and more on the shell (usually bash) over time.

  8. December 28, 2015

    A simple module for serialization can make life a lot easier. When the server and client share the same serialization objects, it eliminates the chance of them getting out sync. I followed this pattern, modeled after the dropwizard recommendation, in my last project and it saved us many headaches.

  9. December 22, 2015

    Plain old Java objects dedicated to serialization help make life easy. This article looks at Jackson's built-in POJO serialization and how to create classes that define a serialization structure without specific library annotations.

  10. March 23, 2015

    The graphic novel about project management and risk that can either be great reinforcement or eye-opening. The book walks through an engaging example, focusing on deferring commitment by creating real options.

  11. February 17, 2015

    Searching through a huge stack of text files for a particular string can take forever with some of the standard Windows search tools. Reach for PowerShell's Select-String to quickly find patterns inside files.

  12. September 28, 2014

    This simple-but-common problem is a perfect candidate for combining PowerShell's Get-ChildItem with Remove-Item, leaving our directory nice and clean.

  13. April 01, 2014

    Every clean build on my build server was failing with the message `The "CreateRiaClientFilesTask" task failed unexpectedly`. Usually when a second build ran without a clean, it would pass. Eventually I discovered group policy was forcing a virus scanner to run in the .NET compilation directories, which locked files mid-compilation. This article covers how I solved the mystery.

  14. March 18, 2014

    Sometimes `diff` is the perfect tool for the job. If you're on Windows and cygwin isn't an option, this article shows how PowerShell has your back with `Compare-Object` and `Get-Content`.

  15. January 14, 2014

    PowerShell 3+ brings a really good `curl`-like tool: `Invoke-WebRequest`. This article covers very basic usage and how to get help.

  16. December 15, 2013

    Contributing to open source projects is often hit or miss. This article is about the great experience I had helping out with `gini/puppet-gradle`.

  17. November 17, 2013

    In the year since I released grunt-jenkins on npm, I've been lucky enough to receive a few pull requests. This article highlights some of the awesome tooling that has been added to the JavaScript ecosystem recently, as well as some new features by contributors.

  18. October 11, 2013

    A simple tip to keep in mind while refactoring any code: If you don't need it right now, delete it. Source control is there for referencing old information. Here's my real world example of this in action.

  19. September 13, 2013

    A quick and painless introduction to setting up a gradle project with dependencies in IntelliJ IDEA.

  20. September 08, 2013

    GiftIdea! is an Android app for taking the stress out of giving on birthdays and holidays. It’s available on Google Play in over 10…

  21. September 05, 2013

    Excited about releasing my first app to Google Play, I captured some thoughts from looking at other app screenshots in the store.

  22. August 27, 2013

    This article covers getting up and running with android-maven-plugin. The material is a little dated now that most of the android community has moved on to the official gradle plugin, but the underlying theme of saving time by having a build for your mobile apps still rings true.

  23. August 22, 2013

    After practicing TDD in industry for a few years, I was invited to be a guest lecturer with a coworker at a nearby university. After an intriguing and dismissive comment from the crowd, we had a great discussion about the benefits of TDD.

  24. June 28, 2013

    I spotted an issue with using milestone versions of grails through GVM and documented the workaround I used. The issue has since been fixed!

  25. June 12, 2013

    Pairing is one of those topics that will always spur debates. I've done a lot of pairing, and I think the clients I've worked for have received great benefit from it. As the original article states, it is harder to be creative and sometimes leaves me tired, but I still think it's a worthwhile pursuit.

  26. May 18, 2013

    The format Jenkins expects for its plugin manager api isn't very easy to find. This article covers a working xml format for installing plugins.

  27. May 18, 2013

    It's a good idea to backup Jenkins periodically. Many plugins exist with different ideas of how to back up Jenkins configuration. The approach covered in this article shows how to create backups with the Jenkins API and my CI-friendly tool grunt-jenkins.

  28. April 01, 2013

    My first open data project — a mashup of maps and yelp reviews for Toronto's dog parks. Along the way I encountered more data issues than I would have expected and no real place to report them. Still, open data feels like a giant step forward.

  29. February 25, 2013

    Timezone bugs creep up from time to time. Understanding where timezone bugs will occur is key to preventing them. To get a quick idea of if you have timezone issues, consider running your automated tests in another timezone.

  30. February 19, 2013

    I attended my first Mozilla Dev Derby and had a great time! We learned about multitouch in HTML5 and I put together a memory game playable from a mobile web browser.

  31. February 17, 2013

    With a simple Python web server, it's easy to develop HTML5 apps locally. With GitHub Pages, it's easy to host HTML5 apps. This article covers my experience with both at a Mozilla Dev Derby.

  32. November 07, 2012

    Inconsistencies slowly creep into codebases. The cost of inconsistency becomes very clear when a new team member is onboarding. This article covers the subtle ways our JavaScript diverged over time, and how one person being aggressive in aligning styles worked well for us.

  33. May 27, 2012

    After going over well on a project, I tried coin my very own rule. We'll see how well it's doing in another few decades.

  34. March 22, 2012

    When choosing how to break the build in your CI-friendly team, make sure to consider all the possible workarounds and how much they may hurt your overall efforts towards quality. After working on several teams, I've decided I'm firmly on the side of tracking metrics, but not breaking builds because of them.

  35. March 15, 2012

    Some of the worst moments build the best teams. This article covers my experience with missing the same problem in development, qa, and all the way through to a production deployment. In one of my proudest moments to date, our team rallied to solve our huge problem quickly and calmly.

  36. December 24, 2011

    Back before JavaScript modules were mainstream, loading order was often a problem. This article briefly covers our loading problem, and how we solved it with load.js.

  37. September 01, 2011

    A [now outdated] walkthrough of setting up IntelliJ on OS X, which I found to be a bit overwhelming when I was new to Mac, Java and the IDE.

  38. March 18, 2011

    A super detailed look at the how to DRY up some views in Rails. Walks through the actual code of ExpenseLynx, an open source expense system I built for my last course at Loyola University Chicago.

  39. February 09, 2011

    After importing a mercurial repository into git with full history, I noticed the repo had swelled by 2400%. Repacking with git solved that problem easily.

  40. September 10, 2010

    A string-heavy design leads to trouble in the test data when later trying to move to a type-safe design. The story of how my test data invented a month and cost a pair some investigation time later on.

  41. September 09, 2010

    The first development blog post! A small lesson worth reinforcing: if it takes more than a few minutes to understand, it's not good code.