Hardware Accelerated Plex Transcoding with consumer GPUs in Dell Servers

One of my recent projects was to improve my Plex media streaming experience by figuring out how to install a consumer graphics card into the Dell server I built a few years ago. The main problem I was facing was being able to watch any sort of 4k videos on devices which only viewed content at 1080p, or being away from home with a slow internet connection that couldn’t stream the high bitrates of 4k content. When these situations occurred, the Dell server’s CPU would kick in to transcode the 4k content down into a lower resolution for streaming. Most of the time, the CPU would start struggling to transcode the video at a fast enough rate, causing constant buffering of the video. All 24 of the CPU’s cores would be maxed out, but that’s still not enough for modern video codecs and bitrates.

The solution was simple enough in theory. Get a graphics card, install it into the server, and configure Plex to use it. Should be a pretty quick process, right? It took me a few weeks to source the right parts, some crafty work, and lots of research to make sure I was doing things right, and not blow the server up. More on that last part later. Make sure you have Plex Pass if you’re following along.

Initial graphics card

I had a few graphics cards lying around, so why not try those in the server? Pop the latest one in and discover that it won’t actually speed up video transcoding. It turns out that to be able to support video transcoding, specifically encoding and decoding of video, a pretty recent (in the last several years) graphics card needs to be used. A great reference that everyone uses for graphics card compatibility for Plex transcoding is this Nvidia page. For Nvidia graphics cards, Plex needs the card to support the nvenc (encoding) and nvdec (decoding) functionality for the specific video codecs of your content. I don’t have firsthand experience with AMD graphics cards, but imagine they follow a similar path as I went through.

Most of the video content these days is encoded as either h.264 (AVC) or the newer h.265 (HEVC) codecs. Plex can tell you which codec your videos are using. Not common at all yet, but a successor of h.265 is AV1, which is only supported on some of the latest graphics cards. It will be years before content starts showing up as AV1, and even longer for the mass majority of content defaulting to AV1. We’re still split between mostly h.264 with an increasing amount of content showing up as h.265 now.

Looking up the graphics card that I had in Nvidia’s compatibility matrix, it was clear that it was too old and didn’t support any of the necessary encoding and decoding of h.264 and h.265 videos. Time to find a card that would suffice, and not break the bank.

GTX 1660 Ti

From looking at the compatibility matrix, the Geforce GTX 1660 Ti stood out to me as a good balance of power usage, compatibility for both nvenc and nvdec for h.264 and h.265, and a relatively low price on Facebook Marketplace of $140. This card does require extra power from a 8-pin pci-e power cable, but the Dell server looks to have one of those available. I also looked into an RTX 4060 or newer for future-proofing with AV1 codec support, but they’re still quite pricey even on the aftermarket. GTX 1660 Ti it is. I didn’t even bother looking into buying a Nvidia Quadro graphics card, but some of them do show up for sale on secondhand marketplaces. They should work as well.

Immediately after getting the card I had to figure out how to connect the 8-pin female port on the server’s power supply to the 8-pin female port on the graphics card. Usually in consumer desktop hardware, the power supply would already have a free 8-pin cable available, making this process of plugging the graphics card in very easy. The server didn’t have this extra cable available. It was either buy a male to male 8-pin cable off Amazon or Ebay and wait for it to arrive weeks later, or fudge something together by hand. I chose the latter as this was faster, and how hard could it be, right?

I soon discovered a part of the internet where people were discussing powering GPUs in desktops, powering GPUs in servers, people frying their hardware, similar but incompatible 8-pin power standards, what are these “sense” pins, and more. This quickly brought up the seriousness of what I was getting in to. I don’t want to damage any of my hardware if I use the wrong cable or provide too much power to the video card.

After some reading, I discovered that there’s two very similar looking 8-pin power connectors for hardware inside of computers. There’s the pci-e 8-pin standard which is widely used for graphics cards. It has three wires that run 12v, and the rest are all ground. Then there’s the other 8-pin standard called EPS-12v which looks incredibly similar, but has four 12v wires and four ground wires. It would be bad to connect a pci-e 8-pin port to a EPS-12v port – you’ll damage some hardware that way.

After more reading, I found someone doing something similar in a newer generation Dell server than mine. Their experience and concern brought up the fact that some servers can provide an 8-pin power port for graphics cards, but use a different layout of which pins provide power and which provide ground. There’s no closure to how it went for them, but this gave me the idea to follow in their steps and use a multimeter to inspect what voltages are actually going through each of those pins. This would influence my next steps of whether building a custom cable would work for my use case.

The goal was to determine the voltages coming out of the server’s EPS-12v connector’s pins. I familiarized myself with using a multimeter from a few different articles and videos, and trying out what I’ll be doing on the server with a spare PC, as I didn’t have much experience with electronics at this level. I also didn’t want to break anything in the process. After experimenting with checking the voltages on the spare computer’s 8-pin pci-e cable, I felt confident enough to inspect the server. I ended up with some surprising but useful results.

