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.