Taking technical decisions for your side projects

Taking decisions for technical projects

How to take technical decisions for your side projects?

Some people allocate a sizable amount of time to this. My approach is much more simple.

Taking decisions for technical projects

First, categorise this decision. Is it a one-way door decision or a two-way door decision? Most of the time it is the latter. Being that the case, I dedicate 30-45 minutes to research what are my options. What analysis of the options already exist out there, medium, .dev, Reddit… If I think it might be relevant, ask in one of my core chat groups for an opinion. Most of the time it falls on one of two buckets, a) no opinion / educated guesses or b) extremely polarised opinions (pro or against particular options). People might reveal big hurdles or advantages for a particular choice.

By then I should be able to narrow it down to 2-3 options. Then I prioritise based on a series of factors that can be interpreted as gut feelings, but they are not. Does it look great and polished? Indicator of care and commitment behind it. Abundant documentation? lots of posts about it? great examples? good indicators of an existing community, up-to-date docs, easiness to find help when finding any blocker down the road,…

The next step is to pick the most appealing one and build a (VERY) rough version of whatever I need. Sometimes that means writing a basic script to test being able to solve a sample of the problem or a limited aspect of it. Sometimes means quickly integrating it with an existing project in a branch and seeing how it goes. The goal is to get a rough idea of how difficult will be to actually implement it at a production level, a proof of concept. As a rule of thumb, if I am not able to get a positive outcome in a short time, I discard it. The time can go from two hours to a morning, but no more than that.

The moment I hit a visible wall, I park that one and move to the next possible option. If I find a solution that is “good enough”, I just go for it, without exploring the next ones. My goal is to identify as fast as possible a viable solution for a particular problem I am looking to solve, minimising potential friction down the road. My process for not easily reversible decisions looks different (MECE, etc, but the reality is that those are indeed pretty scarce.

Avoid analysis paralysis with an approach that works for you.

To summarise this little piece of advice:

1. Simplify it and identify what type of decision you are taking

2. time-box your process

3. have a clear understanding of what success looks like before starting your analysis

How do you make your choices out there?

Mistakes and challenges, shipping an MVP in 90 days

Mistakes launching a product in less than 90 days

It’s been a bit more than two months since I decided to create something around a problem I care about. I deeply hate meetings. Inefficient meetings are a plague. I am building a solution to help you improve your meetings. What final shape that will have, I am still not sure, it will definitely change along the way, but it is something I want to tackle…. #buildinpublic

Speed is key. I know, it is not as fast as developing and testing in a week as @shl process (I have a couple of ideas I’ll test his process with, but not this one). I had a few domains saved for side projects and that’s the one better fitted for the project…

My goals these past months have been a) validate if there if it is a problem want to have solved (can it get traction?) b) if I can deliver the technical parts, c) can I deliver value by solving the most annoying parts of meetings…

So far it is going great, but I am gonna review some of the mistakes I have made this time. I think it is also important to review your errors. They are not the only ones, but the more painful ones.

Diving fast into developing something you do not know…

Launching the Chrome Calendar Extension. I had zero experience with extensions. I have learned a lot about it during this time. Something that is kinda tricky when developing extensions is there is no easy way to declare environment variables.

Why is that important?

The first time I submitted the extension to the Chrome Store, I forgot to change the (hardcoded) API endpoints! It was approved, but was making the calls to… localhost ?‍♂️. Another important learning there.

Every submission to the Chrome Store goes through a cycle of up to 10 days to be re-approved. Sometimes it takes less time, sometimes more. Insight from all this?

  • Run an exhaustive checklist, making sure that all that could be broken is not broken…
  • Regressive tests are your friends. Not at this stage though, many things will change. But eventually will have a set of regressive tests to run before submitting. Testing chrome extension is a different beast. Will probably write about it at some point…

Mistake number 2, not checking my requirements when picking my stack

Without going into much detail, I found out, when I was already committed with a stack (having developed a substantial part of what I had planned), that some of the things I wanted to be able to do, were…

complicated. NextJs comes with a couple of great advantages, like having an API out of the box. Well, that was not easily deployed on my platform of choice. Also generating dynamic pages had some complexities.

In the end, I was able to overcome those hurdles, but I had at least a couple of stressful days.