It turned out that the Dell server has a EPS-12v connector. Written beside it on the circuit board is GPU POWER, leading me to believe it should work for GPUs. When checking the pins, instead of four 12v pins, there was actually three 12v pins – similar to 8-pin pci-e. This was a big warning that plugging anything into this port should be done with lots of consideration as this isn’t actually a EPS-12v power connector! It’s a pci-e 8-pin in disguise.

At this point, it was clear that there was the right number of 12v wires and ground wires for a graphics card to theoretically work in this server. I bought a few pci-e 8-pin cable extenders that would fit into the server’s EPS-12v port and graphic card’s pci-e port. What I needed to do was splice the female-to-male cables into a male-to-male cable, with the 12v and ground pins in the right orientation. This required a lot of patience and triple checking that the right wires were in the right orientation. I only had one shot at this, as failure would potentially fry parts of the server.

Another multimeter trick I picked up was testing the continuity of a wire – basically can electricity flow from one end of the wire to another. This helped with verifying that my splicing of the power cable with butt splice connectors was solid, and that there weren’t any wires somehow crossing each other.

Once I was confident enough with my custom cable creation, it was time to proceed with the riskiest part: install the GPU and its custom power cable into the server. I found an afternoon to take the server offline, remove all the hard drives in case of electrical failure, plug the new cable in, test the voltages again, and plug the graphics card in. I monitored the server’s vitals and boot-up via the iDRAC remote management interface from my laptop. It started up and worked like a charm. As the stress and tension of massive hardware failure departed, it was time to move on to putting the server back together and moving over to the OS configuration side of things.

As we can see in the above image, the graphics card and its power cable are successfully installed. Not pictured is a big plastic piece that covers the RAM and processors to better direct the airflow – it won’t fit anymore with this big of a GPU present. Also note how tall the graphics card is. It’s almost sitting on one CPU’s heatsink, while the top is almost flush with the top of the case. Of course there’s no holes in the case for the GPU’s fans to get air from, but there’s thankfully a small enough gap between the graphics card and the top case to provide enough airflow.

Aside: Dell’s quick release for pci cards sucks

After the successful power test, I needed to move around some pci cards before closing the case. I quickly found out that the quick release mechanism which slides down over the sides of the pci cards was stuck. There’s some small metal bumps that stick out to provide force on the pci cards to keep them well-seated. Well, this just got stuck on the graphics card, and now won’t loosen. The graphics card was now stuck in the pci slot. After some Googling, it doesn’t seem like anyone else has faced this issue, and brute force wasn’t going to bend this metal bump out of the way. The only thing that breaks is your skin on its sharp metal. I ended up ever so carefully bending the server’s pci riser card out of its slot and the graphic’s cards, cutting part of the case to free one side of the graphics card, then pulling the graphics card free. With this now free, I cut off the quick release mechanism so that it would never happen again.

What a piece of crap.

Nvidia drivers

Now that the graphics card was installed, powered up, and the system would boot normally, it was time to get the Nvidia drivers working. Some context about my Plex setup: it runs in a docker container on Ubuntu server. Part of enabling Plex running in a docker container is to install the Nvidia drivers on the Ubuntu host, as well as the nvidia-container-toolkit package too.

I had hoped that installing these drivers would be easy, but one can dream. It’s painful, especially if your server is headless, and you’re avoiding installing xserver, the basis for window managers.

If you’re going through the same process, I recommend giving the ubuntu-drivers tool a try to install your drivers first. It seems well recommended and documented by Ubuntu, though didn’t come preinstalled in my version of Ubuntu. I didn’t have any success with this method, and instead manually installed a bunch of packages recommended by a sleuth of places online. The following is what worked for me.

I followed the instructions on this Nvidia page to get the nvidia-container-toolkit package installed and configured for both docker and containerd support (since I had both installed on my system). Then the following packages installed the drivers, the libs for encoding/decoding, and utils for the nvidia-smi tool.

$ sudo apt install nvidia-dkms-535-server libnvidia-decode-535 libnvidia-encode-535 nvidia-utils-535

A reboot later and the nvidia-smi command, a way to see the status of any Nvidia GPUs on the system, showed that the graphics card was working. If this wasn’t showing anything then there’s likely a problem with the hardware or the packages that were installed.

Configuring Docker

Now that the host can see the graphics card, its time to configure docker and the Plex container to use it. The Plex docs and linked docker-specific docs have a good overview of enabling hardware transcoding.

