The 50 item checklist to become a better developer

I recently watched a talk by @mike_acton who’s a lead programmer at Unity. In his talk ,provocatively titled “Everyone Watching This Is Fired: Tips for Game Industry Programmers”, he talked about the things a programmer should be able to do in order to be considered a good programmer.

On solving problems

Be able to articulate problems you’re trying to solve precisely.

Articulate the problem you’re trying to solve precisely. You must be able to say it. Out loud.

Someone else can articulate the problem you’re trying to solve.

Articulate why the problem is important to solve.

Articulate how much is worth solving.

Articulate why the problem is worth solving.

Articulate the steps required to solve the current problem

Have a plan B in case your solution doesn’t work

Implemented your plan B first before your plan A.

Articulate the unknowns and risks associated with the current problem. Estimates

Articulate the test for completion for the problem. How do you know when you’re done.

Articulate the hypothesis related to your problem. Find out how you can prove that your hypothesis is wrong.

On time management

If you think you can “make up the time”, you’re wrong.

Write frameworks and tools that you can use multiple times to solve problems. Verify that it has value.

Schedule your time well. Know what you’re gonna do with your time

On working with a team

Articulate the latency requirements for your current problem. How long until someone needs the problem to be fixed.

Articulate the throughput requirements for the problem. How much do you need to test the requirements of the problem.

Articulate the most common concrete use case of the system being developed. Develop the API for all of those usecase

Be vigilant about not wasting other people’s time. The other side of the coin is also through. The If asking your team can save you weeks of development, then you should know when to ask your team.

Actively work to bring value to the people you work with.

Actively work to ensure underrepresented voices are heard.

On writing code

Know the most common real-life values of the data being transformed.

know the acceptable ranges of the values of all the data being transformed.

Articulate what will happen when data outside of the range enters the system. Does it crash? Does it display an error message? Don’t hope that it will never happen.

Articulate a list of input data into the system roughly sorted by likelihood.

Know the frequency of change of the actual real-life values of the data being transformed.

Profile the performance of your system frequently.

Profile memory usage of your system frequently.

Use multiple different profiling methods to measure the performance of the system. FPS is not a measure of performance. Measure process time.

Articulate how to significantly improve the performance of the system without changing the input/output interface of the system.

Know where the data comes from.

Know how often you read data that is not needed as part of the solution. Know how much you’re wasting.

Know what data you’re writing. Know where it’s used. Organize it.

Know how often you write data you do not need as part of your solution.

Articulate how all the data is laid out in memory

Know specifically how to debug live release builds of your work when they fail.

On working with technologies

Read (at least partially) the available documentation for the hardware, platform, and tools you use commonly.

On designing things

Actually sit down and watch the actual use of the system you’re working on.

Know the slowest part of the users of the system’s workflow with high confidence

Know what information users of the system will need to make effective use of the solution.

Articulate the finite set of hardware I am designing the solution to work for. Know you’re supported hardware.

Articulate how the set of hardware specifically affects the design of the system.

Never use the phrase platform independent. No such thing. There’s no such thing as future proof

On growth

Actively seek constructive feedback and also take action on the feedback

Don’t actively avoid the uncomfortable (professional) conversations

Don’t actively avoid any professional conflict.

Consistently interact with. Other professionals, professionally.

Articulate what others should expect from you.

Be someone who doesnt require multiple reminders to respond to a request or complete work.

Pursue opportunities to return value to the commons.

Maintaining your passion while working for a fast-paced startup

I was recently asked by a coworker about how I manage to still pursue other things while working at our startup. Working as a game developer can be demanding at times. It’s not all fun and games as what you would expect. The startup I work for have Fortune500 companies as clients so there’s an expectation for world-class high quality work. I’ve managed to get used with the high stakes work culture after trying out a lot of coping tricks. I, myself, am surprised that I can still do my hobbies and still progress on my personal projects while working 8-5.

I do a lot of things to make sure I can do the things I love. Here’s the top 5 things I do to get both my work goals and my personal goals on track:

1. Manage your time

“Great creative minds think like artists but work like accountants”

– David Brooks

