My Year in Review: 2013
Series: reflections February 10, 2014
I’ve done a yearly writeup for the past two years. I always struggle to reflect and look back on what I’ve done, so writing this post is almost therapeutic. It’s the middle of February, but hey, better late than never.
I started 2013 working on an embedded wireless lock system for a security company. I am hopelessly out of my comfort zone when it comes to embedded C or hardware, so luckily I was mainly working on a Ruby web app that ran on Linux on a microcontroller. You know those Linksys configuration pages where you go to forward ports and stuff? Basically, I built that but for technicians to setup wireless security systems.
It was a difficult project with a tight deadline, but it was neat to work on a physical product that you can actually go buy in a store. The team was large (around 15 developers at the peak) so there were struggles with planning and coordinating, but overall, the team has pleasant to work with and came together to get the product shipped.
I continued working with Mike on MoraleApp, building new features and doing support for our [slowly] expanding base of users. One of the biggest issues we have is answering the question of “what do I do with this data?” so I spent some time writing some general “tips” and making them show up when a team isn’t doing great.
Mike and I both struggled with momentum on MoraleApp; we both have other duties so it makes it tough to try to build a product at the same time. And when we did manage to get a bit of bandwidth, we struggled with figuring out what to do next. MoraleApp has been our own little crash course in product development.
I sound down on MoraleApp, but it is still chugging along with minimal support needed. We’ve signed up over 100 companies and have logged over 70,000 daily moods — still pretty amazing to me since I built Version 1 in one weekend.
I filled the rest of my year was odds and ends: helping upgrade a legacy Rails app (on a weird stack of jRuby and IIS…), doing a few estimates for mobile work, and a full fledged story mapping and discovery session for a web app.
The summer months brought an influx of new employees — both new hires fresh out of school and this year’s crop of interns. It’s great to see some new faces, but sometimes hard to find projects for everyone to work on. I noticed a couple new engineers had been left to fend for themselves doing maintenance on an internal tool. Several years ago, the company built an app called “Corporate Resume” that tracks all the projects SEP has done, what technologies were used, who worked on them, etc; it comes in handy for marketing and business development.
I ended up joining two newbies and we gutted the aging project; bringing in some newer technologies and making sure that the new app would not easily fall into disrepair. The old project had lots of baggage so we re-branded the project as “Chops” — a tool for tracking the development chops of the company.
I think the jury is still out on adoption of the tool among the engineers, but the project was fun and a great way for me to introduce SEP engineering culture to a pair of bright, new developers.
As fall rolled around, I finally found some billable work — building an Android app for a local credit union. It had been almost 2 years since I last did Android, but I was excited to dive back in — especially after seeing the improvements to the developer ecosystem (mainly testing, yah!).
This is (the project is still ongoing) my first project as a Tech Lead — meaning that I was in charge of picking tools for the team, doing system architecture type stuff, and generally trying to help the team build awesome software. It’s been a challenge to try to clear paths and build scaffolding so that the other team members can be more productive, but it’s been fun to be able to have a large say in how our code base grows.
I’m really pleased with our current testing setup. We’ve got a full suite of unit tests and then a nifty setup where we can run automated tests on seven different devices on every commit. Compared to my last Android project (with two full time testers running hundred page test plans), our approach is miles ahead and has made working with Android much more enjoyable.
Stringer, an anti-social RSS reader
In March, I wrote my own RSS reader with Ruby and Sinatra because Google Reader was shutting down. I didn’t like any of the other solutions and wanted something I could just spin up on Heroku; apparently so did a bunch of other people. With over two thousand stars on Github, contributions from over 60 people, and being translated to 15 languages, Stringer has been my most successful open source project to date.
Stringer is mostly in maintenance mode now. It does what I want it to and works for most people’s needs. I brought on a contributer to help maintain the project and I still get a few issues/pull requests a month.
Capuchin, Jekyll for Mailchimp newsletters
I wrote a ton of newsletters this year (more on that later) and as much as I love Mailchimp, I really hate their WYSIWYG editor. I write in Markdown, dammit! None of this rich text crap!
I wrote a simple gem that mimics Jekyll (my blogging tool of choice) and allows me to write content in Markdown and then creates the newsletter via the Mailchimp API. It is especially helpful for text-heavy posts.
This was my first gem that I published on Rubygems.org and it was a good learning experience. I hadn’t built many command line tools before so it was interesting to dive into the source code of other tools and see how they do things.
Gem License Checker, insert Gemfile => output list of license
Gem License Checker was kind of a dud. I built it during one of the SEP Startup Weekend events because we had a very small need for it on a work project. Ultimately, it wasn’t super useful and didn’t get much use. Oh well.
Triplico, share YouTube videos with small groups
Triplico was definitely a dud. I got a case of the weekend hack madness and decided to solve the very important problem of how to share YouTube videos with my siblings. I had been pasting lots of videos into IM conversations and text messages and thought “THEY HAS TO BE A BETTER WAY!”. And then I started thinking about how arbitrary limitations affect product design (140 characters on Twitter, 6 seconds on Vine, etc) so I built an app that lets you share videos, but only with two other people.
This was a big flop, I didn’t even use it once after it was built!
Lagom, a blog theme with just the right amount of style
It’s gotten around 50 stars and 70 forks and I’ve seen a few blogs in the wild that are using it, so that’s cool. I’m happy to give back after ripping off of Tom Preston-Werner’s theme for so long. I really wish Jekyll had a better standard for themes, I’d probably release a few more if it was a bit easier.
Greyhouse Online Store
I helped build an online store for a coffee shop at my alma mater with a friend. It originally started as a Rails rescue project, but we ended up just using Shopify with a bunch of custom Liquid templates.
Another small freelance project I helped out with; this one involved building out some user profile features in a Rails app that helps anti-human trafficking organizations share resources. It was interesting working in a remote, asynchronous style (I worked in the evenings, the rest of the team during the day).
Things kept chugging along on this blog. I wrote 37 posts in 2013, more than 2011 and 2012 combined. I wrote almost weekly from May to September. Page views were up 33% over last year.
The top three posts in terms of views:
- Worst. Bug. Ever. (44,624)
- Do things, write about it (35,822)
- How not to validate email addresses (13,779)
My three favorite posts I wrote:
I started writing two newsletters in 2013: a monthly newsletter under the Indy Hackers branding and a (now-defunct) weekly newsletter about building awesome software.
Hacks && Happenings is a monthly newsletter that features projects, meetups, and blog posts related to developers in Indiana. I co-run this with my good buddy Miles; he helps me collect links and I do the monthly writeup. That list is up to 130 readers, with a 65% open-rate and is going strong.
Building Awesome Software was a weekly newsletter that I started in Septemeber. I wrote 9 issues on software topics that were interesting to me; a bit of UX, a bit of testing, a bit of ranting. I was heavily inspired by Nick Diasboto’s weekly newsletter, but ultimately I ran out of steam (and topics) and haven’t posted to the list since November. It was an interesting experience in trying to build an audience from zero (I got it up to 150 pretty quickly).
I really like writing, but my desire to write comes in spurts (part of the reason why this yearly writeup is 2 months late…) so it’s been a bit of a personal quest to figure out how to best harness my enthusiasm.
I started a table tennis league for local tech companies. So far, we’ve played two other companies in a home-and-home series and are 1-1 overall. Table tennis has become my go-to “I need a quick break” activity and it’s been funny to see people at work start getting serious and buying their own gear.
I attended SCNA for the second year in a row; it was a great event again. This time I got to go on the company dime and do a bit of business development (which for developers just means talking to other developers). We ended up taking a small group up so there was plenty of interesting discussions and a built-in social group to hang out with. I high-fived Gary Bernhardt and Katrina Owen, so my life is only going to go downhill from here.
I deleted my [dormant] Facebook account and started sending a quarterly email update to the handful of people I still wanted to keep in touch with. I really like writing emails apparently.
I got promoted over the summer; I was very fortunate to have a wide variety of projects in my time at SEP thus far and to learn from some great people. My career has followed a simple loop: seek out opportunities, demonstrate competence, reflect, improve, and be rewarded with more opportunities.
New year, new ideas
The most interesting new ideas I came across in the past year — and ones I hope to incorporate more into my life:
- Punished by Rewards: Rewards harm intrinsic motivation, our workplace culture is full of shallow “reward schemes” that ultimately fail when external rewards are removed. Finding out why people are not intrinsically motivated is way harder, but much better in the long run.
- So Good They Can’t Ignore You: Stop feeling bad because you haven’t “found your passion”. Focus on getting better and great work will follow. Satisfaction with work comes from autonomy and skill, not free lunches and beanbag chairs.
- System thinking over goals: Setting goals is for suckers. They make you feel bad until you hit the goal (or fail and feel worse) and then you lose purpose. After accidentally using systems thinking in 2012 and getting away from it in 2013, I am fully back on board for systems in 2014.
- Jobs-to-be-Done: The “milkshake phenomenon” is incredibly interesting to me. Probably because it’s a classic “Turns out…” reveal, but I think this concept has legs. Not sure how, but I’d like to try out some of the approaches in JTBD this year.
- Inspiration from outside software: two non-technical disciplines really captured my attention. The first was a great mini-series about the process of designing buildings and how they grow and change through usage. The second was a talk about hand tool woodworking (okay, this was from 2014 so I’m cheating…). There was something so visceral and tangible about physical buildings and furniture that interests me. Not sure where that interest might go, but excited to see.