For the normal docker command, the --gpus all flag is all you need to specify. I use the LinuxServer brand of docker images, and their Plex docs recommend a few different options all specified. Those are --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all which automatically mounts the GPU and drivers into the container. It seems like the --gpus flag is newer and built in to docker – it might deprecate the --runtime=nvidia method. I’ll stick with what LinuxServer recommends until they change. I use docker-compose to manage Plex for me, so the command line options to run Plex on docker are slightly different and defined in yaml files.

Configuring Plex

At this point, recreating the Plex container should expose the GPU to Plex. Following the Plex docs on enabling hardware transcoding should make it so that any transcoding that Plex needs to do will use the GPU instead of the CPU. In the Transcoder settings section you should also see your graphics card present in the Hardware Transcoding Device dropdown.

Now go and try transcoding a video on your TV or phone. Avoid trying it out with the Plex web UI, there’s a history of transcoding issues that myself and others are facing. You should be able to successfully transcode 4k videos to different resolutions without breaking a sweat. Running the nvidia-smi command on the host should show that a Plex process is using the GPU.

Here’s what I have set for my transcoding settings. Plex has these configuration options well documented. I’ve noticed that the Transcoder Quality option can be set to its highest and still perform completely fine without exhausting my GPU and CPU. I don’t have many concurrent videos being streamed, so I haven’t been able to bottleneck this setup.

Configure Plex to use a ramdisk for temporary transcode files

One of the quick and instantaneous speedups to watching a transcoded video was switching over the Plex temporary transcode directory to be /dev/shm – Linux’s temporary filesystem stored in memory. When set to nothing, it uses the default Plex application support directory. I had to expose /dev/shm to the docker container for this to work, as the container doesn’t come with it by default, and update the setting in the Transcode settings page in Plex. After this was enabled, I immediately noticed it was much quicker to seek forward and backwards in a video being transcoded. Almost as if the video wasn’t being transcoded at all!

Transcoding for Plex web issue

As mentioned earlier, myself and others have had a lot of difficulty watching transcoded videos when using the Plex web UI. Transcoding works perfectly everywhere else. There’s comedically long Reddit and Plex forum posts to help debug this exact issue, and its still going on. I haven’t been able to find a fix, but it’s likely on the Plex web side of things. Hopefully the Plex developers will be able to fix this.

Instead of starting a video, then switching the quality over to a transcoded version, there is a workaround for starting a video at the necessary transcoded resolution. I’ve had this work, but it’s a pain.

GPU load testing

As a fun last thing to do, there’s simple tools out there to stress test your GPU over a period of time. I came across the wonderful gpu-burn project which provides a easy way to stress test your GPU. Someone has created a pretty popular docker image that can easily be pulled to run this command. It can be run via a

docker run --gpus all --rm chrstnhntschl/gpu_burn 120

where 120 is the number of seconds to run the test for. I found that running the test for 10 seconds or less didn’t actually provide enough time for the test to start up and run. Running it for a few minutes or more is best.

In my case, Plex would only take up around 600 MB of GPU memory when transcoding a 4k video, and would take up less than 10% utilization, with power staying around 25w and thermals around 30 celsius.

As I’m running the stress test, I’m keeping an eye on the output of nvidia-smi. It really does stress your GPU to the max. I was seeing most memory being used, 100% utilization, 100% power usage, and thermals around 60 celsius. Not so bad for a consumer GPU jammed into a server with a handmade power cable. After the test I noticed the temperature gracefully decreasing all the way down to 22 celsius – that’s a testament of decent airflow design in the server. I’ll likely never see the GPU being utilized this much, but it’s good to know that the server can handle it.

Conclusion

My use case of having an enterprise-grade Dell server run a consumer-grade GPU for Plex transcoding ended up turning into quite a longer journey than initially thought. I would not have expected some things such as the graphics card getting stuck in the case, or building my own power cable, but there’s some constants in technology such as drivers always being troublesome, or software bugs lurking around the corner.

Time to go enjoy the fruits of my labour.

Growing Teams with the SBI Model: A Framework for Effective Feedback

As a manager, one of our key responsibilities is guiding the growth and development of your team members. Providing timely and impactful feedback is crucial in helping your reports enhance their skills and continuously improve their work. The SBI model is my go-to framework for giving both positive and critical feedback. I’ll go into the key aspects of this model and share a few personal takeaways to help you effectively implement it in your role as a manager.

If you’re familiar with the SBI model for feedback, feel free to skip to the takeaways section.

The SBI Model Explained

The SBI model, which stands for Situation, Behaviour, and Impact, is a structured approach to giving feedback. This model provides a clear structure and ensures that your feedback is specific, actionable, and focused on the effect it has on the recipient and the team as a whole.

1. Situation

Start by describing the specific situation or context in which the behaviour occurred. This helps the recipient understand the context and identify the exact incident or scenario being referred to. For example, “During yesterday’s team meeting when discussing the project timeline…”

