Backend Software Engineer#

👋 I’m Cedric Chee. I’ve been a software engineer, AI engineer, writer, and entrepreneur.

I code and write about it sometimes. I create system softwares and apps in Go/JS.

I do product engineering and web development at startups/consulting. I enjoy backend development.

At night, I tinker with systems programming in Rust.

Read more on the about page →

Recent Posts

Why Ubuntu

Six reasons why developers choose Ubuntu Desktop#

Finally, I have some downtime to sit down and think about this topic. Before I get to the key reasons, I’ll start with a little story of mine.

I’m a long time Ubuntu user for both desktop and server. Before Ubuntu, my first Linux OS is Debian. That was during my college time (2000) and during some courses related to programming and OS. I dabbled with Linux kernel not long after.

This journey opened up and introduced me to other Linux distros like Red Hat and Gentoo. Along this journey, I distro hop a lot that I lost count now. But that didn’t stop until around 2010, when I fully migrated to new laptop and installed Ubuntu Desktop.

Back then, the timing was perfect — the combo of hardware support from mainline linux kernel is almost perfect and software support from Ubuntu Desktop is usable. So, over the course of several months, I also migrated my homelab and staging environment servers to use Ubuntu Server. Since then, I only use Ubuntu Server in a small number of production workloads. Now, Ubuntu is default choice for new deployments.

When I just started learning Ubuntu, I have a clear strategy for the next 3 to 5 years and that is, I need an OS that is geared for productivity — supports efficient workflow from development to production. From the whitepaper, this strategy is aligned to “Consistent OS experience across platforms”.

Without further ado, below is the highlights from the whitepaper.

First choice for artificial intelligence and machine learning#

  • GPUs have changed the face of AI, and NVIDIA is investing in CUDA on Linux to unleash the power of their latest graphics cards for general computing.
  • Canonical has also worked with Google to develop Kubeflow, a solution for rapidly building composable, portable, and scalable machine learning stacks.

Consistent OS experience across platforms#

  • Arguably, the greatest advantage of developing on Ubuntu is that it enables users to work with the exact same underlying operating system on their desktops as they do on their servers, in the cloud, and on IoT devices.
  • This consistent Ubuntu experience makes it easy to test locally before deploying globally – providing developers with a smooth path from development to production, with the same software running on both their desktop and target production environment.

Streamlined distribution through snaps#

  • For developers targeting Linux, snaps offer an ideal way to package and distribute applications. Snaps are containerised applications that work on desktops, cloud, and IoT devices.
  • They are simple to create and install, safe to run, and update automatically. And because snaps are packaged with all their dependencies, they work on all major Linux systems without modification.

Hardware and software freedom#

  • The level of hardware and software support is essential for a smooth development process. Without it, developers risk having to spend an inordinate amount of time fixing compatibility issues before they can even make progress on their applications.
  • Ubuntu’s flexibility will help to reduce friction and accelerate development, eliminating issues that might otherwise arise when selecting components and solutions.

Extensive support – from Canonical and the Ubuntu community#

  • It doesn’t matter how compelling an operating system’s other features are if developers cannot rely on it to be stable, secure, and continuously updated. That is why Ubuntu LTS (Long Term Support) releases benefit from five years of support from Canonical – with critical bug fixes, security updates, and hardware enablement – at no cost.
  • Ubuntu users can even apply critical kernel security fixes without rebooting their systems thanks to the Canonical Livepatch Service, helping to minimise downtime while maintaining compliance and security.
  • And for those seeking to add value to their Ubuntu deployments and achieve a greater level of support and peace of mind, there is the option of Ubuntu Advantage – the commercial support package from Canonical.

Certified hardware#

  • Customers can be confident that their PCs will work flawlessly with Ubuntu right out of the box, with no need to spend time on installation.

I am Linux distro agnostic though. Choices are good. I’ll pick the distro that fit our requirements. So, it’s not a zero sum competition. Improve or you get left behind :D

Technical Writing

Making the world a clearer place.

Awesome collection of learning resources, articles, tools, and more for technical writing and documentation project.

Courses and learning resources#

Articles, Blog Posts, Tips#

There is a secret that needs to be understood in order to write good software documentation: there isn’t one thing called documentation, there are four. ~ Daniele Procida



Learn in public#

What is Software Engineering?

Have you ever ponder what is software engineering after all? I did at the start of a new year.

Software engineering from my viewpoint is about:

We see great engineering as the reduction of complex things into simple things. These initial complexities might include code, abstractions, systems, architecture or infrastructure. We believe this approach, searching for simplicity in complex things, lies at the heart of problem solving.

Go Programming Resources

