more info ⬇


SW engineering, engineering management and the business of software

subscribe for more
stuff like this:

2020 01 01

2019 Year in Review

Inspired by:



Programming Languages


Popular Content by me:

Content I’m proud of:



Best Blog posts read

Best Books Read

Overall number of books read went way up in 2019: Over 120 if my math is correct across paper, kindle, iBooks. Most were light fiction (bedtime reading).

The best non-fiction I read:

Favorite Media:

My overall media consumption in 2019 went down I think. Nothing felt really satisfying to me like Infinity War did in 2018.



Todo in 2020

2020 01 09

What to do to become an Engineering Manager before you are an Engineering Manager

A lot of engineers want to be managers. I don’t think that eng management is right for everyone, but if you at least want the chance, here are somethings you can be doing to help you get that manager opporunity: (In no particular order)

It’s a harder transition that you think. Don’t lose faith in yourself. Take feedback well (even poorly delivered feedback). Ask for feedback proactively. Honestly assess yourself. Do what you can to increase your own self-awareness.

The realities of the workplace mean that the quality of your current manager has a lot to do with how fast you become a manager. You may be left the with unfortunately options of having to change your environment in order to achieve your goals.

In a nutshell: Be excellent at work and make you and everything around you better.

This post based of a series of tweets you can read here. You should follow me on twitter for more of my thoughts on engineering, management and hiring.

2020 01 14

My Nine Years of Go

I learned about the Go programming language when it was announced back in November 2009. It probably happend when it popped up on HN. There was a lot to like about it, even way back then. I’ve always had a list of things that I’d want in my hypothetical perfect programming languages and go ticked off more of them than any other language at the time. Spoiler alert: It still does.

I really sat down to learn the language in early/mid 2011. The language itself didn’t hit 1.0 until early 2012. I can’t find the original repo, but some of that code still powers this blog today.

A lot of the original design holds up well. Goroutines, fast compilation, static typing, interfaces, gofmt, defer, small core, broad standard library that included a webstack in particular. Some of the original quirks (no warnings, capitalization for public/private, disallow unused imports/vars, etc.) took no time at all to get over despite the internet opinions of the time. In fact, most of those look like great decisions in hindsight. As an app developer, I haven’t needed generics much. I love the error handling philosophy and wrote my own error wrapper. It’s part of why go codebases end up reliable.

Not only that but Go has been improving itself over time. It’s ecosystem and early killer apps will keep it around and popular for a long time going forward. I can like a language, but that doesn’t mean that language will gain any reasonable popularity. And popularity is important. You need a critical mass of users to have a reasonable ecosystem.

Go itself has influenced my options on things like GC. Back in 2009, I was a big fan of ObjC/Swift’s ARC and Rust-style lifetime management (even though Rust wasn’t around back then). These days, I prefer that something else thinks about memory management for me. The performance ramifications of GC are no longer relevant.

Go is one of my secret weapons. It still allows me to get from idea to production faster than anything else out there. The positive words I wrote about Go in 2013 still hold up.

The first blog post†† on this particular blog briefly touched on the nascent, early, promising language back in 2011 included these lines:

[Go] is a tremendous productivity multiplier. I wish my competitors to use other lesser means of craft.


That is still something I wish.


I need to update it for the go.mod era, but it still works great.

†† If you read that post, you’ll find the writing style… different. I’m both proud and ashamed of younger me.

2020 02 13

Questions to ask about Growth Opportunities while you interview

I was asked a good question this morning about evaluating growth opportunities in roles you are applying for. The easiest thing is to ask a few pertinent questions to all prospective hiring teams. In particular:

Who will be your manager? How many people have they promoted recently? How have people grown in the past year? This will help you understand a companies track record of growth. Hopefully you see both promotions and people’s roles evolving and developing over time.

How often does management turn over? Frankly speaking, a lot of your growth opportunity is you but a big chunk is how good your manager is at providing opportunities for you. If your manager shifts every 6 months (quitting, moving on, promoted up or sideways, terminated, etc.) it’s a big problem. Similarly if everyone doing the particular role keeps quitting, figure out why. That’s a fairly loud warning sign.

How many people in your function? Will you be the first person doing the role? 5th? 10th? 50th? The lower this number, the more responsibility you will have and the more diverse set of problems you can assume will come your way. This is generally a good thing for career growth as you get more exposure and experience in a short amount of itme. If you are the 50th person doing the role, you are likely to be isolated to a small niche responsibility for a while.

How fast is the company overall growing, both in people headcount and business (revenue or users)? How many more people for this role do you plan to hire over the next year or two? This represents the surface area growth opportunity. Being the first X in a 30 person company that gets to 150 headcount in 18 months represents tremendous career opportunity. converserly, If you are the 5th X and the company headcount is stagnent, you have a long wait for management opporuntities.

Unless you are close to retirement, growth should be one of your top priorities in your job search. Many companies do this poorly. Your best bet is smaller startups if you can tolerate the chaos and anarchy lack of structure. If you are the first or second person in a role in a startup, you tend to be asked to wear a lot hats and structurally, startups are essentially designed for and even defined by growth.

Thanks to Joyce Park for the tip on management turnover.

2020 04 02

Vue.js, vue-router's history mode and Caddy2

I’ve spent the bulk of March’s shelter-in-place order learning Vue.js (v2) and Tailwind.

I quickly came upon and greatly prefer vue-router’s history mode.

Brief summary, this allows urls in a Vue-base SPA (single page app) that look like:

instead of:

That initial hash tag in the path always felt un-web-like to me.

The downside of this is that you only have one index.html at the root (/) directory. If a user navigates from / to /login/, no big deal cause the router is doing it’s thing. If a user types in directly, a standard config webserver will try to fetch /login/index.html instead and throw up a 404.

As documented in the docs, there is a workaround:Rewrite directives. The docs list rewrite examples for a handful of webservers, including Caddy v1. Caddy 2, currently in late beta doesn’t have an example.

In an attempt to help the internet out, here’s a working Caddy2 Caddyfile example to get history mode to work:

localhost {
    try_files {path} /index.html

A real production Caddyfile will have other stuff in it of course: {
    root public_html
    encode zstd gzip
    try_files {path} /index.html

I’ve been very happy with Caddy. It’s first class support of https is amazing and it’s performance has only gotten better over time. I’ve been using it for all new projects and highly recommend it.

I’ve got lots of other thoughts (primarily positive) on Vue.js, Tailwind CSS and FE development in general, but I’m saving that for a future post.

the fine print:
aboutarchive@amattnconsulting or speaking inquiries
© matt nunogawa 2010 - 2020 / all rights reserved
back ⬆