2. Behavior

Next, describe the behaviour or action that you observed. Be objective and focus on observable actions rather than subjective interpretations. Phrases like “I noticed that…” or “You did/said…” can be helpful in this step. For example, “I noticed that you interrupted your colleague multiple times while they were presenting their ideas…”

3. Impact

Finally, explain the impact of the observed behaviour on the individual, the team, or the project. Highlight the pros and cons. This step helps the recipient understand the significance of their actions and the importance of change. For example, “This behaviour may have made your teammate feel disregarded and demotivated, hindering collaboration within the team.”

This part is key as it explains what the benefit or consequences of the behaviour were. Ideally, the individual will acknowledge what they’ve done and treat this as a valuable takeaway.

Personal Takeaways for Effective Feedback

After practicing the SBI model for several years to provide both positive and critical feedback, here are a number of takeaways that I’ve learned.

Lay the foundation for giving and receiving feedback

When meeting a new team member, or working with someone new, it can be helpful to be explicit about your intention to help them out by sharing your intention of providing them feedback in the future. It’s also helpful to mention that you’re open to receiving feedback. This has a threefold effect: showing that you’re interested in supporting their success, preparing them to be open to receiving feedback, and the potential for yourself to receive feedback.

Write the feedback out beforehand

Before giving feedback, take some time to reflect and organize your thoughts. Writing out everything you plan to say helps ensure that your feedback is clear and concise. It also allows you to focus on the delivery of the feedback rather than worrying about the mechanics of the feedback model. This preparation enhances the effectiveness of your delivery. Over time you’ll get better at this, both determining which moments feedback should be provided, and being able to do it off the top of your head. When face to face with the recipient, mentioning that you have collected your thoughts by writing down the feedback and will read it back now can reduce the awkwardness of sounding like you’re reading something that has been written down.

Build up a habit of providing positive feedback

Not everyone will be used to receiving positive or constructive feedback from you. Its impossible to know how they’ll respond, and how open they’ll be. One way to work at building up a repertoire of providing feedback is to start by providing a few genuine positive feedbacks to the recipient over a period of time. An unsolicited message can do it. Over time this builds up the trust and shows that you’re supportive of them. Once this trust and openness has been built up, the recipient will likely be more open to and appreciative of constructive feedback.

Positive feedback can be shared via a quick message, but constructive should often be face to face

Many types of positive feedback can be shared over a quick message or email as there might not be much back and forth after the fact. It can be quite easy to make a message sound positive to the recipient. When it comes to constructive feedback, its easy for a recipient to read a message and misjudge the tone, making the feedback sound harsh. Having a real time face to face conversation provides much higher quality experience where the recipient’s emotions and reactions can be picked up on in realtime. Having a face to face also shows that you’re invested in their success as this takes more effort than composing a simple message or email. Another benefit is the proceeding conversation the recipient and yourself may have to dig deeper into the feedback, how they see things, etc. is faster than over messaging or email.

Timing

Providing feedback promptly is essential. Ideally, give feedback on the same day or as soon as possible after the incident. This ensures that the feedback is fresh in both your mind and the recipient’s, maximizing its effect. Delayed feedback may not have the same effect and can lead to misconceptions or forgotten details.

Aim to chat now or clearly schedule a time to share feedback

Blindsiding someone with feedback can be a surprise, especially if a meeting invite shows up out of nowhere with no details. Give the recipient a heads up if they would like to receive some feedback. Mentioning that it’s positive or constructive feedback meant to help them can help lower their defences and be open to the feedback.

Not everyone will be open to feedback

It can happen that someone just isn’t comfortable with receiving feedback, or that right now isn’t a great moment. Who knows what mindset the recipient is currently in. This can happen, and it’s of no use to push feedback on to someone who doesn’t want to receive it. This would lead to a loss of trust, amongst other negative outcomes. Instead, move on without providing the feedback. There might be another occasion in the future. Consider the previous point on providing unsolicited positive feedback. It may help open up the recipient to hearing constructive feedback.

Exclusively talk about the feedback

Prefer to grab some time to talk with the recipient outside of their ordinary schedule with you, and have the entire conversation only focus on the feedback and any potential questions or organic conversations that focus on the feedback. This makes it very intentional that the time should focus on the feedback and personal growth. It defeats the point if the feedback is promptly given, then the conversation pivots away to a different subject like it never happened. Time should be given for the recipient to reflect on it, ask any questions, and for yourself to make any suggestions, if necessary.

Don’t assume other people’s observations

Aim to provide feedback only on your own observations. Relying on another’s observations, especially if not present at the time can make it harder to form strong points for the SBI model. Sometimes this best practice should be broken if other’s have shared positive or critical feedback with you that is beneficial enough to share. As a manager, this is one of the superpowers: hearing how one team member is doing from other team members, and sharing that feedback to help their growth.