Insight?

  • Listing the critical needs of your project. Going through them, and checking they are available in your stack… can save you a lot of headaches.

I think the main lesson is it is okay to make mistakes. Shipping fast, finding insights sooner, make up for the mistakes.

Learning to code faster and better, 12 tips

Young programmer typing in a laptop

Becoming a better programmer

what if You can become a better programmer. I believe you are able to learn to code faster and more efficiently, just by having the right approach and instructions.

I started programming years ago. Out of need. I started working in a web design team using PHP. My (amazing) boss considered writing code in your Windows Notepad not only acceptable, but the proper way. I had to learn, fast.

Later, after switching roles, I wanted to do things for my org that were not possible with the existing tools . Like data analysis of BIG files. Or manipulating existing data to get insights that were not available anywhere else. I wanted to build or deliver results, so I had to learn how to ship those.

These are some tips around learning how to code. Things I have found useful to improve my programming skills. I have always been thinking long and hard about how to become better at learning. I enjoy learning. Even with the constraints of having to do it in a fast paced environment, with little margin of error.

A quick caveat, most of the references and links are for learning JS. I am going deeper into solidity now. The examples that come to the top of my mind are for JS as in the last years I have spent more time with that stack.

The joy of learning also comes from being successful at it. Understand that you need to some extent to perceive your progress and improvement.
Our ego is at the centre of all we do, learning something that goes nowhere is usually not fun at all. We need to feel the car is moving towards the right direction. This is not about reaching a particularly far destination, but about progression. Tracking your progress and measure it.

Ask what are the best books about what you are trying to learn and devote time to read them. In my case, “javascript the good parts” and “JavaScript: The Definitive Guide”.

Being grateful about having to do pull reviews. This is probably my number one, having a great person working with you and reviewing your code is amazing. Try to be that person for someone else. Learn how to do a useful pull review.

Get the best possible teachers. If we are talking about courses, go for the best possible ones. Sometimes more expensive does not mean necessarily better. Ask around. Disclose what are your learning goals (it does make a difference). Filter recommendations. You have access to the best universities of the world, and top-of-the-line educational material from MIT, Oxford, Harvard, Caltech, University of Helsinki… no excuses. Learn to code for free, or almost free, is possible.

Some people out there are creating epic content for a fraction of what costs a traditional education.

Study how other people code. Looking for people setting the standards for your industry, first-rate individual contributors. Check their GitHub projects, learn about how they structure stuff, and what approaches they have to their code. What do they use? what do they avoid?

Learn to handle your own frustration. As with anything important, it takes effort. The important thing is the long game. You are not gonna become great from the very start, but you can target to improve your skills and polish your craft. Not giving up on becoming better, being okay with sucking at first.

Ask questions, no matter how dumb they sound. Getting feedback and filling the gaps in your knowledge is the way to go.

Take notes of your journey. Every day, write down your coding experience. What you find, what is useful, what is not. It can be a simple folder with notes. Eventually, you’ll find the same blockers down the road. By taking notes about it, you’ll keep a backlog of solutions, it will help you debrief situations.

Use your notes actively. Do you know what is even better than writing down everything you learn? remembering it. I use Anki to create flashcards and help my brain retain and recover what I learn. It does make a difference.

Learn from your code. Allocate time to go back to your code and do a post-mortem exercise. Be disciplined about your approach. Sometimes we do not have all the time we would want to plan. Once things are calmer, find time to go back and think about how would you have done it better.

Test yourself, push your limits. What are they asking for the kind of positions you are targeting? What do you need to learn to build whatever you need to exist? how can you do X with your code?

Learn by doing. Practice, practice, practice. Smart, dosed, spaced repetition… Lots of research around the best ways to learn something (an obsession of mine), go look for it and apply it to your field.

Effective learning is something I care about deeply. A recurrent topic in my conversations and my tweets. I have never stopped learning. I see myself as a perpetual learner. I love having those epiphanies about concepts. Magic connections that happen between fields that theoretically are not connected at all.

I cannot stress enough it enough. Having a structured approach to your learning can make a huge difference. Having systems in place, avoiding waste energy and increasing focus. It all will help you overcome your challenges and learn at a faster pace. Do you have your insights? share them!

Previously oorei dot com | Comments are disabled