This article describes and explains my plan.
This article was originally written for the benefit of my family. It was kept hidden on this blog. Now that I'm making it accessible, I should provide some context.
Where I'm from (Singapore), technical pursuits like software engineering are unpopular. A university tutor of mine once asked for a show of hands from those who specified computing as their first choice. Only 1 other student and I raised our hands in a class of about 20. In recent years, we've been trying to change this. Unfortunately, there is still a stigma against technical pursuits. Many Singaporeans, not least my family, have a rabid obsession with a handful of professions like medicine and law.
Sometime back, I left the nest in search of a more conducive work environment. Due to high property prices, moving out before getting married isn't common in Singapore. The questions came. My verbal responses did not satisfy them, as has been the case since I was a teen. I figured I'd write an article explaining in no uncertain terms, what I am doing and why. This way my family would have something to stew over without bothering me (I say this half in jest, I am grateful for their concern). To their credit, they've come around to my point of view. I no longer dread their company.
Anyway, that is the context for this article. I wrote it in haste for my family. Which includes my dear parents, who believe dinosaurs are a myth created by Satan and think Trump is the messiah. As such, this article is a means to an end. It is no paragon of literary excellence. Details, especially technical ones, are sparse. Nonetheless, it has helped those around me to understand me better. I hope you find it to be of use.
The basis for my plan is a train of thought I had in my teens. This section describes that train of thought.
Like any child, I pondered over the reason for my existence. I decided that I exist to contribute to the advancement of mankind.
I decided I'd contribute to the colonization of space.
Colonizing space is an immense challenge with many facets. The technical challenges intrigued me. But fundamentally, the field lacked resources. To make research sustainable, there was a need to commercialize related technologies. This required large amounts of capital and patience. I decided the best way I could contribute would be to first acquire capital. Once acquired, I'd fund and take part in research.
In recent years, people with material and intellectual capital have pursued the colonization of space. These include the likes of Elon Musk, Jeff Bezos and Stephen Hawking. It's nice that people with resources are taking on this challenge. That said, most private sector development has taken place in NA. Our region remains far behind. For this reason and others beyond the scope of this article, I still believe in first acquiring capital.
To answer this question, I read up about the super wealthy. I looked for patterns among those who aquired capital under similar conditions to my own. Among the young, self-made, super wealthy, many were techies. A good number sold software. What was it about selling software that enabled acquiring of capital? My conclusions were:
Software is easy to distribute. A software product's potential market is anyone with an internet connection. Many other products need physical proximity.
Software has low marginal cost. For example, it costs Microsoft a tiny amount to create a product key for a new copy of windows.
Software can have technical competitive advantage. This makes it hard to replicate, and so, exportable.
There's a large category of “tech” companies that don't sell software. For example, Redmart and Deliveroo. They apply existing tech to age-old challenges like selling groceries or delivering food. Because they do not sell software, the 3 bullet points above don't apply to their products. Moreover, there are more downsides to such products:
Anybody with enough resources can create copies of such products. Competition between such products often devolves into innovation-light, VC-fueled bloodbaths.
The growth of such products depends on local market size. While SEA has looked enticing in recent years, any player here is still a minnow next to those in NA and China. It's hard for such products in SEA to become globally dominant.
Examples of software products are systems like ProWritingAid, Elasticsearch, AutoCAD, Lyrebird, and Terraform. These products marry advanced technical concepts with top-notch software engineering. They are easy to distribute, have low marginal cost and are hard to copy. Also, growth in their adoption doesn't depend on local market size. High-quality software built in a country with a small local market can be globally dominant. These are the kinds of products I wanted to develop.
Software was a great fit for my situation:
Singapore's market is tiny. I knew the software industry would provide the best platform for me to access a global market.
I knew I'd be working with little material capital. The software industry is one within which intellectual capital alone can earn success.
I had an affinity for logic based subjects and I loved making things. I knew building software products was something I could pursue at a high intensity for a long time.
You might remember me considering a career in finance. I saw investing as a good means of acquiring capital. Investing can yield exponential returns and isn't constrained by physical proximity. Also, some people I respect, like Warren Buffet, are investors. But, you need material capital to get going in that industry, and I really love writing code and making things. So I dropped that alternative and don't intend to explore it again.
We create plans to achieve goals. These are mine:
Get my skill level to the point where I can build software products.
Sell software products, acquire capital.
Move on to technologies that contribute to the colonization of space.
To make this plan manageable, I've broken it down. In the following sections, I describe and explain the parts of this plan.
Acquire funds to support myself and invest in my ideas.
Having backup funds allows me to focus on the rest of my plan.
After leaving Junior College, I taught math and physics tuition. I learned to invest and accumulated a decent amount, enough to maintain my frugal lifestyle for a long time. At present, I'm working toward creating income streams that do not compromise the rest of my plan. They're slightly technical, so I'll expand on them later.
Learn to write, test, publish, and maintain code. Learn to build complete systems. This includes everything from provisioning cloud infrastructure to building user interfaces.
Being able to build things means lower costs, allowing me to bootstrap my company with my own funds. Why not raise funds? It's not a good idea to go to VCs for funds with no leverage. Moreover, I'm planning to sell software products, so my time is better spent improving technical skills than looking for funds.
This is the part of my plan I started with. I didn't have a structured approach at the initially, that's something I regret. I thought I'd learn a language, make games and become a competent developer. To that end, I bought my first programming books, Sams learn C++ in x days and some book on building games using DirectX. Remember how there were duplicate tomes on my shelf? I was so excited I wrote to Amazon when the books were a few days late. They sent me duplicates and I was too stupid to return them. Anyway, I did learn some basics and that I enjoy coding, but I was a long way from being able to produce a software product.
That was when I was 14. I've got a far more structured approach to learning these days.
When I need to master broad, theoretical subjects, I look through university curriculums. For example, Standford lists the modules for many of their courses. After I figure out the topics I need to know, I read textbooks. I read about a textbook a year. For example, last year, I read Database Systems Concepts. This year, I intend to read the Deep Learning Book.
When I need to master narrower, specialized subjects like tools and techniques, I read:
Books. For example, I need to optimize some of my libraries, so I've pre-ordered Writing High-Performance .Net Code and will read it once it's out.
Documentation for tools and services. The last major tool I read up on was Elasticsearch.
Source code. Many developers open source their code. For example, the source code for Chromium is open source. I looked through some of it when I was trying to understand the limitations of a language. I'm active in the open source community and spend a lot of time looking through code written by others.
Apart from learning as a means to an end, I stay up to date and put time aside to learn about new tools and techniques. I do this by browsing forums like Reddit and Hackernews. I'm regimental about it. If there are too many interesting articles, I bookmark them and come back to them. For example, Global Azure Bootcamp 2018, a “boot camp” on Microsoft's cloud offerings, is in my bookmark bar right now.
These are the answers to some common questions about my learning to build software:
Consider the following applications:
Instagram: Relative to many technical products, Instagram is comparatively simple. Nonetheless, there is a lot going on under the hood. Two Standford graduates built it. They took about a year to launch it (started out late 2009 as Burbn, launched in October 2010). It could take a good developer up to 2 years to build such a product with the same level of polish.
Parking.sg: A team led by LHL's son spent over a year building the parking.sg (mid-2016 to October 2017). Parking.sg includes computer vision technology, works on multiple platforms and has to interface with government services. A system like this could take a good developer several years to build, test, and launch as a polished product.
Minecraft: Notch, the creator of Minecraft, spent a year and a half on early versions of Minecraft. He wrote his own game engine, so his efficiency is respectable.
The tech scene exhibits an ebb and flow of opportunity for small developers. Once in a while, a new technology creates opportunities for them. Those who are successful create barriers for other small developers to get going. For example, when online shopping first became viable, small shops littered the internet. Over time, the market has consolidated into large, generalists like IHerb and Amazon. It's a lot harder for small developers to enter the market these days. The same thing happened in mobile application development. At the start, small developers could compete globally. Eventually, some grew so big that it became hard for newcomers to compete. During that wave, I was working toward a tool for building cross-platform applications. But my technical skills weren't up to par. At present, I am attempting to pre-empt the next source of opportunity. I intend to build according to the oppurtunities of the day. I expand on my current efforts below.
Once I have a profit-generating piece of software, I intend to start a company and build a team. There is a lot I have to learn to make this part of my plan happen. I'm clueless about marketing, accounts and legal issues. There is a good chance that I'll have to find a partner. This part of my plan will get fleshed out as it gets closer.
Once I have enough capital to venture into other sectors, I intend to do so. I look forward to being able to explore other fields.
As a teen, my bet was that computing would be in demand in the coming decades. Computing provides tangible value to companies. For example, many companies have ventured online because it widens their customer base and provides convenience. This is in contrast to the biotech fad. That entire industry was propped up by government support rather than market forces. I was confident that I would be able to find freelance jobs or a full-time job if my resources ran low.
Things have panned out as expected. Computing is the most in-demand field in Singapore. At the same time, it affords close to the highest starting pay for fresh grads. Moreover, Singapore is trying to attract companies that can compete with the big boys, who pay entry-level workers 6 figures. While I do not have a degree, with my simple lifestyle, I am confident that over a reasonable amount of time, I can earn enough to fund several more years of development.
As mentioned earlier, I am attempting to pre-empt the next burst of opportunity. Browsers have begun shipping a technology called web assembly, it allows developers to build extremely performant websites. Also, it allows developers to develop websites using their environment of choice (environment refers to a language or a group of languages, and the tooling and libraries that exist for them). Web assembly is incomplete but has good momentum. My opinion is that it will become the foundation for building cross-platform applications. At present, companies often build completely separate user-interface applications for android, ios, the web and so on. In addition, they build backend services using a variety of environments. Web assembly will allow companies to build a single, cross-platforam, user-interface application using their environment of choice. Also, they will be able to build backend services using the same environment. This will translate into significant and tangible savings on development. Some implications of this are:
The old environment for developing websites will decline in popularity.
Some other environments are going to fill the gap.
I am betting on an environment called .Net (the reasons why are beyond the scope of this article). In anticipation of .Net's rise, I am currently developing tools for it. These tools do stuff like generating documentation, providing pipelines for turning code into published libraries, and the like. Tons of capital goes into tech companies of all stripes, AI companies, IOT companies, concept-based companies and the lot. Some succeed, some fail, but all spend money on tools. I am trying to capitalize on the imminent spike in demand.
It will be about 2 years before web assembly is fully integrated with .Net and ready for commercial use. Regardless of whether or not I manage to monetize my tools, what I learn will prepare me for building products based on web assembly and .Net. In other words, I am also preparing to make the most of web assembly's rise. Eventually, I intend to have a go at building component libraries and tools for building component libraries using web assembly and .Net.
This is a tool for generating documentation/blogs. I am working on this first because I need it to generate documentation for my other projects. It should be released in a month or two.
IClapp is a technical library. It is complete and will be published after I generate documentation for it. Quickwrap and PiplinesCE depend on it.
Autocorrect for programming patterns. Currently functional and in use with my other projects, but requires a rewrite and documentation before it can be published.
Quickwrap is a technical tool. I haven't started building it yet, but I've designed it and have concrete plans for it.
PipelinesCE is a DevOps tool. Basically, it provides a framework for reusable pipelines. This project is mostly complete but is held up by Mimo, IClapp and Quickwrap. A German guy recently released a decent alternative. PipelinesCE does have some features that his does not. I intend to publish PipelinesCE by the end of the year. With some work, this project might be monetizable.
Haven't started on this project yet, almost certainly will only be able to begin on it next year. Improves upon Mimo and will likely be monetizable.
At this point, my primary goal (finances wise) is to be able to sustainably pay for an environment that is conducive to my work, study, and recovery.
At present, assuming I maintain my current environment, I have enough savings to last me 1 to 1.5 years. To improve both this buffer and my environment, I am planning to try and generate some income using advertisements. The following are documentation sites for some popular libraries: HTML Agility Pack, Newtonsoft. Both run ads. Further down the road, I intend to monetize some of my tools by providing extra services.
You can visit my Github page to see what I've been up to. The green squares correspond to days, you can click them to see what I did on a given day.
My health issues began when I was 17. I was trying to qualify for the SEA games for one last hurrah. Trainings were at night and I often got home past 11. I would eat and immediately go to bed so that I could wake up for school the next morning. As a result, I started getting acid reflux. My throat was sore all the time. Back then, I had no idea that the soreness was due to acid. As a result, I went on at least 6 courses of antibiotics over a year. This was a mistake. Antibiotics can mess up bacteria in the gut, which can lead to problems like excessive gas. I still remember the first time I woke up and simply could not breathe because of how bloated my stomach was. I did not save any photos, but this poor girl had the same issue and documented her experience on Instagram. Note how her stomach is taut, it is distended with gas, she isn't fat. When bloating gets this bad, the diaphragm gets inhibited and it becomes hard to breathe. Apart from breathing issues, excessive gas makes it hard for the body to absorb nutrients (it affects appetite) and makes it incredibly hard to sleep. My health got incredibly bad, for several years, my mind was constantly on my next breathe and my mind was cloudy from the malnutrition and sleep deprivation. I came close to death a number of times, waking up frozen, blind, and not breathing, I feared falling asleep. Sure enough, I eventually ended up warded with a failing heart.
It has been a long recovery. The ailment I have is often referred to as IBS. If you scroll down in the IBS link, under causes you will see changes in bacteria in the gut. This cause wasn't always there. Back when I first came down with it, many doctors thought IBS was solely due to stress and that “reducing stress” was the way to cure it. This understanding of the ailment has changed over time. With this understanding has come remedies:
Foods that gas producing bacteria ferment have been identified. FODMAP is an acronym for the chemicals that can be fermented into gas. Monash University has spearheaded the study of FODMAPs, creating the low-FODMAPs diet.
Sometime after I was diagnosed, Rifaximin, an antibiotic, was approved for the treatment of IBS in Singapore. This study elaborates on its efficacy. Essentially, it is a slow releasing antibiotic that clears out bacteria in the gut, allowing for a gut bacteria “reset”.
The elemental diet has been found to help. This powder diet includes only the most basic compounds. For example, instead of proteins, it includes only amino acids (usually, the body breaks proteins down into amino acids). Because of this, the powder is completely absorbed within the first few feet of the small intestine, denying sustenance for bacteria in the rest of the gut.
Rifaxmin, probiotics, the FODMAP diet and the elemental diet have helped me to get to a functional state. The girl I mentioned managed to fix her issue by going on the low-FODMAP diet. She still gets some bloating if she deviates from the diet. My current condition is somewhat similar to hers, these days I am fine as long as my diet is controlled. In fact, last year I felt close to perfect. Unfortunately, after eating out a couple of times in Malaysia, my state of health began to deteriorate. It will be a while more before my digestive system recovers to the point whereby it is robust enough for me to take on jobs or commitments that require me to have meals out or at different times than I am used to. There is no doubt at all that I am getting better - for the last few years, I've felt better every year - that said, my health is still a major risk factor for my plan.
I hope this article makes it easier to understand my actions and choices. Questions like:
What I am doing on the computer all day long
Why I “scringed” in the past and saved all my money
Why I am so particular about my diet
should have clear answers. Thanks for reading!