Providing feedback won’t always have the desired effect

Just sharing feedback with an individual won’t always change their behaviours going forward. Don’t let it weigh heavy on you or think badly of the recipient if you feel that it looks like previous feedback didn’t have any effect at all. It takes serious effort and willpower for someone to change their own behaviour. If witnessing someone completely disregard previous feedback, use this as another opportunity to provide feedback, while emphasizing that this was previously brought up. Provide benefit of the doubt as people can make mistakes, and it can take multiple times to get into the habit. As a manager, this is a powerful way to grow members of your team, but use it wisely.

If their attitude changes

People new to receiving critical feedback may have the feedback weigh heavily on themselves immediately or some time after. Criticism can be taken to heart. This can look like a stark negative change in their attitude. If this happens, help by empathizing with them that this is just a little bump on the road, and that the feedback is focused on the behaviour (which can be improved upon) and not a criticism of who the person is. More plainly: the feedback is aimed to improve their behaviours, not change who they are. Over time, receiving critical feedback can become easier and easier for the recipient.

Conclusion

Well done on making your way through the 69 mentions of the word feedback in this post! In summary, the SBI model provides a valuable framework for giving feedback that promotes professional growth and continuous improvement. By following the structure of Situation, Behaviour, and Impact, you can deliver specific and actionable feedback that helps your reports understand the context, the observed behaviour, and its impact. Remember to always provide feedback as soon as possible and take the time to prepare yourself before engaging in feedback discussions. By using the SBI model and incorporating these personal takeaways, you can foster a culture of growth and development within your team.

Twenty Eight

My 28th year has been a great one. This year specifically, travel has picked up a lot, house renovations have greatly progressed, and lastly a few achievements I’m quite proud of.

Travel

Scuba diving the west coast of Costa Rica

Travel-wise there’s been several trips for both work and pleasure. In January, I got to visit Costa Rica – a perfect time to visit. I spent most of my time in Tamarindo, one of the more touristy towns on the west side of the country – the locals have nicknamed it “Tamagringo”. Some of the highlights were spending time on the beach, going scuba diving off the Catalina islands, and enjoying such a wide variety of food with great company.

In June, I had the opportunity for one of my teams at work to travel to Berlin! Given half the team was located in Ireland, it was time to pay them back by having us Canadians and Americans cross the Atlantic. Plus, this was my first time over in Europe! Some notable highlights of this trip were bonding with my team over German and Turkish food, a beautiful bike tour of the city, tasting a variety of German beers, and ripping around the city on scooters.

Lake Ontario

This summer was a fun kind of busy. The majority of the month of August was spent visiting my folks cottage, girlfriend’s folks’ places, and a few weddings, all the while mostly working at the same time – this flexibility is pretty freeing. We rented a car and sped off to spend time in places like Gravenhurst, Collingwood, Toronto, and Prince Edward County to enjoy nature, friends, family, wine, beer, and cycling. I’m sure we’ll do something similar again next summer, with the added benefit of using my own car.

In October, I combined a work trip to New York with a few extra days of pleasure. This trip was spent hitting up more of the niche places across the city, such as doing a tour around Brooklyn breweries, experiencing more of the restaurants and cocktail bars, and seeing one of my all-time favourite electronic artists: Flume.

Career

Cocktail making class at an offsite

As with every year, work has significantly changed in great ways. I received a promotion to Senior Development Manager, which cements my path on being a lead of leads. This year also saw a lot of great accomplishments and learnings such as growing my people leads, preparing one of my teams for reaching “feature complete” on a product, and getting even better at growing development teams into being self sufficient. One big growth opportunity I’m targeting now is to focus on strategic thinking to lead my engineering and product area for tackling our next big goals.

House

At home, I’ve been spending much of my time continuing on with home improvement, specifically a bathroom, bedroom, and kitchen reno – most of which I’ve been doing myself and reaching out to the pros when needed! It’s been fulfilling to go from knowing zero about tiling floors and walls to being pretty competent. Nothing like picking up another skill that pays off. Other proud moments were painting my girlfriend’s new place with the wealth of painting techniques and knowledge – it’s a great feeling to cut edges with ease and roll walls to get perfect, smooth coverage. My bias towards taking the time to do things right definitely showed on this and many other projects.

Cycling

Some of the best cycling adventures this year have been back up at the cottage in Gravenhurst, a botched go up the escarpment in Collingwood, through the wine region of Prince Edward County, and a loop around Amherst Island. Don’t tell the rental car company, but I strapped a $20 secondhand bike rack to the back of this beauty of a rental car to aid with a bunch of these adventures. A very entertaining purchase this year was a bike computer and power meter pedals. This exposed a ton of data I’ve dreamed about having for my outdoor cycling. Now I’m able to more consistently measure my actual wattage and fitness. This purchase made early on in the summer brought a lot of great and nerdy data for the rest of the year.

