Solo software
How I work
Career
Essays
Books
Side projects
Ka Wai Cheung
Essays on all sorts of things.
Lately, I've been writing about
building software
,
fatherhood
, sports memories, and other non-coding related topics on
Medium
.
On building software
What is code readability, really?
Aug 2024
The one-person product: Throwing the AI train in reverse
Jul 2024
Old school workarounds: Keeping the screen up to date
May 2024
Championing the doer
Apr 2024
We shouldn't be surprised that code gets that way
Apr 2024
My 25-year career in web design (through the Wayback Machine)
Apr 2024
Professionals are often just sliver experts
Mar 2024
It's OK to want to work alone
Mar 2024
Most bugs live in the permutations
Mar 2024
Why I can't bill time
Mar 2024
Avoiding fancy abstractions
Jan 2024
Old school workarounds: The interstitial state
Jan 2024
Encapsulation is a messy art
Jan 2024
Beware the blind faith of tests
Jan 2024
Why it's hard to write about code
Dec 2023
It's the end...and I feel fine
Dec 2023
The nth impression
Dec 2023
Starting design with space
Dec 2023
Code as the design medium
Dec 2023
The small pleasure of info tables
Dec 2023
Using CSS classes as markers
Dec 2023
The thing to think about with feature gating
Dec 2023
Why cache invalidation is actually hard
Dec 2023
Build software like a musician
Dec 2023
Software writing to just writing
Dec 2023
In 2017, I wrote a series on the making of DoneDone—some flashbacks to how we started and pivotal moments during the early years of the product.
Customer #000001
Hindsight is…please don't make me look
How an early feature was born
Project BugSpray
The glam of maintaining
The ridiculous thing we do every day
One vote of influence
Emailin' ain't easy
Love hurts
Processlessness
George Washington's axe
Six o' clock in the morning, you're the last to hear the warning
The Big Migration
Older writing on business, work, teaching, coding, design, and testing.
What’s your weekly work pyramid?
Jun 2017
Being brief
Apr 2017
Finding big passions in small things
Apr 2017
Sometimes, it's life-work balance
Apr 2017
Where the software ends
Apr 2017
Shining the spotlight on stage crew software
Mar 2017
When I first learned about the impact of design
Mar 2017
A maker's approach to managing projects
Mar 2017
The life changing magic of tidying up your codebase
Mar 2017
How about a refactorthon?
Nov 2016
What's the greatest piece of advice you've ever received?
Nov 2016
Why sports matter to some of us
Nov 2016
Camraderie and recognition inside the development team
Oct 2016
Finding comfort in the uncomfortable
Sep 2016
Building and maintaining a global search catalog using Lucene
Sep 2016
Make good decisions
Sep 2016
There are rockstars and there are bands
Aug 2016
Remembering the rabbits: A fond farewell to Flash
Aug 2016
The mythical couch-lift
May 2016
The unintended byproducts of refactoring code
May 2016
Finding those “clear glue” moments
May 2016
Sometimes archaic technology is the most effective kind
May 2016
How the evolution of baseball stadiums might inform the future of web design
Mar 2016
Why I (still) write code
Mar 2016
Hiring into boundaries
Jan 2016
The psychological battle of big refactorings
Sep 2015
Why it is hard to write about code
Sep 2015
An homage to strict coding
Aug 2015
A primer on delivering a good presentation
Jul 2015
The personal lessons I've learned in business
Jun 2015
The overlooked benefits of making yourself busy
Jun 2015
Building the optimal users database model
May 2015
Do what you love, but know what love is
Apr 2015
Where automated testing should (and shouldn't) fit in your strategy
Apr 2015
Programmers should be a part of the design process
Feb 2015
Give away the punchline
Jan 2015
Cut the problem in half
Nov 2014
The hard thing about testing
Oct 2014
The face on the other side
Jul 2014
A remote-first approach to the workplace
Jun 2014
Programming's three life lessons
Jul 2014
The least you can do
May 2014
Want fewer bugs? Test these five cases
Apr 2014
The redesign, the wait, and the response
Mar 2014
Quiet please: The benefits of online chat
Mar 2014
A fast code culture
Feb 2014
Thinking through your problem
Aug 2013
The by-products are everywhere
Apr 2013
Humility is at the heart of every problem solver
Mar 2013
There will never be a programmer in the White House
Feb 2013
The golden rule on creating rules
Feb 2013
Create your own sense of urgency
Jan 2013
Keep working on the easy stuff
Jan 2013
Write code to read it, not bow to it
Jan 2013
Reaching programmer's nirvana
Jan 2013
Teach abstraction through concreteness
Aug 2012
Legacy code is good for your company culture
Aug 2012
Who is the new business programmer?
Apr 2012
Thank goodness I usually don't have a strong opinion
May 2011
Why you should (and shouldn’t) track time
Mar 2011
The importance of familiarity within a team
Feb 2011
Time your details
Dec 2010
The benefits of the imperfect art of handwriting
Oct 2010
Selling the process with the product
Mar 2010
Recalibrating your senses
Mar 2010
Being your own boss is about being your own employee
Jan 2010
Treat time as an ingredient
Feb 2010
Simple sells depending on who you’re selling it to
Oct 2009
Fixing software problems after the fact
Sep 2009
Building an ISV on top of a client business
Aug 2009
.NET MVC/LINQ/jQuery let you care about the details later
Aug 2009
Breaking old habits: Delete your crusty old code
Mar 2009
Use what you design
Mar 2009
Make less interface when you can
Feb 2009
The fallacy of first impressions
Jan 2009
Quality starts and a save: Starter-reliever development
Nov 2008
Make your product better in 2 ways every day
Aug 2007
Abstracting your writing is as important as abstracting your code
Oct 2006