↓ Skip to main content

Adding habits to your life

Question
#

How can I effectively and consistently add habits into my life?

Answer
#

I use the Loop Habit Tracker (an android app) to track any new habit I want to have and keep. Its purpose is two-fold: to remind me through notifications that I need to do something and to observe how consistent I am with the habit.

When adding new habits, I’ve found I was more successful by creating transition habits, that is, start with something that is easily achievable and is similar to the habit I want to have, then slowly transition the habit to be closer and closer to the habit I want to have. An example of this might be that I want to do 20 minutes of jogging daily, but since I’ve never done jogging consistently in the past, I should start with 1 minute instead of 20 and do it consistently. After a week of consistently jogging 1 minute per day, I can increase the habit to be 2 minutes. Each week that goes by the amount of jogging that is done is increasing while the habit is in its formation phase.

It may take up to 20 weeks to do 20 minutes consistently every day, which is preferable to me to trying to do 20 minutes of jogging right from the start and giving up after a few times because my body is not accustomed to such effort.

This same metaphor can be applied to mental efforts. If you’re not used to spending hours of focused effort on a task, trying to do it right away is likely to be very difficult. But if you slowly transition from doing none of it, to doing it a little bit, then more and more, until you reach your target, it will make something that initially appeared impossible manageable.

As you add more and more habits into your life, it may become difficult to keep doing all of them regularly without missing them. That is why an application such as Loop Habit Tracker will help you remember to do the habits you want to have.


Tech lead

Question
#

Do you need a tech lead in your team?

Answer
#

Let’s start with definitions of the tech lead role.

A Tech Lead is a software engineer, responsible for leading a development team, and responsible for the quality of its technical deliverables.

Source: https://www.thekua.com/atwork/2014/11/the-definition-of-a-tech-lead/

  • Guiding the project technical vision;
  • Analyzing risks and cross-functional requirements;
  • Coaching less experienced people;
  • Bridging communication between stakeholders and the team.

Source: http://vvgomes.com/we-dont-need-tech-leads/

  • Lead with company values
  • Deliver value to customers
  • Keep the dream alive

Source: https://hackernoon.com/whats-the-role-of-a-tech-lead-7725b47104b7

I am of the opinion that the distribution of responsibility is likely the best way to get resilience in your system. But with it comes the cost of delays before eventual consistency.

Thus I am more likely to adopt a position where having or not a tech lead will depend on the situation of your team.

Do you need to make quick decisions? Either have a tech lead for that or limit the amount of time allocated for a group of individuals to make decisions.

Do you need accountability? Either have a tech lead that is accountable or have important decisions assessed as a group and the results of the decision written with the name of those that participated in that decision.

Do you need to have a technical vision? Either have a tech lead responsible for defining that vision with the team or have the team work as a whole to define this vision.

Tech leads should have a high-level overview of the pieces that need to be built and an idea of how to get there and when. As individuals, this would require coordinating between individuals with different opinions about those topics.

I work in AI, and this problem makes me think of having a single model (tech lead) vs an ensemble model (group of contributors). If your single model generally predicts the same thing your ensemble model would predict, then the single model is more efficient. On the other hand, if there’s no single model that can perform as well as the ensemble, then you should go with the ensemble model.

References
#


Documenting a process

Question
#

How do you document a process?

Answer
#

A process is composed of a few things: inputs (dependencies), outputs and the steps to transform inputs into outputs.

Generally a new process will be created from a need (an output to be produced). For example, a client will come to you and ask to have software that does Y. Your output in this case as a software company is software that does Y. For the customer, the process they need you to develop is one where X (some unknown set of inputs) will be transformed to produce Y.

As a software developer, your task is two-fold.

First, you must develop a process for yourself to take client requirements (your input X) and convert them into software (your output Y), which means figuring out what needs to be done to go from X to Y (the transformation steps). Examples of those steps are requirements gathering, specification, design, architecture, implementation, testing, debugging, deployment, maintenance.

Second, you must develop a process for your client’s requirements, that is, one that converts some input information into their desired ability to produce Y. Examples of steps that would be in this process are uploading document A, B, C, processing the documents to extract specific information, produce report D.