As always, Gravenhurst was classic – smooth, scenic routes through cottage county. On one occasion I had one of my best buddies up to the cottage with his bike as well. We rode into Gravenhurst and hit up the excellent Clear Lake Brewing Co. We also both got over our fear of riding without holding onto the handlebars 😂

Prince Edward County’s wine country roads make for picturesque cycling

When in Prince Edward County for a May 24 long weekend wine tasting trip with friends, we rented bikes from a local place in Hillier. What ensued for the rest of that day was beautiful bike rides from one winery to another, passing by vineyards and farmland. Over 15 km (if that) we hit up several wineries and one brewery for tastings. I’m not the biggest fan of the reds and whites that this region has to offer, but the last place on our ride, Traynor Family Vineyard, had the best tasting wines. That could have been the tasty pet-nat style, or just us all being blasted – probably both. To finish off that great last tasting, we had the best sunset ride back to our Airbnb. Shoutout to this bike shop for their great service!

Leading up to visiting Collingwood for a week, I knew there was a sizeable community of cyclists of all capabilities and had to scope out what great routes there were. On my first day grabbing coffee in town I started a conversation with a local cyclist and they very helpfully recommended some great routes and suggested avoiding some others. Collingwood has the Georgian Trail, an old railway bed turned gravel path running from its west side to Meaford – 34 kms in total. This was a great way to get some great views of Georgian Bay and stop by Blue Mountain for a coffee. One of the big trips I planned was taking many of the scenic backroads up the Niagara escarpment. This meant epic hills, great views, etc. Probably an hour in and most of the way up the 200m climb, I got a flat. A couple inner tubes later I figured out my tire had been the problem, and I called in for a rescue. I still need to go back and conquer the 70km loop I mapped out.

Amherst Island’s many fields and wind turbines

Amherst Island is a small island east of Prince Edward County. I was lucky enough to be invited out for a weekend by my girlfriend’s mom and her boyfriend who has a place on the island. One of the mornings was spent doing a 2 hour loop of the roads that mostly run the perimeter of the island. Rough gravel was a bit of a pain for my slick road bike tires, but pumping them up even more handled it without a problem. This ride brought beautiful scenery of Lake Ontario and sprawling farmland vistas.

What’s next?

Getting back into reading, and writing for that matter, would be a great throwback! My blog is definitely lacking posts, though I’m still amassing ideas for content, specifically around management.

I’m also looking forward to concluding most of the renovations that have been taking up most of my time to put towards more consistent cycling. I’d love to get into longer distances and more elevation during rides. Maybe that means doing a few loops in Gatineau Park now that it’s becoming quite a routine ride, or combining it with a couple dozen kms along some backroads.

As always, I’m looking forward to more trips. As I write this, I’m on my way to spend 10 days on the beautiful island of Kauai in Hawaii. 

Twenty seven

October 1st just passed yesterday. Another year in the pandemic, though I tried to make the best of it! Here’s the 27th edition of of my yearly reflections on what I’ve been up to, what I’ve achieved, and where I’ve grown. You can find previous years reflections since I’ve been Twenty, Twenty-one!, Twenty-Two, Twenty-Three!, Twenty-four!, Twenty Five, and Twenty Six.

I made the biggest purchase in my life to buy a duplex here in Ottawa’s Centretown neighbourhood. I’ve also become a lead of leads in my engineering organization. I’ve even had a few big accomplishments with my road cycling hobby thanks to a few friends.

One of my friends asked me about the high and lows of the year. After a bit of thinking, buying the house was definitely the height of the year. The low likely was not spending as much time as I usually would with family and friends either up at the cottage or travelling around. Let’s get in to a few of the highlights!

House

I bought a house, and moved in on the 5th of July! The landlord of the place I was renting previously was a seasoned real-estate agent. He shared some of his marketing materials with me sometime last year. With lots of people buying places in the country instead of the city to gain more space, the tradeoff wasn’t particularly worth it to me. Over a year into the pandemic and I approached my landlord to ask him if he’ll be my agent. He agreed and a month or two later of not many listings going up due to the lockdown, one place in Centretown meeting my criteria eventually showed up. I viewed it, ended up falling in love with it, and put in an offer for the place. As luck had it, my offer was accepted!

The dining room after some fresh paint and furniture

Over the past few months, most of my free time has been going towards making cosmetic improvements to the place, running ethernet cables through the walls, deep cleaning everything, buying new furniture, and starting the never-ending decorating journey. I’m quite glad that all of the DIY skills and confidence I’ve gained helping my family with their projects when growing up is helping me greatly now. Having extra time on my hands certainly helps as well!