Some online resources that I found and are particularly useful in my journey re-learning Go programming since the mid of last year (2019), after the last time I touched Go programming in 2015. I hope you find this useful as well. It goes without saying. YMMV.



Best Practices#

Secret to Write Good Software Documentation

Why is the documentation structured this way?

However hard you work on documentation, it won’t work for your software — unless you do it the right way.

There is a secret that needs to be understood in order to write good software documentation: there isn’t one thing called documentation, there are four.

They are: tutorials, how-to guides, explanation and technical reference.

Source: What nobody tells you about documentation

Accidental Complexity in Software Engineering

No Silver Bullet—Essence and Accident in Software Engineering — Fred Brooks

In the 1986 paper called “No Silver Bullet”, Fred Brooks observed the productivity of programmers.

Brooks argued that in software development, there were two artificial barriers: accidental complexity and essential complexity.

Accidental complexity is difficulties that software engineers introduce into the design unintentionally.

Essential complexity is the area of complexity that can’t be whittled down. Bottom line, essential complexity is unavoidable.

Let’s see how this complexity argument manifests for things I did at work.

The growing complexity of modern software systems#

Lately, I have been dealing with the challenges of managing complexity in “modern” software engineering.

It’s almost the end of 2019. Looking back, in retrospective as a software engineer, I see the software we created is extremely complex to build and maintain. Example, many websites or web apps are bloated (2 MB just to load a static website?), deployment used to be simple. I wonder how we ended up in this state.

Out of curiosity, I launched myself into research mode and the following is what I’ve learned.

Note that this is a non-exhaustive observation. I’m aware this is missing a lot of things, because I just want to put it down in writing.

Complexity of Web Front-end#

In a nutshell, UI is difficult to build. But, we’re getting better :-)

  1. Rich Harris’s on “Rethinking Reactivity, the history and future of reactive programming”
  • He delivered the presentation at “You Gotta Love Frontend” - Code Camp 2019 [slide deck]
  • A refreshing approach to solve this problem space:
    • Reaching out to the “forgoten” power of compiler and language (yeah, wisdoms back in the good ol’ days and lessons from computer science).
  • Rich created Svelte, a UI framework that compiles your UI components into optimal JavaScript at build time, instead of doing what most frameworks do which is lots of unnecessary work at run time.
  1. Pete Hunt’s React talk about “The Secrets of React’s Virtual DOM” at FutureJS 2014 conference
  • Some inspiring quotes:
    • “The art of programming is the art of organizing complexity, of mastering multitude and avoiding its bastard chaos as effectively as possible.” — Edsger Dijkstra
    • “All non-trivial abstractions, to some degree, are leaky.” — Joel Spolsky
    • “Simplicity is prerequisite for reliability.” — Edsger Dijkstra
    • “What matters for simplicity is that there’s no interleaving.” - Rich Hickey on definition of simplicity
    • Simple is not equal to familiar
    • “Intellectuals solve problems. Geniuses prevent them.” — Albert Einstein, never used data binding <- :lol:
    • “We can create precisely the same programs we’re creating right now with drastically simpler tools” — Rich Hickey
    • “Programmers know the value of everything and the cost of nothing.” — Alan Perlis
    • “Simplicity is the ultimate sophistication.” — Leonardo da Vinci
  • In computer science, the expressive power of a language is the breadth of ideas that can be represented and communicated in that language. The more expressive a language is, the greater the variety and quality of ideas it can be used to represent.
  • Practical expressivity is a measure of ideas expressible concisely and readily in a language.
  • “Don’t trade simplicity for familiarity”.

Complexity of Web Back-end#

  • “Backends are needlessly complicated.” - Dark
    • According to their founders, “Dark is a holistic programming language, editor, and infrastructure for building backends without accidental complexity.”
    • My opinion: the idea is good but their execution (and implementation) is not, AFAICT (still waiting for my Beta access). Their idea was inspired by Bret Victor’s work. I get to know about Bret’s work when I discovered Light Table in 2013. My mind was blown away by it, but sadly, it doesn’t take-off.
  • Decisions fatigue
    • Minimalistic library vs. batteries-included framework
    • Convention over configuration
    • Example: should we stick to Ruby on Rails/Django or use Express Node.js for building REST-ful API server?
  • Configurations “hell” - solved by zero-config tools (i.e. CRA CLI)
  • I hear about a new next generation database every other day (funnily, this used to happen a lot in front-end)

Before you go, let’s take a moment to reflect with these quotes:

“If there’s one rule in programming it’s this: there will always be trade-offs.”

“A balancing act”.

My Journey to Learning Go Programming

