Hardware failure won’t stop me

TL;DR

Recently I’ve been hit by my laptop failure. I use it mostly for work related programming but it’s my general computer as well. It took me 2 hours to go back to fully functional state with an older but still powerful desktop. It’s not that bad, is it.

Too long

The main idea behind me being able to go on are services that I/my company use. And I don’t mean some fancy backup plans. That would take much more time. I mean services like:

  • GitHub (for your code),
  • a password manager,
  • a synchronized profile in my browser (I still tend to use a separate profile for my work and a separate for private purposes)
  • a browser enabled communicator like Slack
  • a browser enabled video call app like Zoom

The major part of the mentioned 2 hours was spent on installing VS 2015 + Resharper (I have a really terrible WiFi card in my PC). That would be all.

Now, it’s time for you to answer the following question: how fast as an employee and as a private person can you be back after a hardware failure?

Working remotely is great

2016 has brought many changes. One of these is my remote position for Particular Software. This post will cover some of aspects of my working remotely and won’t cover me working for Particular per se.

Transport

I work fully remotely. I don’t need to travel for 40 minutes to 1 hour in one direction just to enter the office. This means that I have up to 2 hours more every workday, which gives me 10 hours per week. Additionally I’m not affected by unusual traffic, any snowfall, etc. Skipping the need of moving to the office actually makes your live much more predictable. And when it’s predictable it’s much easier to plan it.

Schedule

Even if you have 2 hours more you need a schedule. I’ve heard so many stories about remotes getting lazy and finally underperforming in official and private life. As I don’t actually have to move to get to the office, I’ve replaced that time spent in transportation with some positive activities in the morning

  • I drop off our daughter to the kindergarten – it lets me go out for 10 minutes
  • Regular exercises  – it’s again about timing and being predictable. No excuses that there was a traffic jam and I can’t make it today
  • Sometimes watching some SF/horror movie – I’ve done it once so far (it’s 6th week of being remote), and I don’t want to make it a rule

This brings me to 9:15AM, when I usually start.

Office

I have a separate room to work, write blog posts etc. This works like an anchor, I know where I work and where I spend time with my family. Again, I find this strict rule very helpful. Maybe I could go with a more liberated approach, but as the current works perfectly I won’t change it.

Another aspect of having a separate office is that you can actually use term ‘office’ in your home and have some boundaries set. Next advantage is that if any other family member has some work to do, he/she can use that room and still, having a label ‘office’ can help just to work without interruptions.

Lunch break

This point is a bit more related to the company. If your remote company has strict rules about working hours this life-hack might not work that well. Anyway, the point I want to make is that sometimes I use my lunch break to do something else. Like visit a post office or deal with taxes. The majority of people cannot do it in the noon, so one can easily leverage this fact to do it much faster (shorter queues).

Life changer

Working remotely, not to mention working for Particular Software, is a life changer. I think that after a months I won’t be able to go back. On the other hand, why would I even consider going back at all? 🙂

Happy remoting!

TeamCity queries with powershell (for sake of healthy develop)

In the last entry I’ve shown how to create a PowerShell based git hook, passing following parameters to the hook for sake of validating it. The parameters were:

  1. $local_sha – the signature of the local commit
  2. $remote_ref – the remote branch name
  3. $remote_sha – the signature of the remote commit

This is more than enough to finalize our quest and test if the commit that is about to be pushed on develop was previously built in any other branch (in this case, a feature branch). To enable that we need a plan of attack. The check will consists of:

  1. ensuring that $remote_ref name is equal to ‘develop’
  2. querying TeamCity server for the status of $local_sha in any of the feature branches

The first point is a one liner. The second point is a bit more interesting. To do not write the whole integration with TeamCity in PowerShell, we can use TeamCitySharp library, which integration with PS is so well described in here. The easiest way to query for the specific commit build I’ve found so far, is to have a separate build for the features which enables to issue the following query against API (using buildLocator)

http://teamcity:8111/httpAuth/app/rest/builds/?locator=<buildLocator&gt;

This list doesn’t provide all the needed information. So for each build in there, we need to query for more details. Once we got the build details, you can see that they include the SHA1 of the commit being build, which is exactly what we wanted.

This post ends this series of protecting the development branch. I hope it will help you to adjust and improve rules in your environment to decrease the number of failed builds on development and increase overall quality of your solution.