When documenting processes, the steps will themselves become processes, that is, they will have a set of inputs and a set of outputs. A process will generally evolve into a complex graph of inputs, processes and outputs.

Processes are also generally accomplished by someone or something. In process modeling we refer to those as roles. Examples of roles are user, customer support agent, clerk, engineer, analyst, software system.

Here’s a very simple template that you can use to define your processes

  • Inputs: What do you need for the process to take place?
  • Processes: What actions are taken on the inputs to transform them into outputs?
  • Outputs: What is produced when the process is completed?
  • Roles: What roles are required to accomplish the actions of the process?
  • Average duration: How long is a process taking to complete in general?
  • Mandatory/Optional: Is this process mandatory or optional in the accomplishment of the higher-level process?

References
#


Recognizing processes to follow

Question
#

Given a library of processes, how can you determine which process you should be following?

Answer
#

Make a list of all the processes you have. Link to all the procedures to follow in each case. Some processes you will use so frequently that you will learn them.

Processes have starting points, that is, a trigger that initiates them. For example, if you have a process for code reviews, the starting point is the creation of a pull request by someone else. Another trigger might be the beginning of a new project. You should look for and recognize those triggers. If possible, when you document your processes, indicate what will trigger the instantiation of one of these projects.

Try to frequently look at the list of triggers and think about what you are working on or will be working on. This will allow you to catch processes that should have been started and followed, as well as let you prepare for processes that are about to start.

As you accumulate more and more processes, you will observe that there is a hierarchical organization to them. As one process starts, you can already prepare a list of processes you may have to follow soon.

You will also observe that the completion of a process often will lead to the start of another one. Once you’ve established enough chains (sequences of processes), it will be easier to identify and do the processes.

References
#


Superficial loss rule

Question
#

What is the superficial loss rule applied to stocks and how does it impact me?

Answer
#

The superficial loss rule states:

A superficial loss can occur when you dispose of capital property for a loss and both of the following conditions are met:

  • You, or a person affiliated with you, buys, or has a right to buy, the same or identical property (called “substituted property”) during the period starting 30 calendar days before the sale and ending 30 calendar days after the sale.
  • You, or a person affiliated with you, still owns, or has a right to buy, the substituted property 30 calendar days after the sale.

What this effectively does is that it prevents you from selling at a loss and rebuying the same stock within a 30 days period (before or after the transaction) for the purpose of tax harvesting during that year. This however does not prevent you from claiming the loss when you finally sell the stock.

It’s important to note that there is interactions between non-registered and registered accounts. Buying the stocks in one account and selling in another account will still be considered as if they were under the same account. The most important thing to understand is that if you have stocks in your registered accounts (TFSA/RRSP), that you buy/sell in these accounts within the 30 days window in a non-registered account, you will not be able to claim your adjusted cost base. This will result in a permanent loss of this taxable loss. As a simple advice, in other words, do not trade the stocks you have in your TFSA/RRSP in your non-registered accounts. It will simplify your life.

References
#


Why I avoid reading books

Question
#

Why do I avoid reading books sometimes?

Answer
#

The most common reason for me to avoid reading a book is that I see reading as an investment. I can’t spend only 5 minutes reading a book there and there. I need to focus on reading for at least 15 minutes, otherwise I cannot enjoy the story or understand the technical book I’m reading.

This creates a problem. For me to read, I need to have enough time to read for at least 15 minutes. 15 minutes is a considerable amount of time to allocate vs no time allocation to simply browse content online. Thus a barrier is created, making it harder to read books.

Similarly, there are times where I don’t want to read a book because I want to process a unit of the story or a chapter of the book in one reading. It is similar to not wanting to start a tv show episode knowing that you might stop watching it in the middle. I don’t like that.

Reading technical books is mentally draining. Sometimes I’m simply brain dead and reading books is simply not possible.


Dealing with negatives thoughts

Question
#

How do you deal with negative thoughts?

Answer
#

My approach to dealing with negative thoughts used to be to let my brain think about it for as long as it needed until it was satisfied with some sort of solution or it had moved on due to more urgent matters (or because I fell asleep).