A place to keep some of my Go programming flashback.


  • Nov 2009: I tweeted about Google releasing their own programming language, Go. ( while I was learning Ruby on Rails :D )

  • May 2013: I learned about some Golang early successes in production and tweeted it.

  • Oct 2014: I attended the GoSG meetup for the first time and tweeted about it.

  • My first serious (and fun) foray into Go programming dated back to Sept 2015. I remember I was using version 1.5.1 for some weekend hacks (hobby projects).


Non-fiction Books to Read

These non-fiction books are on my reading list for a very long time.

Before, I don’t read books that much. But when I do, I want to read books that are worth reading.

Software Development#

Programming Language#

Deep Learning#

Deep Learning for Coders with fastai and PyTorch: AI Applications Without a PhD.

to be continued…

Singapore A.I. Day 2019

A new super(hu)man powers born!

I haz a new superman powers, TensorFlow. Lit!

TensorFlow tee

At Singapore second A.I. Day 2019

A.I. Day tee (back)

TF ‘celebrity’, @DynamicWebPaige kicks off AI Day with style (those Keras unicorn) at Google Singapore. It’s full house!

Kicks off AI Day

Oh, luckily it’s Saturday. The audience is ready for more BERTology. Dr Martin Andrews talked about XLNet.


Who else had lotsa fun?

My notes for Google I/O 2019 Developer Keynote Day 2

  • Kotlin is the focus for Android development from now.
  • Android Jetpack
    • CameraX
  • Android Studio
    • Fixed over 400+ bugs
    • Instant Run is great but not reliable. They rebuilt the foundation of Instant Run.
    • 3.5 Beta launches today
    • New in AS 3.5
      • Memory usage
      • CPU performanc
      • Build speed
      • UI responsiveness
      • Apply changes
      • Project upgrades
      • Gradle sync
      • Deployment flow
  • Google Assistant
    • Content Creators
      • HowTo Template
    • App developers
      • App Actions (
        • Health & fitness
        • Finance
        • Ridesharing
        • Food ordering
      • Interactive Canvas (
        • Games
  • Open web
    • Latest improvements to Chrome and their developer tools:
      • Faster experiences
      • Powerful capabilities
      • User trust and safety
    • Chrome 74 startup time - web page loads almost half the time.
      • This speed ups are partly due to V8 - 2X faster JS parsing, 20% less memory usage
    • Image lazy loading
      <img src="io2019ftw.png" alt="Google I/O 2019" loading="lazy" />
    • Lighthouse
      • Tool to audit websites
      • Performance budgets
    • PWA
    • User trust and safety
      • Private and secure cookies by default
      • Easy to use privacy controls
      • Anti-fingerprinting protection
    • Keep track the latest features and best practices of the web
      • New website called to help.
    • Chrome OS
      • Linux for Chromebooks.
      • Android Studio is now available with one-click install.
      • All Chromebooks launch this year will be Linux-ready right out of the box.
  • Machine Learning
    • Google AI
      • Out of the box - ML Kit
      • Performance - Google Cloud
      • Flexibility - TensorFlow
      • ML Kit
        • Vision
          • Landmark detection
          • Image labeling
          • Barcode scanning
          • Face detection
        • Natural Language
          • Language identification
          • Smart Reply
        • Custom
          • Model Serving
        • New features
          • On-device translation.
          • Object detection and tracking API.
            • Pair with Google Cloud Product Search API.
          • You can get started using these new APIs today through Firebase (
      • Google Cloud (
        • For developer who needs more performance for large ML workloads, Google Cloud provides a complete set of AI tools and this includes Cloud AutoML.
        • Cloud AutoML Tables
        • Cloud AutoML Video Intelligence
        • Cloud TPU Pods beta
      • TensorFlow
        • TensorFlow 2.0 alpha (all about usability)
          • More intuitive APIs
          • Less code
          • Portability
        • TensorFlow.JS
          • Build, train and deploy custom models right in the browser and on the Node.js platform.
          • Build custom models
          • Train new models or retrain existing models
          • Deploy with JavaScript
        • TensorFlow Lite
          • For developers working with on-device platform such as mobile devices and IoT
          • Demo of “Dance Like”, an app by Google. All on device, simultaneously in real-time. The 5 on-device tasks running at the same time:
            • Running two body-part segmentation models
            • Matching the segmentation models
            • Running dynamic time warping
            • Playing a video
            • Encoding a video
          • It’s that cool!?
  • Firebase
    • Build your app with fully managed backend:
      • Build better apps
      • Improve app quality
      • Engage your users
    • Firebase + ML Kit make it easy for you to bring ML to your app regardless of expertise
      • Today we are expanding ML Kit with AutoML Vision Edge
        • Demo
    • Firebase Performance Monitoring for Android, iOS and the web.
  • Flutter for web technical preview available today
  • 10 years of Google Developer community