Disclaimer: Opinions expressed on this blog are solely my own and do not express the views or opinions of my employer(s), past or present.


Hi there! My name is Pang Yan Han (call me Yan Han).

Professionally, I am a Software Engineer with a keen eye on infrastructure and a mindset towards engineering with operations and security as first class concerns.

My technical interests

Haskell: I am actively learning Haskell (again) and taking a different (and much more active) approach. It has sometimes been overwhelming, yet mind blowing and rewarding at the same time. Expect to see more Haskell oriented posts on this blog. I will be looking to implement a non-trivial project using Haskell some time later this year. Nov 2017: I have been working on a Haskell project in my free time and massively refactoring the code. Nothing big but it has accelerated my learning tremendously. More details to come soon.

Systems, security, operations: Even though I am primarily a software engineer, I probably have much more experience than most engineers in system administration and operations, especially after my stint at Grab’s SysOps team, where I learnt a lot from very experienced teammates on how to run production systems and saw a very different side of things in an Internet company. Ever since I moved on from Grab, I am finding in myself a growing interest in systems, security and operations.

Why create this blog?

To share knowledge that I believe others will find useful. This is my way of contributing back to the world and making it a slightly better place (I hope!).

To hone my writing skills. Some day I wish to write a book and this is a precursor to that. If you are / were a colleague of mine and wondered how I manage to write detailed documentation, this is my secret sauce =)

My beliefs as a Software Engineer

Any codebase should come with some documentation, at least documentation that describes what it does and gets it up and running. This is a lifesaver. I frequently find myself thanking me in the past for writing docs. And also sigh at the many codebases I see going for years without a simple and meaningful README.

Pushing for automation whenever I find myself doing something repeatedly - because this is a strong sign that a computer can do it for me - and with less likelihood of making an error. It is also why I maintain repositories such as provision-ubuntu, bin-src and dotfiles.

Static typing is mostly a good thing. A large codebase written in a dynamically typed language is going to be harder to maintain and requires a lot more tests to ensure runtime safety. You will also eventually have to write a crappy type checker. Why throw away decades of research into type systems and compilers?

Monitoring and logging are absolutely critical. If you disagree, wait till you find out that the CEO was the first one to find out that the systems were down (I’m assuming you are not the CEO). Don’t let that happen to you.

In general, it is not that great an idea to reinvent the wheel. Don’t underestimate the difficulty of the domain in question.

Tests also require maintenance. A lesson taught by one of my mentors at my final internship, which rang true over time. If you don’t believe it, just write an excessive amount of tests and see what happens when you do a major refactor to your code - you’ll probably have to update all the tests, too.

I am strongly for open source software. Having studied a few of them, I can attest that I have learnt a lot from reading code written by people who are way better than myself. It is not an exaggeration to say that the world will be very different without Linux, vim, Apache, Perl, etc and everything else that came from them.