Time is the only thing you can truly spend. You will never have it back. Manage your time like your life is on the line. Keep a schedule. I use a technique called time-blocking to stay on top of my day.

I plan my day using time-blocks. I make sure to leave some hours empty for unexpected events.

Whenever you feel like you’re not getting anywhere, ask yourself: Are you spending the majority of your time working towards the things you want?


2. Make sure to get enough sleep.

Respect your tools. If you take care of your tools, They will work efficiently. If you don’t maintain your tools, They’ll rust and wither away. It’s the same for your body and mind. If you don’t take care of it, It won’t work as best as possible.

Sleep is the best way to recover. Studies have shown that lack of sleep affects your attention and willpower. Give yourself permission to rest. We’re here for the long haul after all. Respect your time for work and time for recovery.


3. Consistency is better than intensity.

I drew lines and boxes everyday. Here’s how much paper I have used to get comfortable with drawing.

There’s a typical pattern that happens whenever humans strive to do better for themselves :

  1. Intense motivation and inspiration
  2. Intense activity
  3. Intense fatigue and/or burnout
  4. Feeling satisfied with the activity
  5. Stopping the activity altogether

This is the primary reason why most people don’t follow through their goals. The intensity makes a person feel like they’ve basically achieved something. Instead, choose consistency over intensity. It’s better to start with a routine that you can enjoy and follow through every day. Once you’ve turned it into a habit, you won’t even have to think about it!

You can have great progress with intensity but the moment you stop doing it everyday, you lose. Choosing consistency doesn’t mean you won’t make progress. You’ll have small progress everyday and those small wins can compound over time.


4. Rig the game so you can win

“Alleviating performance anxiety allows you to overshoot your goals, continually succeed, and build confidence and momentum.”

-Tim Ferriss

We’ve been conditioned by our society that success comes from dreaming big and always struggling to reach it, that lowering the bar meant giving up and being a loser. So we grit our teeth and push forward, ignoring everything else. Eventually, failures pile up and mentally consume you. Slowly, the mental stress of under-achieving creeps up on your life. Worse, you’ve mentally paralysed yourself with all the pressure.

Games taught me that challenges, at the right difficulty, can be fun. So why shouldn’t it be the same with our life? Constantly pressuring yourself to have big results everyday can be taxing. Worse, you might end up feeling that you’re not progressing anywhere.

Instead, keep your measure for success low enough so that it’s easy succeed everyday. Maybe you’re an artist working on a game, a low bar would be one art piece per day. If you make crappy art, that’s fine. Keep doing it. You’ll find that as you consistently succeed everyday, you’ll get enough momentum that before you know it you’ll be making 10 pieces a day. Lowering your bar tricks your brain into taking action. Taking action gives results. Results make you better at what you do.

It’s not about settling for less. It’s about lowering your expectations so that you can take action. The benefits of removing the intense pressure of producing massive results everyday far outweigh the psychological consequences of under-delivering everyday.


5. Don’t forget to have fun!

You’re a game developer. You make things fun for a living. Don’t become too busy that you forget that fun is an important part of work. Your goal is to spread fun for yourself and for others.


I could list down a lot more other tricks that I’ve learned to use over time but these are the top 5 things that help me everday. What are thoughts about it? Do you use anything to keep yourself going?

Why blog?

Human beings are at their best when immersed deeply in something challenging

-Mihaly Csikszentmihalyi

Hello. My name is Gab and I am an experienced unity engineer. I made this blog so that I can have a place to share the things In have learned and the ideas that I encounter.

I have been writing a journal for the past two years. It has helped me improve a lot. By being able to capture my thoughts on paper, I’m more likely to follow through with the ideas that suddenly pop up in my brain. The reason why ‘m writing publicly is because I want to take my writing skills to the next level.

The above quote by Mihaly Csikszentmihalyi really resonated with me when I first encountered it. Mihaly was a Hungarian-American psychologist who studied why some people get so immersed into an activity that they forget everything else.

Writing is a challenge for me. I’ve never really developed the skill to write. I’d like to be able to weave words together and make compelling statements. Alas, there’s no other way to learn but to actually write.

I sure hope that I could develop this skill well by blogging.