More recently my approach has evolved. Having spent a large portion of the last few years thinking about artificial general intelligence, I’ve come to see myself as a machine, similar to a computer. I enjoy taking computer science theory and applying it as a way of life.

For instance, in the case of negative thoughts, I see them as being a process that is running in my brain and is using computing resources. Like any process, the operating system allocates it an amount of quantum (a period of time) before it is preempted and replaced by another process. As such, I now timebox the amount of time I allocate to a negative thought before I actively repress thinking about it.

This might mean to consciously say to myself “I am not thinking about problem X anymore, time is up” or “Your time allocation for thinking about Y is now completed, please move on”.

Such active and conscious effort to stop thinking about those negative thoughts has paid quite a lot. I spend a lot less time reflecting on those thoughts and find it easier to move on.


Data used to do time series forecasting

Question
#

What data do I need to do time series forecasting?

Answer
#

There are three values that you must know for each data point of your time series:

  • its entity, which represents a unique value identifying the time series (e.g., a product SKU). Without this information, it is not possible to construct a sequence of points since there’s no logical grouping between the points.
  • its timestamp, which represents the moment in time the data point was recorded. Without this information, it is not possible to construct a sequence of points since there’s no sequential ordering between the points.
  • its target, which represents the measurement of the data point itself that we want to predict. Without this information, we have effectively nothing to base ourselves on.

Such information would look as follow when organized in a table:

Entity Timestamp Target
A 1 5
A 2 6
A 3 7
B 1 13
B 2 27
B 3 55

Additionally, you may also have recorded additional values at the same time, which can be a useful source of information when trying to predict a time series.

Entity Timestamp Target Value 1
A 1 5 3
A 2 6 2
A 3 7 1
B 1 13 47
B 2 27 33
B 3 55 5

Let see what happened if we removed each of these columns to illustrate their necessity.

Removing the entity column
#

Timestamp Target
1 5
2 6
3 7
1 13
2 27
3 55

Removing the entity effectively leaves us with two values for the same timestamp. If the data was in this format and we were told that each time the timestamp goes below its previous value a new entity was defined, we would be able to reconstruct the initial table with its entity column.

Removing the timestamp column
#

Entity Target
A 5
A 6
A 7
B 13
B 27
B 55

Removing the timestamp gives us the values the entity may take, but we don’t know when. Again, if we’re told that the rows have been kept in some order, we could reconstruct the timestamp column.

Removing the target column
#

Entity Timestamp
A 1
A 2
A 3
B 1
B 2
B 3

Removing the target column makes this problem impossible to solve. We’re left with only the entities that were measured and the time of measurement, but no measurement, which makes the two other values useless.


Reading technical books

Question
#

Why should you read technical books?

Answer
#

Because they can teach you. Good technical books will expand your understanding of the topic covered in the book. It will clarify concepts you had trouble grasping before, allowing you to make good use of this newly acquired knowledge.

Because they give you more abilities. As you acquire new knowledge, you can make use of it. This lets you do things you could not do before because of this lack of knowledge.

Because they can change you. If you read about someone else’s approach to problem solving, you may come to prefer their way of solving problems. By being convinced by the author, you may be led to change how you write code, what you think is important about building software, how you prioritize your work, etc.


Reading fiction books

Question
#

Why should you read fiction books?

Answer
#

Because they can motivate you. An exciting story to which you can relate may motivate you to try and emulate it.

Because they can make you think. Some authors have been alive for a lot longer than you have and they’ve had longer to think about certain topics to which you never really dedicated any time. Some may have acquired a deeper and broader understanding of a certain domain they can then use to turn fiction into an epic story.

Because they can help you be more creative. Creativity is in my opinion simply the ability to take what one already knows and arrange it in a way that is novel. Seeing how others arrange things they know in a new and interesting way can help you recognize where you may be too rigid and help you relax when being creative.

Because they can help you disconnect. Reading about someone else’s story is a great way to disconnect from our day to day life. If you take the bus, the subway or the train to go to work and back home, it is a great opportunity to spend some time disconnecting. The creation of a buffer where you are immersed in a different realm has had very calming properties on me.

Suggested series: All of the Warcraft/World of Warcraft books, The Three-Body Problem trilogy