2019 Year In Review

My 2019 is best described as focusing on soft skills and taking on new roles in my career. I was able to work on a number of exciting projects as well, but those were natural progressions from projects I worked on previously, whereas so much of the soft skills were brand new, challenging experiences.

Remote Work

For the first time in my career, I spent 2019 working 100% remotely. This was first from Australia from January to May, and then from California for the remainder of the year.

The ability to work from home has been a double-edged sword. I really appreciate the flexibility provided by working from home. I start my day early, over a cup of tea, and I can take a break in the middle of the day for lunch, a nap, and to walk the dog, before getting back to work on my own schedule in the afternoon. However, there are downsides. Most importantly, remote work makes it harder for me to connect with my own team on a social level, creating a feeling of isolation. Even being back in the States and on a similar time zone as my team and company, I still find it difficult to connect with others and often feel isolated.

I believe the benefits of remote work outweigh the downsides, and I will continue to work remotely through 2020. I am looking forward to finding ways to better connect with my own team and and communities outside my team to improve my remote work experience.

Open Source Work

Most of my work this year was within private repositories. Nearly all of my open work was done during my time working in Australia, but I ran into priority and bandwidth constraints after returning to the States, shifting my focus away from work that I began while out of the country.

I was able to stabilize the Courier project that I began developing at my work with Quartzy, and I am very happy with the effort. I don’t know what sort of impact I will have on this project going into 2020, however, based on reasons discussed later in this post.

I also put together a working MVP for my tmust project, which is my take on the fantastic Tmuxinator, written using Rust. The project was primarily meant as a way to explore Rust, but I also use it successfully for managing my own tmux environments locally. This is an instance of a project which I began with some goals in mind, but ended up not completing all of them as I shifted from Australia back to the States and my priorities changed.

I began similar explorations into Kotlin, building a web application using ktor and GraphQL. I enjoyed the language, but I was a bit disappointed in the build environment (Gradle and Maven, primarily). I continue to following the progress of the Kotlin language, and I may look into it again at some point to see if I can reconcile how I have grown accustomed to working in PHP with the ecosystem around Kotlin and the JVM.

Finally, in my explorations on blogging software I made a contribution to the Jigsaw project to support draft posts.

My take on my open contributions this year is that I struggled to commit to a project and see things to completion. This makes more sense in the context that most of my open contributions were about experimenting with new tools, but I believe that experimentation will have better results in the future if I better set my goals and see them to completion.

Leadership and Project Management

In 2019 I took on leadership in two new ways. I found both to be fulfilling experiences, and I will be working to find more ways to take on these sorts of roles going into 2020.

First, I took on the role of Tech Lead for the backend team at Quartzy. In many ways, the title just codified many responsibilities I already had on the team, but it also introduced new responsibilities. I already often acted as a first point of contact between our project managers and engineering team for discussing feasibility of new projects, but the new role made this official. It also became my responsibility to understand the bandwidth of others on my team, each of their areas of expertise, and how we could best work together to accomplish projects. As part of that initiaive, I also began doing one-on-ones with members of the team on a regular basis to discuss technical challenges they faced and ensure they had everything they needed to suceed. The role introduced new soft skill work into my routine, and I found I really enjoyed playing this larger role in the success of my team. I was also given leeway to help design processes for our team and understand how we could better structure ourselves to support other parts of the company.

Second, I worked through two different projects in which I acted largely as both project manager and architect. These projects allowed me to play larger roles in designing requirements with product owners, creating timelines and schedules, assigning work, keeping the project on time, and keeping the larger organization aware of progress, on top of the normal technical design and execution I am accustomed to. I really enjoyed digging into the problem set to understand needs of users as well as compatibility with third-party systems to define the problem we wanted to solve for our users and how we planned to do so. I think the domain I am developing systems within is much more important than the system itself, so it was great to be in a role where so much of my time and focus could be on the domain and gaining a better understanding of it.

Consulting

I began independently consulting with a company for the first time ever late in 2019. Joining a team as a consultant has a very different vibe than as a full-time employee. When I have joined teams in the past, it is with the expectation that changes I make to the code base or to the processes of the team will be my responsibility for some number of years to come. This means that I have some skin in the game and it brings validity to my suggestions. As a consultant, I found it awkward to make suggestions on how the team might function or how certain pieces of code could be structured in the long-term. My role as a consultant here was to implement new functionality for the project, so I still believe it was the right decision to not try to impact processes of the team. However, I did still have to get over the sensation in regards to code, as there was no way around me defining certain pieces of infrastructure design into the exisitng systems that would be around after I finished my contract.

The other challenging part of consulting was prioritizing my time between jobs and maintaining a work-life balance. I didn’t really enjoy this part of it. I was consulting with two companies, so I balanced times working for each group based on scheduled meetings with each group or when certain teammates might be online. It also felt odd to be to be working on billable hours, since in the past I have often gotten lost exploring something for work while watching TV, but those aren’t really billable hours since I’m not giving it my full attention.

Consulting was great as it allowed me to work on new projects and try out some new things. However, I much prefer working full-time at a small company, whose product I find interesting and that will allow me the flexibility to work from where I want and when I want to maximize my efficiency and work-life balance. Finding a company like this means I get many of benefits of consulting, without the pressuring of managing my own time, charging billable hours, or finding the next opportunity.

Moving on to Something New

Finally, I am closing out the year leaving my current role at Quartzy. I have been with Quartzy for three and a half years, and it has been an amazing experience. I might create a separate post of my experiences with the team and everything I was able to learn in my time with them. For now, I believe it is enough to say that my time with Quartzy has had a significant impact on where I am in my career as a developer, and I will never forget the amazing team I worked with there.

I will be taking on a new role at the start of 2020, that I may cover at a later time. I am excited to bring everything I experienced and learned at Quartzy to a new team and domain and see what is in store for me next.