# Lessons learned

## Life

• Prioritise.
• Do the important things first.
• Define these important things for myself and be clear with what I want to achieve.
• Automate backups.
• Make sure the backups I've made are actually successful. And I have at least 1 week fresh backup of everything I did.
• Study smart.
• Ask myself the question of what it is I am trying to solve or understand.
• Start working to solve the problems before the deadline
• And prioritise.
• Move fast.
• Ask questions whenever you don’t understand.
• Don’t sit idly.
• Focus.
• Focus is the ability to say no to things.
• Write more.
• Document my thoughts and findings and share it.
• Research really well the topic you are trying to share.
• Make sure I don’t repeat what has been said before and if it was.
• Link to it and make my own observations and conclusions.
• Track my expenses.
• Get into the flow state as early as possible during the day.
• Just being exposed to concepts through videos or tutorials is not going to help me pass interviews.
• Actually code everything up and implement it.
• Don’t be careless on the exams and when doing exercises.
• Check back on my work and go through my calculations.
• It is very easy to miss something.
• Sit up right.
• My body language dictates how I feel.
• Sit straight and don’t slouch my back.
• Drink water.
• Always stay hydrated.
• Pay attention to my health and well being.
• Do not consume excess sugar.
• Learn by investigation.
• Rather than by consuming some data points.
• That is strive to understand.
• Why?
• And how?
• Use paper.
• Don’t be full digital and try out my calculations and thinking on paper.
• It saves a lot of time.
• Keep receipts of expensive purchases.
• You never know what happens and a lot of more expensive items have warranty.
• Specialise.
• Don’t jump at everything and try to know it all.
• Be really great at one thing and then you can branch out.
• Check everything once I leave a room.
• Did I forget anything?
• Learn from my mistakes.
• Be conscious of mistakes that I have already done.
• Learn why they happened and do my best to never repeat them again.
• Look at the price of the delivery.
• Don’t assume it’s difficult until it is.
• Simplicity matters.
• Don't overcomplicate things for no reason.
• Try to avoid confusion as much as possible.
• Don't use anything only you can understand and release it in the public.
• Asking questions is a a great thing and being stuck on the same problem or being oblivious how to do some thing is not always a great thing.
• Be wary of how to ask questions the right way though.
• Be aware of my quirks and ask myself why I have them and why I do what I do.
• For example I at once had a weird obsession with lowercasing everything just because it felt nicer to have everything lowercased.
• But that is obviously a weird quirk and does no good to anyone including myself.
• What I make doesn't have to be perfect. It's better to make something than nothing at all, and it's better to share things early to get feedback than spending years trying to perfect something.
• I won't be able to do everything. Setting constraints is key. I want my projects to be focused, rather than growing too much in scope and becoming a "catch all".
• Do one thing at a time. Rather than trying to achieve all of my goals at once, it's best focus on completing one thing at a time. Sometimes external pressure can make this hard, but I try to stick to it as much as possible. I've found that it enables me to move way faster.
• Change location.
• Work from different places.
• Meet new people.
• You are not productive staying in the same spot for too long.
• Focus on the foundations fist.
• Health (Exercise and Nutrition).
• Good state of mind.
• And all else will follow.
• Experiment often.
• Try out any new ideas I have (it is the only way to see if the idea is any good).
• Use my brain. Actually think about the problems I have an things I can do with what I have instead of giving up and resorting to other things or exterior help. Think first.
• Share. Without sharing the things you have made, there's a very slim chance someone will ever see them.

## Code

• Use switch cases over long ifs.
• It’s a lot easier to actually just use one screen.
• Much easier to context switch.
• Use version control.
• And commit my changes
• It is a pain to reverse and fix things when you don't know where the problem is.
• Do atomic commits.
• Write proper commit messages.
• Comment over my code!
• Especially zsh functions, makes things easier to read.
• Run/Right/Fast.
• Make the code work then make is clean then make it fast (if necessary). Solving the “correct/clean/performant code” problem all at once can be overwhelming. Don’t be overwhelmed. Solve one at a time.
• Reducing the maintenance burden is, for most codebases, the biggest optimization you can do.
• Of course it's all about striking a balance, but 99% of the time there is a choice between performance and readability, readability is the right answer. Performance should only be chosen if it is absolutely necessary.

## Using Mind maps

• Don’t index information for the sake of indexing.
• Try to see how this piece of knowledge plays a role in on a more higher level.
• Be smart about how to present information in the mind maps.
• It should be more of a guide and a glue between different things rather than as a way to dump everything in one single file.

## Productivity

• Just start.
• Getting distracted is easy but starting is hard.
• Use the right tool for the job.
• i.e. mind maps are great for visualising things so don't use them to dump things inside to filter for things.
• I can use simple markdown and text files for that where it is easier to maintain and extend.
• Slow down. Think about the problem. Don't rush things.

• When posting an error or an issue on some forum or GitHub, give as much information as you can to help debug it.
• In the case of posting an issue with an Alfred workflow, it is best to link to the workflow you are using and also link what the debugger says when you are running into the issue.

## Design

• Giving users many options is more often a bad idea.
• Instead give very few options but make each one of them count and stand out.

## Keyboard Maestro

• Minimise inputs to the macros. Sometimes it's possible that the input I need to a macro, I can get from another place.

## Focusing

• Good jazz music is really amazing as background music. Together with low sound of rain or thunder, it really makes you focus and get lost in what you're doing.

## Other

• When proposing feature requests, "for me" is never a good argument for a feature request.
• If I want someone to add a feature to their software, show how it would be useful to lots of users.
• Explicit over implicit is almost always better.