I’m quite thankful for having an interior designer friend who’s been very handy when suggesting furniture pieces and paint colours. I definitely wouldn’t have as cool looking of a place without it! Another great friend has also lent me a number of tools to help with the handful of jobs I’ve been doing around the place.

I’m most excited about entertaining and enjoying the house when I’m not in DIY mode all the time. This Christmas should be a blast hosting my family, and there’s likely a few house parties I want to throw as things open up more. As long as I’m enjoying the space with others, I’ll be fulfilled.

The top floor deck with obligatory string lights

Career

Earlier this year I received a promotion to become a manager of managers! Yes, I’m in full Office Space-esque “What do you do here?” territory. Jokes aside, this has been incredibly exciting as I am now accountable for the people and product across a handful of teams. Very recently many of my previous responsibilities have been handed over to two fantastic people leads on my team. The conversations I’m having with them, some senior developers, and high growth individuals are very focused on helping them grow their careers and impact that they bring to the team, which has been quite fulfilling.

On the product side of things, a recent trend has evolved from “build extendable features for the long term” to “build self-service, or low-code features for the long term”. This is a neat observation and paradigm shift, which reflects on the development teams being more mature, and the need to build the right knobs and switches into the system to more easily enable the business to change how they work.

For a number of months, I was short a people lead for one of the teams and took on the extra load of performing all of the people management work until we hired on a permanent replacement. I had something like 17 half-hour weekly one on ones with everyone who normally reports to me, and every developer from the team that didn’t have a people lead. This took a crazy amount of time out of my schedule, but I loved the chaos and leaned into it. This was a great test of my time management, prioritization, and delegation skills. Since I wasn’t able to be involved in each team’s day to day, I heavily leaned on the seniors of each team to take ownership over the technical and product decisions. This worked out miraculously well, and was an amazing growth opportunity for these individuals to take on more ownership and make more decisions. Each team being in a mature enough state to not require my day to day involvement was key for me to focus on the more important people management side of things.

Growing of these teams also took precedence, as it periodically does every year. We grew the teams by several developers, hiring folks from Ireland, around Canada, and even the US. I still have to remind myself that we truly hire great people to work with, both professionally and socially.

Cycling

Happily cycling from the cottage to Bala in my Shopify-branded kit

Where to begin. One of the biggest forces that has helped push myself out of my comfort zone and see just how much cycling I can endure was thanks to a great amount of healthy competition with some friends. When the weather got cold, indoor cycling started, and a number of cyclists from work came together to do some virtual group rides. Three of us wanted to go further and ended up cycling multiple times a week. Over a number of months of seeing our cycling strength and endurance increase, we signed up for some very tough challenges in our virtual cycling app of choice, Zwift. Those challenges were:

  • The PRL Full route, consisting of 175 km, 2281 m of climbing. It took 7 hours!!!

I have to pause here, since going into this, we knew that this would be pushing our limits, and then some. Our times continuously riding were about 4 hours max. My cycling buddies and I were expecting this to be a 6-7 hour ride for us. Cycling for this long becomes quite the mind game along with the expected fatigue. As I shared above, my cycling buddies and I were able to finish it! I was seriously questioning why I enjoyed this whole cycling thing for a few days after that. To get over the pain and suffering of riding the same hilly route 11 times during the challenge, I forced myself a few days later to go ride it once more to get over my newfound loathing of it. It worked. I got over it. The best part about this challenge was that every other challenge paled in comparison since none were as challenging as this!

Otherwise here’s a few other notable achievements from doing all of the indoor cycling on Zwift:

From all of the cycling, the amount of power I could exert increased from 2020 to 2021 significantly! Some quick number crunching shows a 40-60% improvement, which is mind blowing!

2020 (lighter line) to 2021 (darker line) watts/kg power curve.

When the weather warmed up, there was a number of great adventures and achievements that were had:

One of the funnest hills to climb on the Forks of the Credit ride, this switchback was beautiful to take in

I can’t wait to see what I’ll get up to next year cycling-wise!

What’s next?

Well, there’s probably a decent amount of travel I’m looking forward to over the next year. Some already figured out such as a handful of business trips to hang with the teams, and an unknown amount of personal ones with friends and family that I’m most excited about.

Once the renovations and DIY around the house have settled down, figuring out what I’ll do with the other unit is on the list. Having a second source of income can only help set myself up more for the future.

Hopefully I’ll do some even bigger cycling trips, and get around to that bike camping I wanted to get around to this past summer. Buying a bike computer and power meter would help on these adventures and regular training too.

2022 is looking bright!

Binge-worthy podcasts discovered during the pandemic

Throughout 2020 I have listened to hundreds if not now thousands of hours worth of podcasts. Have I learned anything useful? Not really. Did it help keep me entertained through the pandemic? Hell yes.

