• Undercover Testability Killers

    If you were to take a poll of software development shops and ask whether or not they unit tested, you’d get varied responses.  Some would heartily say that they are, and some would sheepishly say that they totally mean to get around to that next year and that they’ve totally been looking into it.  In the middle, you’d get a whole lot of responses that amounted to, “it’s complicated.”

    • Wed, Sep 21 2016
  • The Human Cost of Tech Debt

    If you're not already familiar with the concept of technical debt, it's worth becoming familiar with it.  I say this not only because it is a common industry term, but because it is an important concept.

    Coined by Ward Cunningham, the term introduces the idea that taking shortcuts in your software today not only means paying the price eventually -- it means paying that price with interest.  In other words, introducing…

    • Wed, Jun 29 2016
  • Solve Small Problems

    It's fun to think of great moments in the history of science, particularly the ones that have a memorable anecdote attached to them.  In the 3rd century BC, a naked Archimedes ran down a city street, screaming Eureka, because he had discovered, in a flash, how to measure the volume of irregular solids.  In the 1600s, a fateful apple bonks Issac Newton on the head, causing him to spit out the Theory of Gravity.  In the…

    • Mon, Mar 28 2016
  • It's OK not to lead

    When I first entered the workforce, I was in awe of the programmers around me.  I'd spent 4 years of college learning how to implement Alpha-Beta pruning and various flavors of sort(), while these guys had been building things that real people used in the real world for years, or even decades.  I imagine it was, on a much smaller and more cerebral scale, the way a college football player feels upon turning pro.


    • Thu, Mar 3 2016
  • Writing Tests doesn't have to be extra work

    Writing automated tests is sort of like the kale of the software development community.  With the exception of a few outlying "get off my lawn" types, there's near-universal agreement that it's "the right thing."  And that leaves a few different camps of people.

    The equivalent of fast food eating carnivores say, "yeah, that's something that we ought to do, but it's not for me."…

    • Wed, Feb 10 2016
  • High stakes programming by coincidence

    Have you ever found yourself running your code to test out some behavior when you noticed something unrelated and thought, "that's odd?"  Maybe you wanted to verify that clicking "run" kicked off the process it was supposed to, but you noticed that the "cancel" button was randomly green for a second when the window opened.  "That's odd," you thought.

    After verifying that the…

    • Fri, Jan 29 2016
  • The SOLID principles in real life

    Hopefully you're familiar with the SOLID principles, particularly if you program in object oriented languages.  The wisdom contained therein (mostly) isn't limited to object oriented languages, but such languages were the intended target.

    If you're not familiar and don't have time to read the linked Wikipedia page, SOLID is a mnemonic acronym for five principles of object oriented programming or, as I hinted, really…

    • Tue, Jan 26 2016
  • The Wrong thing more Efficiently is still the wrong thing

    Let's say that, like many folks, one of your first tasks each morning is dealing with your email. You arrive at the office, grab yourself a coffee, and settle in to complete this ubiquitous modern task.
    Naturally, the first thing you do is open your inbox. Then you open each unread email, select all, and copy it. Next, you open a new instance of Visual Studio, create a console project, add a text file to it, and paste…
    • Mon, Nov 23 2015
  • BDD in .NET for Complete Initiates

    It's pretty likely that you've heard of behavior-driven development, or BDD.  Maybe it's just in the context of buzzword fatigue and wondering "how many different approaches to software have acronyms that end with DD?"  Whatever your level of cynicism, or lack thereof, BDD is worth a look.

    A lot of my work over the last few years has involved coaching and mentoring on the subject of writing clean code…

    • Mon, Nov 9 2015
  • Your Old Language Version is Costing You Money

    Imagine that you walk into a company, and take a stroll through the software department.  All around you, as far as the eye can see, developers toil away, staring into 17 inch CRT monitors.  What would you think of that?  Would you have to restrain yourself from jogging over to the HR department, enthusiastically, to apply for a job?  Or would you thank your lucky stars that you worked somewhere else?  I’m betting the latter…
    • Wed, Oct 14 2015
  • The Best Way to Hire Developers

    The other night, I was remembering what might have been my most impressive performance in the interview process.  What makes this performance particularly interesting, however, is not how well I did, but rather how I did well.  And the how left me feeling unsatisfied with myself and with the process.

    I was interviewing for a software development position, and this particular organization’s interview process was (1) phone…

    • Tue, Sep 29 2015
  • Developer Tips for Sublime Productivity

    The most common term I've heard to describe the zoned-in feeling that a developer gets when engrossed in code writing is "flow."  This seems like a good term to me — it conveys the sudden ease with which technical tasks seem to become complete.  It's a heady feeling.

    But it's also an elusive feeling.  If you're a programmer, the corporate work day is essentially a minefield, filled with flow-killing…

    • Tue, Sep 8 2015
  • Get good at testing your own software

    There’s a conventional wisdom that says software developers can’t test their own code.  I think it’s really more intended to say that you can’t meaningfully test the behavior of software that you’ve written to behave a certain way.  The reasoning is simple enough.  If you write code with the happy path in mind, you’ll always navigate the happy path when testing it, being hoodwinked by a form…

    • Tue, Sep 1 2015
  • Displaying all cards on a page (3 of 3)

    Last time, I introduced you to a pre-loaded JSFiddle for Trello.  We manipulated it to retrieve all of the cards containing a due date from a specific board.  The idea was to demonstrate a quick, but effective use of the Trello API.  Today, I'm going to help you get started on building an actual, useful application.  We'll accomplish that by getting out of the JSFiddle sandbox and onto an actual web page.
    To accomplish…
    • Tue, Aug 25 2015
  • Getting All Cards with Dates from a Board (2 of 3)

    In the last post of this series, I walked you through how to get a JSON dump of a Trello card with nothing more than your browser, a developer key, and a token for access to your private boards and cards.  In this post, we'll get a little more sophisticated with what comes out of Trello.


    The first thing to realize is that baking the token and the key into each request is an untenable situation.  In whatever solution…

    • Tue, Aug 4 2015
  • Getting a Card's info from Trello (1 of 3)

    One of my absolute favorite all time tools is Trello, which is essentially a web application that digitizes the kanban board.  As a Trello user, you have one or more boards, and each board can have one or more columns.  In each column, there are cards.  And, like a live kanban board, you can move the cards around between columns.


    Trello is good enough to expose a RESTful API so that I can interact easily with it.  I'm…

    • Mon, Aug 3 2015
  • Ship Something Yourself, and Help Your Career (Part 2)

    In my last post, I urged you to start something that earned you money and get it to market as quickly as possible, talking about how it would start to change your life outside of work.  Today, I'll talk about how doing this in your spare time can actually help you with the work you're currently doing.  This happens in a few ways.

    Diversifies Your Skillset

    As a programmer, the majority of your time is spent pitted…

    • Wed, Jul 29 2015
  • Ship Something Yourself, Even if You Earn Only a Dollar (Part 1)

    There’s no time to lose.  Valuable, profitable seconds of your life are ticking by, and you’re missing out.  Surely you’re aware of the concept of compound interest?  In case you’re not, suffice it to say that long-term investment depends a lot more on when you invest than how much.  The same is true with you using the Internet to earn yourself some money.

    Okay, at this point I probably sound a bit…

    • Wed, Jul 15 2015
  • Signs Craftsmanship May Be For You - Fear, Uncertainty & Doubt (Part 2)

    Last time around, I presented the idea that "software craftsmanship" might more approachably be framed as gap analysis.  With that mindset, I started a discussion about how you could recognize the sorts of gaps in your team and code that the craftsmanship movement and its practices can help address.  Today, I'll continue in that vein with some other gaps that you should watch for.

    Developers Reluctant to Touch…

    • Wed, Jul 8 2015
  • Signs Craftsmanship May Be For You – The Complexity Creep (Part 1)

    One of the things I’ve spent a good bit of time doing over the last year or so is called “Craftsmanship Coaching.” This involves going into teams and helping them adopt practices that will allow them to produce software more reliably and efficiently. Examples include writing automated unit and acceptance tests, setting up continuous integration and deployment, writing cleaner, more modular code, etc. At its core though…

    • Mon, Jul 6 2015
  • Delegating Is Not Just for Managers

    I remember most the tiredness that would come and stick around through the next day.  After late nights where the effort had been successful, the tiredness was kind of a companion that had accompanied me through battle.  After late nights of futility, it was a taunting adversary that wouldn’t go away.  But whatever came, there was always tiredness.

    I have a personality quirk that probably explains whatever success…

    • Thu, May 21 2015
  • Improving Your Craft with Static Analysis

    These days, I make part of my living doing what's called "software craftsmanship coaching."  Loosely described, this means that I spend time with teams, helping them develop and sustain ways to write cleaner code.  It involves introduction to things like the SOLID Principles, design patterns, DRY code, pair programming, and, of course, automated testing and test driven development (TDD).  I've spent a lot of time…

    • Mon, May 18 2015