Holistic Optimization

Macoy Madson
It has been a while since I last wrote an article. Last month, I left my previous job after six years there. I moved from California to the East Coast to start at a new job, which I have been enjoying so far. The change has been especially good for showing both how much I know and how much I have to learn.

I also had several realizations about what I want to do with my career.

Goals

My current career goal is to become self-sufficient by creating products that I both believe in and own personally[1].

Cakelisp was one step towards that goal for me. I wanted to create an environment where I felt happy and empowered, two things I didn't feel with existing tools. However, recently I have realized that I had blinders on in regards to the broader, holistic view of my goal. I only focused on optimizing my development environment.

If I want to achieve my goals, I need to optimize every part of the process.

It is obvious when I say it that it was the case, but to me I had to gain that understanding. There were some resources that helped me realize this:
  • The Pragmatic Programmer (Hunt & Thomas) has "Tip 2: Think! About your work", which is about always observing how you are working and considering how you might improve things
  • Rapid Development (Steve McConnell) helped me realize the blind spot I had in the area of "Production", which in the game industry generally means people focused on schedules, planning, and project management. I realized the value of those skills (see footnote 2) only once I started seeing my past personal projects and their production-related failings. If you can successfully estimate, plan, develop, and deliver a product, that is one of the most generally valuable skills in the business universe (besides making the right thing)


Escaping "just programming"

By having a clear goal to work towards, I have an easier time realizing my deficiencies. It was easy to work for years on someone else's project without learning anything about the business and production elements. It turns out those are especially important if you want to be able to make a living off of something you create.

I am making a conscious effort to practice these skills:
  • Finding and understanding customer needs
  • Interacting with customers, for that matter
  • Evaluating potential market size for a product
  • Doing competitive analysis
  • Preparing a marketing plan: how do I actually get people aware of the thing?
  • Project management: Rapid development practice, estimation, project type (R&D vs. evolutionary prototyping vs. Strike team, etc.), and scheduling


I'm confident in my skills in writing code that makes something that accomplishes something. Now, I need to learn what the right thing is to make and how to get it out there.

Ownership

When I was looking for a new job, it became clear how I spent the last six years contributing to someone else's value. Once I left the job, all I had was experience and some money in the bank[3]. If I was instead working on my own technology in my own business, all the time I spend on it is building value. It is similar to renting an apartment vs. buying a house—each loan payment on the house builds the equity you have, whereas renting is more akin to paying for a transient service.

When working on your own business, the trade-off is greatly increased responsibility and risk. A career is no doubt the easier option, and I will continue to have a job until I have built enough value in personal projects to take the leap.

Short-term plan

In order to actually achieve my goal, my focus is going to expand to include business-related learning. My current plan is to work on projects lasting three months each, with the goal to release something at the end of those three months to the public. The goal is to create something which could become a viable source of income. I'm trying to shift from "project" to "product" development[4].

There are several virtues to limiting project time to three months:
  • I continuously exercise project front- and back-end segments: idea and market evaluation on the front-end, and actually finishing something on the back-end. If every project takes a year, I gain much less experience doing these segments
  • If a project ends up not finding a place in the market, I did not waste very much time on it
  • A strict deadline creates a requirement for limiting scope. I naturally run wild with ideas, but putting a deadline on things makes it much easier to see what is actually important


The time is no less than three months because I have come to realize that you cannot cheat work in nature. Very few things create large amounts of value without similarly large amounts of up-front work. The three month time period seems reasonable to create something with significant enough work invested to show some real value.

Conclusion

I continue to believe my work on Cakelisp and GameLib[5] get me closer to my goals. They do this by helping me create products faster, both thanks to their features and my increased motivation just by virtue of using them.

The best tools serve valuable purposes. My hope is I will gradually mold my tools to accomplish my broader goals, in the meantime making the tools more (provably) valuable.

[1] Besides my continual growth at my current job, which I also care about and work hard towards.
[2] In my opinion, there is a great deficit of truly good producers in the game industry. Cargo-cultism around task-tracking, Agile, stand-ups, etc. is so widely prevalent that teams have lost sight of what is actually important to project construction. I recommend everyone read McConnell's Rapid Development, which is quite pragmatic. Dig down into the why of your existing process and ask whether it's cargo-culting or actually valuable.
[3] Not to downplay the huge amount of value in both these things. I'll always be thankful for the knowledge, friendships, and opportunities gained from my work there.
[4] This doesn't mean I am selling out on my principles. I am confident a viable business can be made which still respects your freedoms (even in the Free Software sense), does not violate your privacy, has products I find interesting to develop, and has funding strategies consumers don't hate. We shall see if I can realize such a thing. The more aware of and opinionated I become on various issues, the more value I see in businesses that appeal to my principles at the expense of higher profit margins. This strategy is a viable one for those businesses, so I think I may be able to pull it off as well.
[5] To provide a brief summary, I have been working recently on foundational hash table, string dictionary, and dynamic array modules. I made a huge amount of progress on File Helper, my first three-month project. Cakelisp itself has only required minor bug fixes in the last month.
How to make things that people want and measure how good things are can be learnt in usability courses.

When it comes to selling things however, the whole system is made for breaking the law because salespeople don't care as long as they don't get caught. Use of any mainstream newsletter or advertisement service will break GDPR, Swedish privacy law and French anti-spyware law. Even the sign-up form for Google Ads is a direct violation of GDPR by having their own newsletter pre-checked instead of opt-in. Marketing is essentially a global anarchy where no laws are enforced due to too many outlaws saying "But everyone uses Facebook spyware for marketing". Hopefully there will be a cheaper way for smaller content creators to hand pick relevant quality ads for their channels like in the old days when people read newspapers, instead of malicious social media rumors sponsored by terror recruitment ads using browser fingerprinting and illegal ghost profiles.
I agree with you on the selling problem. I've recently heard a strategy that I think is ethical, though not as straightforward as buying ads: make a product that is so good that your users tell others about it on their own. Essentially, cultivate reason to spread your product via word of mouth.

It sounds unlikely, but there are projects which pull it off successfully. The best example in my mind is dear ImGui. It is so much better than existing UI solutions and so easy to integrate that it very quickly spread to a huge number of game studios, Nvidia, etc. without the need for a sales department, ads, or a newsletter. I myself have brought it up to coworkers when talking about UI, just because it's such a great product.

This approach is much harder, but has you focused on doing the right thing, which is making an excellent product that "sells itself" (read: the users love it so much they'll sell it for you).