This week, I’ve been testing different text-to-image AI models from Hugging Face on my PC. (You might find some in this post.) It prompted some reflections on the process of software development. With just a few pip installs and lines of Python code, I can generate images for free that online services charge several dollars for. This reminded me of an old XKCD comic. In the comic, there’s a floating stick figure who claims to have learned Python in just one night and can now float in real life by using a single line of Python code.
Don’t get the wrong impression from the joke. There is some dense Python code out there. And some tricky features to the language that you have to work around sometimes. However, because of open-source support, there are a lot of complex tasks Python can handle in one or two lines. Take my Gutenberg download tracking visualizations, for example. With just 200 lines, I am downloading web data, storing in a database, processing tabular data, and creating visualizations. With just three lines, I can upload my visualizations to a cloud-based host. From the host, I embed them on my blog. Those three lines include client-server communications and authentication for the data transfer!
Take another example. My self-hosted WordPress blog. I literally did not write any custom code to launch this website. All the code is copied-and-pasted from open-source documentation. That’s why I didn’t even post a git repo for it.
This reminds me a lesson I learned as a web developer at an enterprise corporation: Software should be about solutions more than code.
UTF-8 Project
Here’s one of the most difficult and rewarding projects I worked on as a web developer. I had to upgrade search features to work with Chinese and Arabic languages. There were several challenges, but the biggest was that Chinese and Arabic characters use UTF-8 encodings.
If you’re curious about the technical definitions and meaning, you can read documentation for UTF-8. But basically, it’s a method to store the complex characters and letters for these scripts in computer binary. The difficulty comes from the fact that a single character in Chinese or Arabic may have several different UTF-8 representations.
The Rubik’s Cube Metaphor
I will explain how this can affect search features with a metaphor. Imagine that you have a Rubik’s cube (which represents an Arabic letter or word, for example). It’s unsolved, so the colors are all mixed-up on every side. You have a lot of fun with the Rubik’s cube. So, you want to go to the toy store to get one for your friend. You show the owner of the toy shop your unsolved cube and say “I’d like another one of these.” Examining your Rubik’s cube, the shop owner says they don’t have any of those. But you can see a whole row of Rubik’s cubes nicely solved in their packages right behind the store owner.
The toy store owner is like a computer doing a search with UTF-8 data. The owner is being very literal and does not realize the unsolved cube and the solved cubes are the same. The only difference is the way the data is stored on the cube.
You have a couple choices for how to get through this Amelia Bedelia moment. The easiest is to solve your Rubik’s cube and ask the toy store owner to check again. In UTF-8, this is called normalization. We make the data we are looking for match the format of the datastore data by normalizing (solving the cube).

Back to UTF-8
I used this exact metaphor to convince my development team that normalizing our UTF-8 data was necessary to support Chinese-and-Arabic language-based searches. (Other languages use UTF-8 scripts as well, including Russian and Hindi. Even English can be saved in UTF-8, but these were the languages we needed it for.) Guess how many lines of code it look me to “solve the Rubik’s cube” and fix our search feature? I’ll give a hint: It’s the same number of lines our stick figure used in the comic above to levitate. One. Plus, fifty lines of unit tests to make sure anyone who updates my code knows what they are doing.
The challenge was not the code. It was getting buy-in from stakeholders, explaining technical details like binary and normalization forms to project managers. And developing expertise in the subject to know my one line of code was the best way to support users.
Moving Forward
There’s a lot of emphasis on code, algorithms, and specific language features in the tech industry. Much like the XKCD comic, there’s some truth that these skills are necessary. But solutions more than code are what make good software. My best development ever may have been just one line. Communication and collaboration will do better to move application software forward than any big-oh algorithm optimization. (Unless you’re at scale, and you’re probably not.) Let’s make software more about solutions than about code. Not only will this serve a larger user base, but it will invite more people into the fold of development.