About

…me

TL;DR: I am a software development professional from Toronto. Currently, I am the “Backend Platform Lead” at Kinetic Cafe, where I am responsible for the backend services development team. Previously, I have been a team lead and/or a software developer at six companies over the last twenty years. I contribute to open source software (mostly in the Ruby space, but I have contributed elsewhere in the past). In my career, I strive to be the best that I can, and there is nothing better for me to see a team I am on or leading succeed.

I hate writing my own bio. This isn’t because I am hesitant to talk about myself — over the years I have earned enough confidence to be able to own my successes, my failures, my good parts, and my bad parts. Writing a bio is hard, because while I am not certain of anything, I am self-assured enough to all-too-easily come across as arrogant or self-absorbed. There’s a fine line.

All of this makes the TL;DR version of my bio above both perfectly accurate and bland. I have been on or led a software development team for the last twenty years, most of it in Toronto1. Since November 2014, I have worked at Kinetic Cafe as the head of the platform server development team. The work has been challenging and I have been able to build an amazing team that delivers great software.

I have previously worked at ClearFit, SurfEasy (now owned by Opera), EVault (now owned by Carbonite), and Solect Technologies (now owned by Amdocs) in Toronto. Before that, I worked at Vanguard Cellular (now owned by AT&T Wireless) in Greensboro, North Carolina and Policy Management Systems Corporation (now owned by Computer Sciences Corporation) in Columbia, South Carolina. I have written free or open source software since 1990, getting very serious about it when I found Ruby in 2002, when I started work on a number of packages that are now widely used across the Ruby ecosystem. I haven’t stopped, and at last count, I have about thirteen distinct packages with varying levels of use.

I am a polyglot developer. I have shipped2 software using about thirty different programming languages3 or dialects4. I have used or learned another fifteen or so languages to the point where I can probably port code from them if not fix bugs—I have ported code from Smalltalk to Ruby, but I do not know Smalltalk well enough to consider it a language that I know. My preferred language is Ruby, but have written JavaScript, C#, and C++ extensively. At Kinetic Cafe, we actively use Ruby, Lua, and JavaScript on the server side—with other languages (Elixir, Go, and Rust) being actively explored for their suitability to our problem spaces.

I am a development leader. I have been heavily influenced by Michael Lopp (Rands in Repose) in how I approach my duties as a manager. I succeed only when my team succeeds, and my team can only succeed when I treat them like professionals and help them grow. While I love writing software, I have discovered that I love building teams to deliver software even more.

This is who I am, but it is not all of who I am. It is my career, and through job interviews I have had to explain this many times, so I know it best and can explain it best. Beyond my career, I am a son, a brother, a husband, a brother-in-law. I am an immigrant and an expatriate. I am a foodie, a serious amateur chef, a Scotch snob and a coffee hater. I am a poet, an infrequent prose writer, a voracious reader. I am a squash player and a cyclist. I am a traveller. I am vegetarian. I am a type II diabetic and a chocoholic.

I am unapologetically Canadian and very liberal in my outlook. I am a straight white cisgendered male (he/him) who tries to be aware of the privileges I have and try to use them to make the world a better, fairer, safer place.

I am large, I contain multitudes.

…this blog

I relaunched this blog in October 2014 (before I started at Kinetic Cafe), and I have done a typically poor job of publishing regularly. It isn’t that I don’t have anything to say, it’s that while I have a lot of opinions, I have always been bad at keeping journals, and I’m always busy with more things that can be done. I always intend to write more than I do.

When I write here, I will be writing about those things that interest me or that matter to me. Often, that is software development, technology, and team leadership, but not exclusively. There will be politics, recipes, concert reviews, photography, poetry, and anything else that interests me. When I write about software development, I might be writing about things I am learning or packages that I have released or maintain. It might be Ruby, or it might not.

I will not run advertising, but I will put affiliate codes for any software, music, or books that I post about. When I have written software reviews in the past, I have been offered and accepted free copies of the software in question. I may do so again, but I will not let any such consideration direct my opinions and I will call out such consideration in the review.

Unless otherwise called out, I do not represent my employers (past or present) with what I write here. The opinions I express here are mine, and mine alone.

…the comments

I do not have comments on halostatue.ca for reasons both technical (I use the Hugo static site generator) and social (I am not going to provide a platform to people who require moderation). Should I publish something worth sharing and discussing, there are sufficient places including Hacker News, Reddit , Newsblur, Twitter, Facebook, and Google+.

…old stories

This verison of my site has some house-cleaning applied as opposed to the previous version based on WordPress.

  1. URLs. Since halostatue.ca has been offline for a few years, I’m deciding my URL structure anew. I am not going to do a lot of work to make sure that old URLs still work. Sorry.

  2. Modified or updated articles. I’ve taken the opportunity to update some articles. Each article so changed has a section at the bottom covering the changes.

  3. Articles that I have not republished for any or all of the reasons below.

    • It said nothing worthwhile.
    • It isn’t relevant today and has little or no historical value. Several posts from 2006 fit this, like articles on Ruby’s (lack of) Unicode support (Ruby 1.9 and 2.x address this nicely).
    • It responded to something longer available on the web.
    • It had a tone that I would not use today, and it wasn’t worth updating.

…other services

I can also be found elsewhere.

…the name

I have moved the halostatue story to its own page.


  1. I am an immigrant to Canada, having emigrated from the United States of America in 1998.
  2. That is, the software was made available for use by people other than myself. I consder other people using build scripts that I have written having shipped those scripts, in addition to the obvious cases of deploying server software for access or sending installable packages to users.
  3. Ansible, Awk, Batch (both COMMAND.COM and CMD.EXE), C (Pro*C), C#, C++, Delphi, Go, Io, Java, JavaScript (CoffeeScript), LaTeX, Lua, M4, Objective-C, PHP, PL/SQL, Pascal, Perl, Puppet, Python, REXX, Ruby, Tcl, Unix shells (Bash, Korn shell, zsh), Visual Basic (VBA). I have not included languages or formats that are not in and of themselves programmable, even though they are highly structured and may have a steep learning curve (such as CSS, HTML, JSON, SQL, or YAML).
  4. In my mind, a dialect of a programming language is one that is fairly similar to another programming language. As an example, I mention the various Unix shells I have used. They’re all related to the original Bourne shell (except for tcsh and fish), but there are features in ksh that do not exist in bash and vice-versa. zsh tends to have all the features, but it is possible to write software in zsh that could not run in bash without changes.
More Reading