Picture of Michael Lee
:wave: Hey hey, I'm @michaelsoolee! I'm a full-stack developer, maker of one too many side projects and dad.


Written on January 6, 2020

Tonight I deactivated my Meetup account. I wasn’t the most active Meetup user. I did use it a few times to meet up with developers in Germany which was pleasant. But overall it wasn’t something I actively used and all it was doing was filling up my inbox.

So tonight, I deactivated my account. It isn’t the first time I’ve deactivated my account on some platform and I don’t think it’ll be the last. It’s funny how in the past decade it was about freely giving out emails to try or gain access to things. But now, I feel the need to reduce and be selective of where I give my attention.

RSS rediscovered

Written on January 2, 2020

I was never much of a heavy RSS user when Google Reader was around. I had an account, bought Reeder for iOS and occasionally used it but didn’t really appreciate the web standard. I always knew RSS existed and it was something you want to have available if you ran a website. But it never really stuck with me.

Then I discovered podcasts. But the technology to consume podcasts kind of made the fact that it runs off of RSS invisible. The main source of where I consumed and discovered podcasts were through Apple iTunes. You didn’t have to individually subscribe to someone’s RSS feed to get access to their podcast, you went to the iTunes store and you searched for their show and then subscribed.

Even now, I use Overcast and have never manually added a podcast show. The option to manually add shows is definitely there, but I can usually find shows using their search feature.

Over the last few years I’ve been using Twitter to be my main source of how I kept up with news in my industry, industries I was interested and current affairs. But be it a side-affect of getting older or friends who have become quieter on the social media platform, I’ve been drawn to following folks and their personal blogs lately.

I don’t think I’m alone in this shift. This past year, NetNewsWire, a macOS RSS reader—and my RSS reader of choice—released version 5.0. Since downloading the beta, I’ve started to read more RSS feeds and I admit, I’ve been enjoying it a lot.

I’m still curating which blogs to follow. But it’s been nice to read things in longer form. I also like that the conversation is one-sided. I can read someone’s thoughts and opinions, without the noise of other people’s opinions about that original opinion.

I can also follow and unfollow an RSS feed as I please without worrying about if the author will ever discover that I stopped following them like I sometimes do on Twitter.

I truly hope more folks will embrace their own personal sites and start to share their ideas there. As I think RSS is making a come back and I’m happy to be rediscovering this standard that’s been around for more than two decades.

While I haven’t set myself any goals with this new year. I do want to write more on this site. First for myself as writing is an exercise that I enjoy. Second I enjoy preserving my current thoughts and I don’t think I do it enough. And finally, if you’re reading this as a subscriber to my RSS, you’re a reason I want to write more. I want to provide something of worth to be subscribed to and taking the time to read.

Git cheat sheets

Written on December 9, 2019

Git is a tool that I use almost every day as a developer. It allows me to confidently make changes to my code and not worry about remembering what changes I made and when. On a team it also allows me to work concurrently with other developers and sanely pull our work together into a single code stream without going crazy.

While I’ve used Git for quite some time now, I admit that I often find myself Googling for that one command that I can’t seem to care enough to remember but always find myself needing to use. If you’re familiar with the Google workflow, you might not think it takes up that much time. After all being able to Google well is like a necessity as a developer.

Without giving it much thought your Google workflow might look like this:

  • Open up a browser
  • Click into the URL bar
  • Type in the Git command description into the bar to search
  • Look over the list of results to decipher which of the results looks promising
  • Click on a link to look at search result
  • Read content of page
  • If unsatisfied, click the back button
  • Search for next viable result
  • Repeat until you find the command you’re looking for
  • Copy command into your clipboard
  • Paste command into your terminal and hit enter to execute

While the entire process might take a few minutes, those minutes could add up over time. Time instead which could be used solving a coding problem.

Frustrated at how much time I was losing on Googling the Git commands, I decided to compile the most commonly used Git commands into a nice, simple and clean Git cheat sheet.

So now my Git workflow looks like this:

  • Double click PDF on desktop
  • Look for header of the type of Git interaction I’m looking to execute
  • Scan list of commands, find the one that I need
  • Copy command into clipboard
  • Paste command into terminal and hit enter to execute