This blog post complements another post I wrote a number of years ago which collected my favourite podcasts over technology, entertainment, and software development. This blog post focuses more on the different types of entertainment that are great for binging through while on a long road trip, while doing some chores, or desiring an escape from the day to day. Here are my reviews for a number of the most noteworthy podcasts that have kept me busy over the last year.

Not Another D&D Podcast

Not Another D&D Podcast paints an incredible adventure through its hundreds of hours of episodes. Dungeon Master Brian Murphy is an expert at storytelling while balancing the randomness of the game of Dungeons and Dragons. His ability to have such a wide array of voices for characters in the story complements the improv of players Jake Hurwitz, Emily Murphy, and Caldwell Tanner. The allure of the podcast is building up an adventure that the listener is highly invested in while joking around enough to not alienate the story.

I haven’t ever played a game of Dungeons and Dragons before, but got introduced to this podcast and the idea of D&D through listening to a hilarious holiday special episode that featured Amir Blumenfeld. I was hooked on this podcast ever since, and have gone so far to subscribe to this podcast’s Patreon primarily for the again-hilarious post-episode commentary.

The Adventure Zone

The McElroy family puts this excellent role-playing games show together. Brothers Justin, Travis, Griffin, and father Clint partake in a handful of sagas across Dungeon and Dragons, and other role-playing games. I particularly find their D&D seasons more entertaining than the rest. Their gameplay takes a bit more of an absurdist comedy approach compared to Not Another D&D Podcast, but the storytelling and character building is still maintained.

Some of the other off-season games they have played haven’t been as interesting to me. The game of D&D brings out more excitement and variety to the storytelling, keeping me on the edge of my seat, compared to the other games which involved a lot less game mechanics and leant more on the story being told.

Black Box Down

Gus and Chris walking through the unbelievable chain of events that go into many air flight incidents leaves you with a new appreciation for the safety of the flying industry. Each episode follows the timeline of events until disaster or rescue and then dives deep into the results of multi-year investigations that most of these flight disasters go through.

Gus is the primarily the one driving the show with storytelling and introducing new information, while Chris adds questions and commentary that many of us layman listeners would wonder about. The show keeps the listener tuned in solely based on what surprising or interesting new information will unfold for the current real-life story.

Some of my favourite episodes are the unbelievable fight between a hijacker and the flight crew aboard a FedEx flight, an interview with a plane crash survivor who believes they benefitted from the incident, and the recent Malaysian Airlines flight 370 which disappeared over the Indian Ocean.

Triforce!

This isn’t for everyone. Some poop jokes, a hint of political incorrectness, and banter about normal life from these three guys is surprisingly entertaining and definitely NSFW. Their day jobs are of streamers – those who play videogames for others to watch online. They convene weekly to catch up and make each other laugh over the mundane experiences they have, whats latest in the news, or the games they play.

To add to the uniqueness, many of the early episodes feature Pyrion’s original short stories of Bodega, a gunslinger in a futuristic galaxy. Scoffee, short for space coffee, is this universe’s version of our own coffee. This, and a handful of other original words add to the fictional world. After enough interest, Pyrion wrote a Bodega novel to connect together many of the storylines originally read during the podcast. I haven’t read it yet, but should eventually pick up a copy for myself.

Whenever I’m in the mood for a good laugh I know I can revisit a couple favourited episodes, or choose a random one if I’m feeling lucky. Some of those favourites are the absurdity of being at kids parties (#25), Pyrion and his sketchy neighbour (#40), and imagining a new and very NSFW gameshow (#89).

Notable mentions from this year

Deep Cover

An FBI agent retelling their experiences of going undercover and taking down drug lords? ’nuff said.

The Orange Tree

Not your typical murder mystery, The Orange Tree chronicles the brutal murder of Jennifer Cave, a student at Univeristy of Texas at Austin. The series is hosted by Haley Butler and Tinu Thomas who both attended the same university where the murder happened a decade earlier. They kept hearing about the infamous Orange Tree apartment complex from friends and the murder being in the news, which ultimately led the two to produce this show.

The format of the series consist of multiple interviews, retellings of news clips, court transcripts, and questioning to tell the story. Each episode does a great job at keeping you wanting to listen to the next episode based on a big reveal in the last few minutes of each episode.

Brainwashed

Revisionist History and Hardcore History

I’m no history enthusiast, but from listening to the Genghis Kahn series from the Hardcore History podcast helped change my view that history can be intriguing if told the right way. The same goes for a few episodes from Revisionist History’s telling of Curtis LeMay who was a prominent American Air Force General during World War II. I still have a vast amount of episodes to listen to from these two podcasts, but they will likely keep my interest for many hours.

That’s all for now

In the end, I wish there were more hours in the day to listen to more podcasts. Thankfully when I need a break from one, there’s another great podcast to start or pick back up.