About

I am a software engineer, software development / hands-on agile coach, community organizer for PhillyXP, blogger, and speaker with 19+ years of experience creating and delivering high quality software. I have specific expertise in:

  • Leading and coaching software teams
  • Mentoring developers
  • Improving development processes and practices for cross-functional development teams
  • Test-Driven Development (TDD)
  • Microtesting
  • Agile / eXtreme Programming (XP) practices
  • Pair & Mob Programming
  • Legacy code rehabilitation

I am a lifelong student always trying to improve. I believe code quality is not subjective nor a matter of preference. I enjoy mentoring and coaching developers specifically about code quality, microtesting, and Test-Driven Development. I am passionate about XP, Modern Agile, Lean Software Development, and DevOps. A listing of my talks can be found here.


I graduated from Drexel University with a degree in Computer Science. I currently work for eMoney Advisor in Radnor, PA. You can learn more about me here.

Blog

13 Jan 2019 . development practices . Speculative Refactoring Comments

As teams get more comfortable with refactoring, I often see them practicing what I call speculative refactoring. When they encounter code that is ugly, indecipherable, or too complicated, they decide to refactor it. The problem is, this code has nothing to do with what they are currently working on. As much as I like to encourage the motivation to improve, this is a trap that leads to taking on risk without any of the rewards to the business.

I recommend techniques like Opportunistic Refactoring and Preparatory Refactoring where the focus of refactoring is in support of adding the feature or business value currently being created. The concept of Opportunistic Refactoring, from Martin Fowler, is that the focus of refactoring is on the code that is actively being modified to develop a particular feature. Areas of the application that require the most change get the most time for refactoring. This creates a virtuous cycle; the code that needs to be changed most often will also be improved most often.

View more posts

Code

Here are a few projects I have worked on in my free time:

iTunes Library Parser

A C# implementation utilizing LINQ-to-XML to parse an iTunes library file (PropertyList format). The nuget package can be found here on nuget.org.

Improved iTunes Parser

A ruby iTunes library parser using Nokogiri.

Listening To

A .NET Web API app (using my Lastfm.NET library) with an AngularJS / Bootstrap front end. It displays the last 25 songs I’ve listened to as well as my top 25 artists.

Lastfm.NET

A .NET client for the Last.fm REST API.

If you’d like to see some other things I’m working on you can view my github account.

  • {{track.Artist}}-{{track.Album}}

    {{track.Artist}}

    Track: {{track.Name}}
    Album: {{track.Album}}
    Last Played: {{track.LastPlayed}}
  • {{track.Artist}}

    {{artist.Name}}

    Rank: {{artist.Rank}}
    Play Count: {{artist.PlayCount}}
Music data courtesy of
Loading
Cannot connect to the Last.fm Service to access music data.
Check the Last.fm Status Site for more information.

Contact

Drop me a line if I can help your development organization, help you with your product, or you just want to talk about music!