That’s less than half the amount of steps it takes to Google for the same command.

Not only do cheat sheets save you time, they look pretty nice too.

  • Comes in four color variations based off of popular editor syntax themes, Atom’s One light and dark theme, Wes Bos’ Cobolt2 and Sailorhg’s Fairy Floss
  • Uses Fira Mono for commands
  • Copy and pastable from PDF to command line

Git cheat sheets in Atom's One Light and Dark themes

Git cheat sheets in Wes Bos' Cobolt2 and Sailorhg's Fairy Floss themes

The type of commands which are covered in the Git cheat sheets are:

  • Configuration variables
  • Creating repositories
  • File related commands
  • Branch
  • Merge & rebase
  • Logs
  • Clean up
  • Tags
  • Stashes

If you’d like to save time with your Git workflow with these Git cheat sheets, you can buy them here. If you’d like to get a free copy of the One light version of the Git cheat sheet, sign up for my newsletter.

You are a software engineer

Written on October 19, 2019

A friend of mine is currently on the job hunt. He was sharing with me how hard it’s been. I’ve been on the job hunt before as a software engineer and know how hard it could be. It is scary, can be demoralizing and imposter syndrome feels like it is at its peak.

As a way to encourage him, I’ve been thinking about truths that I feel could be said to him to help uplift him. The truths about him as a software engineer.

I wanted to share these truths here for him, for those who might also be in the job hunt and also for me, to serve as encouragement for someone who often battles with imposter syndrome.

You are extremely smart.

You create enormous value.

You can solve hard problems.

You understand complex things.

You are patient.

You deserve what you’re being compensated and more.

You are not a coding monkey.

You make good contributions to your team.

You ask great questions.

You have the ability to do so much good.

You are creative.

You are resourceful.

You know enough.

You aren’t defined by an interview.

You don’t need to understand everything.

Your skills are highly desired.

You’re doing a great job.

You are not an imposter.

You are a software engineer.

After I was done writing this list of truths, it reminded me of the Holstee manifesto. So I fired up Figma and also put together a poster-like version as well.

You are a software engineer poster

Moved site from Netlify to Render

Written on October 18, 2019

This site was built, deployed and hosted on Netlify for almost two years. There’s a lot to like about Netlify, from its easy-to-use interface to the thoughtful features that allows statically generated sites to have dynamic like features like analytics to forms.

But for a few months now there was a part of my publishing process that was causing a little bit of resistance. That was that Netlify doesn’t support the latest versions of Bundler. My site is built using Jekyll. Jekyll being written in Ruby, relies on Bundler to handle package management.

My own machine uses the latest version of Bundler, but Netlify is quite behind. At first, I got around this issue with just manually changing the Bundler version in the Gemfile.lock that is versioned. But that becomes a nuisance because I can’t just “publish” my latest changes.

A few months back I had heard about a new service called Render. I had first heard about it through Lynne Tye of Key Values. Render looks to be creating a sweet set of products for web developers. One of them being, building, deploying and hosting static sites. So last night, I took Render for a spin.

All I had to do was hook up my site’s repo. I made sure the Gemfile.lock file had the latest Bundler version and committed. Render immediately picked up the commit and started working away. I was expecting a build failure warning but to my delight, my site actually was built and deployed to their CDN.

No doubt, Render had won me over. I pointed my DNS over to Render and that was that. My site is now happily hosted on Render. If you’ve got a Jekyll site and have issues deploying on Netlify, definitely give Render a try.

By no means, is this article suggesting I’m not a fan of Netlify anymore. But for building Jekyll sites, Render doesn’t hinder me from publishing.

I’m also looking forward to hosting an application on Render soon with their app hosting and managed PostgreSQL databases.

Ephemeral software

Written on October 17, 2019

I often drive by construction sites and have this feeling of envy. I romanticize about how nice it must be for a construction worker to be able to labor all day and at the end of it be able to stand back and look at the progress he/she has made for the day. How it must make them proud. That what they eventually build, could be seen for years if not decades to come.

