Getting into Software Part 1: Why would you want to get into Software Programming?

In an age where Software is gradually taking over everything starting from your computer and spreading to your fridge or your car it might seem late to get into software, but it is not. Companies are going to need more and more software developers and engineers to write the code needed to run everything. What are some good reasons to work in software?

Hours

An excellent reason to get into software is because of the hours. The expected hours vary greatly between software companies. You could work for a small boutique firm that is constantly pushing 80 hour weeks or for a megacorp where you work for 10 of the 40 hours you are in the office each week. It really depends on what you want and how good you are at interviewing. You might find that mid-sized companies are a good fit for you or that you prefer aggressively growing startups. The important things to consider are how many hours are you working and what are you trading in return for those hours. For example you might be working double the hours for double the salary, thats great if you are prioritizing money, but your hourly pay might be same as someone making half your salary.

Working Conditions

The working conditions in software engineering are usually good. We work indoors at desks and the heaviest thing you are likely to lift is a 3 lb macbook. In my workplace every desk is a standing desk and I try to take advantage of standing a little each day. Constantly leaning forward is the biggest issue I face with occasional hand issues taking second place.

Programming can be enjoyable

Some people enjoy programming, it can be a cerebral experience. There is little chance to it, just man against machine in a cathedral to the inner working of men’s minds.

Good compensation

Salaries in the Software engineering field may fall into a binomial distribution, but the lower end is still high compared to other fields that require a bachelor’s degree or less.

What are your top reasons to get into Software Engineering?

Remote Work Revisited

About a week ago on a particularly cold morning with fresh snow and ice on the streets, I decided to try working from home again. While I don’t hesitate to bike or walk to work in 20 or 30 degree weather, 3 degrees is too cold.

After making the decision I opened slack and typed “WFH” into our office channel. Then about 30min later, after getting coffee, I hopped back online to address my first intern request for clarity. I played some music and connected my external monitor to my laptop while debugging some docker networking issues. For some reason, nearly all of my issues with docker involve the network.

For lunch I walked over to Safeway and picked up some sandwich materials. Then I took a quick nap. At work despite having an hour for lunch, I don’t have any where to nap even if I have time.

Then it was back to debugging docker and answering questions from the team. Overall, this working from home experience was much better than last time when I stayed at home due to the cold. This time was more peaceful and I did not miss the office.

Getting a website up in 2017

I launched two websites in 2017, yourfoods.info and sledgianowski.com. This post goes over how I did it, what went well and where the weak points were.

### Hosting:
Google Cloud Platform’s GCE is the hosting provider I chose. I think GCP has the best user interface of the public clouds and its no effort persistent use discounts make things simple for me. The cloud shell google offers is excellent and lets you ignore the SSH keys you would have to keep track of for AWS.

I will probably keep using GCP for my projects next year. Although, I am interested in testing packet.net’s bare metal hosting.

### Setup
My websites are a ghost blog https://ghost.org and a Django+Postgres web application. My blog uses nginx for the frontend and SSL encryption with ghost’s nodejs implementation as the backend.

Yourfoods.info uses a nginx frontend for ssl and gunicorn for serving the django webservice.

Let’s Encrypt is a big win for my websites. The integration between nginx and certbot, https://certbot.eff.org, is excellent making it easy to setup SSL in minutes. The main issue I have had with it is when my DNS was not pointing at my public IP in google cloud.

### Domain names
I use Namecheap for my domains and DNS provider. The pricing is decent and their DNS configuration support handles my use case well. Namecheap has two factor authentication, but its SMS based and somewhat wonky to use.

### Analytics
I am still using Google Analytics for user tracking. Its free, provides a first class UI and is very easy to setup. I gave a few free and private options a cursory glance, but they did not look like things I could setup in an hour.

### Conclusion
Its pretty easy to setup a website these days. Let’s Encrypt and Nginx integration make SSL quick and easy to get going. And the public cloud is great for small websites that do not use a lot of resources.

Team Skill Shaping

When running a team you need to balance bus factor and performance.

On an average software team of perhaps 10 people, you will naturally have people develop expertise in a particular part of the codebase. One developer will be an expert in the frontend, another in the SQL queries, the next in the controllers, etc. What you want to avoid is a bus factor of 1. Some teams try to keep every developer knowledgeable in every area of the system, this is a waste. If you have to work on every part of the system you will not be able to master any single part. To get a bus factor of n by rotating developers through different parts of the system you give up the efficiency from letting a developer master a subsystem. My solution is that you should focus on getting a bus factor of 2 for each major subsystem. Have people focus on the two subsystems that they are interested in or are available and leave things there. Just try to avoid having two developers working on the same two subsystems. You are unlikely to have two developers get hit by the ‘bus’ at the same time.

Aim for a bus factor of 2 while trying to avoid a lot of overlap on subsystems, then leave things there.

Changing KPIs — A tale of moving from individual contributor to team lead.

Changing KPIs — Moving from individual contributor to team lead.

The biggest change after my move to team lead is that my KPIs (key performance indicators) have changed significantly. I still troubleshoot bugs, create architecture, discuss and persuade teammates of architectures. I get to write some code here and there. But the work that I am evaluated on has changed significantly. Instead of being evaluated on my ability to get coding done, to resolve bugs and be a good team member, I am evaluated based on the team’s performance. Was I able to keep everyone on the team from being blocked this sprint? Was I able to keep people on the team coordinated such that they didn’t duplicate code or write incompatible interfaces? Do we have the architecture and stories hashed out far ahead enough to keep working towards the release?

Its been kind of a shock to me because I will be giving my update in standup, trying to remember what I did yesterday and its something along the lines of “I sat in on a couple meetings, reviewed PRs and helped classify several bugs.” I worked all day and am exhausted now, but I didn’t commit any code or make any progress on the story I assigned to myself. It feels like I’m not getting anything done, what happened, I used to be good at my job.

But despite feeling like nothing is getting done, I am still hitting my KPIs as a team lead. My bosses are happy, the team seems happy enough with my work, the scrum master has what he needs, etc. Its not that I am not getting any work done, its that my ‘work’ has changed to something different. I am focused more on coordinating the team’s effort and planning what we need to do next, keeping abreast of the features coming down the roadmap, keeping track of technical debt and the maintenance work we need to do.