As a software developer, I’ve often felt I’ve put much effort into a day’s work. But don’t have the same satisfaction at the end of the day. I mean don’t get me wrong, I enjoy being able to solve problems. But at the end of the day, it’s hard for me to feel progress of something intangible. I mean yes, it’s lines and data that show up on the screen. But without electricity or even the Internet, what I build is so temporal in nature. And I’ve struggled with this dissatisfaction of working hard but often finding it hard to see tangible product.

I recently heard Jared White describe the feeling that I’ve had as a software developer and the work that I produce. In episode 41 of Jared’s podcast (which by the way is a great episode on mental health, give it a listen) he uses the word ephemeral to describe the nature of what we produce as folks who work in the digital realm. I thought the word, ephemeral concisely described how I felt about my work—that it is short-lived or temporary.

This afternoon, while on my usual lunch walk, I was passing by this park I often walk past. In the days past, I had noticed that there were some folks there cutting and doing some work at the park. I had assumed that they were doing repairs or building new benches. But today as I walked past, I took a peak at what they were doing. To my surprise they were making mosaics out of stone and placing it in a path.

I saw one of the guys who was working on the mosaic and gave him a thumbs up as a way to show that I was admiring the work that he was doing. He took off his ear muffs and waved me over. When I walked closer, past the lines of hazard tape, he uncovered a piece of tarp to reveal the latest mosaic. It was an amazing piece of dark gray stone, chiseled to look like a beetle. I was amazed at the meticulous care that he and his coworker had put into the piece.

He shared about how he made the piece and what techniques and materials he used and I could tell I was talking to a master. He then showed me the rough layouts of what he claims will be a butterfly mosaic. He showed me a drawing of a template on a piece of cardboard box and he shared how it’s been keeping him up at night trying to figure out the design and layout. In my mind, I thought to myself, we aren’t so different him and I. As we’re both creatives who make things.

He then made reference to the mosaic just a few feet away. He had shared that that was his work too but it was done several years back. He then pointed out the old mosaic—which was made out of stones and seashells—had flaws that he’s now able to see with the new skills and techniques he’s gained since the project.

I shared a few more compliments then asked if he had a website and walked away. While walking back to the office I thought about the man who had made the dragonfly mosaic. That although he was commissioned once to make this piece, he could see the start and end. What was fascinating to me was that for him, he has a tangible product once he finishes his work. The constraints which determines whether his work is done is either a deadline or the resources for the mosaic is depleted.

The mosaic will be there for a very, very long time. And the cool thing is, it’ll be there until the park either gets replaced, weather wears it away or some act of nature. But the mosaic has its purpose and doesn’t need to be enhanced. It does its thing, which I’m guessing is to provide an elegance to the park and that’s it.

With software it’s quite the opposite and I think that’s the discomfort that I’m feeling about the work at times. Software is so volatile in nature. Operating systems are constantly being updated. A piece of software you put out has to constantly be updated to support the OS it is running on. Or if it’s a web application, something as little as the domain name expiring can cause the software to be rendered useless.

If you’re building software for an employer, if the business is shut down, the server is simply turned off and the software doesn’t exist anymore. All the hard work you’ve put in with you colleagues…gone.

While the work of the stone mason or the construction worker, long after his or her time is done with the work. It will persist. It will most likely exist longer than those who created it. Without the need to be modified or enhanced. Serving the purpose in which it was built for.

I’m still wrestling with this feeling. I think it is something I’ll always battle with for as long as I’m a software developer. I mean don’t get me wrong, I still find it really cool that I could take what’s in my imagination and use the digital tools at my fingertips and create something. It’s just that what is built is so temporary in nature.

Perhaps this just means I need to spend some time outside of the digital realm and create something tangible that could be felt/held and is more “permanent”. Perhaps I’ll get back into making notebooks or furniture with my wife for our house. That might be the remedy for my battles with the ephemerality of my work.

Photo of notebook I made in 2015

Anyways I’d also suggest you check out the stone mason, Brooks Burleson’s work on his website. If you scroll down and click on the section labelled, Mosaic Garden Art, you’ll be able to find the dragonfly mosaic I spoke about earlier.