More personal development

Since my last update, I have found a new hobby that took up vast majority of my free time.

This new hobby came about by accident when I started working on an IoT pet project using Lego. I wrote an article that documented what I have done.

From there, I expanded out to build another IoT system, which is a Smart Gardening system to water my plants. The Smart Gardening system turned out to be the largest pet project that I have ever endeavoured. I had to break the project into multiple phases and parts, which allow me to write a series of article documenting everything. They can be found here:

  1. Phase 1 (Start of the project)
  2. Phase 2 Part 1 (WiFi Exploration)
  3. Phase 3 Part 1 (Water Pump Control Exploration)
  4. Phase 3 Part 2 (Water Pump Control Implementation)

And the best part about the Smart Gardening system is that I’m not done with it yet.

Now, this is not without any underlying reason. I saw that there is a gap in terms of IoT skills and I wanted to fill that gap to make my contribution for my current employer. At the same time, I also wanted to demonstrate and prove to myself that my creativity is beyond just writing.

It also got me down another path of exploring building my own electronic circuit. It became a project on its own that I document it here. The end goal that I want out of the project was to expand on the Smart Gardening project.

The good thing that came out of all this is that I have a better understanding of IoT and electronics in general. Combine that with my writing and software engineering skills, I think I can contribute in many ways to make people’s life easier and better than before.

With that, I’m signing off here.

Reflecting on my first pair programming interview

For those who don’t know what is pair programming, it is basically a software development technique where two developers/software engineers work together on the same machine. At any one time, one would be doing the actual programming and the other would be reviewing the written code. In both cases, communication between the two developers/engineers is very important.

Pair programming is usually done at some companies who want shipped codes or software that has fewer defects. After all, defects on shipped code could mean higher cost in terms of quality checks and troubleshooting.

And for some companies pair programming is also done as one of the interview stages. One of the purpose is the interviewer to figure out if you are suitable for the position. Interviewees are judged on their soft skills such as communication, ability to problem solve, plan and think critically, and technical capabilities. Another purpose would be to determine if the interviewee is able to work with other developers in the company.

Pair programming interviews are also there for the interviewees to understand who they are working with and how they may have to work in the company. It’s a good chance to find out if he or she is suitable for the applied role.

For me, despite working as a software engineer for five years now, I have never done pair programming. Most of the time, I work alone or in a team. And when it comes to interviews, the toughest kind I get are those where you have to do technical quizzes, solve programming challenges or do whiteboard problem solving.

So having to do a pair programming interview for the first time is both exciting and scary. And sad to say, I didn’t pass the interview.

Towards the end of the interview, the interviewer gave some really honest and constructive feedbacks that are helpful for my personal growth. I thank him for that and for the time he spent on me.

At the same time, I feel really shitty about the interview failure, which is expected. But my mood is now about to fall off the cliff. For some context, I have been struggling with burnout for months, depression and forms of anxiety for the last four. My mood was only just stabilising after three weeks of anti-depressants.

Don’t get me wrong, I’m not looking for any sympathy nor trying to guilt trip anyone. I’m just sharing what I am feeling and have been through.

So what went wrong and could be better?

Low to average technical skills

My JavaScript fundamentals are weak. I was having issues with lambda and anonymous functions as well as some other fundamentals like passing of data. It prevented me from figuring out the solutions to some of the problems I encountered. The last time I did any decent amount of JavaScript was two years ago and even then, I only used the surface of what the language is capable of.

Making matters worse, I had to work with ReactJS, which is a JavaScript framework for developing UI. I also have to work with Redux, which is another JavaScript framework for state management. And it was no fault of the interviewer. I indicated that I want to do frontend development with ReactJS during the previous interview with one of the company’s employee.

At the end, a couple of hours spent every night for the past four days to learn ReactJS and Redux simply isn’t going to cut it.

But it doesn’t change anything. If I still want to be a frontend developer and be good with ReactJS/Redux, I have to keep learning and practice. And develop some apps using those frameworks along the way.

Failure to comprehend actual requirements

This is really on me. I was given the chance to read about the requirements and end goal of the exercise. The key focus areas were listed down in the document. But for some reason, I didn’t realise that I hadn’t really read and understand the whole thing before jumping in to come up with a solution. I could only attribute it to stress and anxiety.

Due to that, the solution I came up with was half-baked and caused major problems further down the development process.

Therefore, I really have to work on improving my resilience to stress and directing the brain to focus better. This is the only way for me to be able to understand future situations more clearly and come up with a better solution.

Overengineering

In software development, there are three principles that all developers should follow for higher productivity. They are:

  1. DRY => “Don’t repeat yourself”
  2. YAGNI => “You aren’t going to need it”
  3. KISS => “Keep it stupid simple or “keep it simple, stupid”

And because of my failure to comprehend the actual problem, my half-baked solutions caused me to violate principle 2 and 3. There were additional React components that I created that weren’t necessary and made the codebase more complex.

I’ll admit that I violated those two principles a lot of time during my five years of software development experience. It is because I like to provision for future uses. Breaking those principles served me well so far because I have experienced scope creep that requires components or functionalities that I thought of in advance and had implemented. That means, I didn’t need to spend extra effort to develop and refactor my code later.

Going forward, I really need to train myself on going for the simplest and fastest solution to any problem.

Took too long and prevented successful gauge of my skills

Because of overengineering, it took me more than twenty minutes to develop the application foundation. After which, I had to redo some of my codes in order to support certain functionalities that I have overlooked because of my failure to read and comprehend the requirements. More time was wasted.

Therefore, I was unable to implement the other features of the application that would have allowed the interviewer to determine my understanding of ReactJS and Redux.

Final thoughts

Self-awareness is actually a very important skill to have. With it, you might be able to determine if you are suitable for a given role or job.

In my case, the combination of my highly-sensitive nature, under-developed stress resilience, highly self-critical and low self-esteem meant that I hadn’t really been able to function at the level required for a so-called experienced software engineer who’s been at this job for at least five years. I’m simply not ready yet to take on roles that require me to be a consultant or a quick thinker.

The other thing that I figured out was that the number of years of experience isn’t really a good gauge of your skills. The interviewer did point out that despite my years of experience, I still wasn’t able to grasp ReactJS even after 24 hours (spread over four days) of reading and practice. He implied that he was able to pick up the framework within two days instead of four.

With that, it could mean that either my fundamentals are very weak or that I’m simply not smart enough to pick up something fast. Or maybe both. For the former, I could work on it by going to read and study the fundamentals again. For the latter, well, I can only work harder than most to achieve the same skill level.

Either way, I’m just glad that I’ve been through it and knows what’s out there. There are valuable lessons to be learnt here, which is all that matters.

All in your head

Distraction.

It’s the thing that could destroy your productivity and send you down the rabbit hole of wasting time and achieving nothing. You will find yourself doing everything else but the one thing you need to be doing.

And you know what? The biggest problem isn’t with distraction. It’s not that video game. Not that Netflix show. Not that book. Rather, it’s you. You are the problem. You choose to play that video game, watch that show or read that book.

So why did you make that choice?

Is it because you lack the discipline?

Or maybe be that the thing you should be doing doesn’t have a strong enough draw to pull you away? Maybe it’s not as important as you think it is? And don’t kid yourself and be all defensive. After all, if it’s important, then why aren’t you doing those things? Why are you allowing yourself to be distracted?

It’s also a conversation that I’m having with myself every now and then.

As much as I like to think I have the discipline to work from home, it’s a lie perpetrated by me on me. The truth is being distracted is a recurring theme. There were so many projects that I want to do but ended up not doing them. I went with playing video games, stopped thinking like a writer and stopped thinking like a designer.

I even told my friends that I couldn’t find the time or concentrate on my stuff at home and needed to work outside. There’s just too many distracting stuff.

One of them said, “it’s all in your head”.

I won’t say I’m surprised. From what I have learned so far, it’s the truth. And the only truth when it comes to productivity.

And that’s a great reminder on who’s really in control.

No one else can make you concentrate or focus. You are the one who decide whether you can concentrate and do the work. Everything else that you say or fight against is just you finding an excuse.

What if you really think that your home has a ton of distractions and you can’t prevent yourself from utilising those distractions? Then go out there and find an environment to work in that allow you to focus. Otherwise, remove all those items in your house that distracts you. Move those distracting things, be it television, your internet router/access points, etc. to a storage unit. Smash them to pieces if you need to. You can always buy a new one later. It’s all about creating that environment you need to work.

And watch what you say to yourself. A lot of times, many of the comments or complains you make are just you being fancy and refuse to do the work. So shut up, and make a plan and execute.

Focus on playing the infinite game

There are two kinds of games. Finite and infinite. Finite games are games that we all know about. Sports for example are finite games. In each sport, there’s a set of rules and end goals. Once you follow the rules and meet the end goal, you win the game. Failure to do so, you lose the game.

And what about infinite games?

Infinite games are games that have no end goal. It just goes on and on until the players in the game drop out because of the lack of resources. And by resources, it could be anything: mental energy, money, time. Some examples of infinite games are the game of life and your personal growth.

You might be wondering how is personal growth an infinite game. For the uninitiated, it might be a finite game.

Let’s take the scenario of you deciding to go for a quick course to get a new skill. It has a set of rules. You need to sign up for the course and that is the most important rule. Then maybe there are terms and condition you need to follow. And what about the end goal? Completing the course and get the certificate.

But, it’s mostly an infinite game because you don’t stop at that one course, right? Everyday, you will be experiencing new things and then learning something from those experiences. It doesn’t stop. There’s no end goal. You don’t win the personal growth game. If you have the slightest of growth mindset, you just keep growing personally until the day you run out of resources. By that, it means you are either too sick to continue or drop dead.

And that lead me to the next point.

In one of my previous post, I talked about the importance of knowing your ‘why’. It’s especially relevant now. Not only does it helps to reduce the odds of getting situational depression, it’s your anchor in this world. It enables you to play the infinite game because you have now found your purpose. So whatever you do from there will be to fulfil the purpose. Now, that is an infinite game.

Furthermore, knowing your ‘why’ will give you strength to ignore all the noise that you get from people you meet, especially now when there’s always something telling you how to behave, what to wear, what to eat, and who you should be.

When you focus on playing the infinite game of fulfilling your ‘why’ through actions, you will be happier and you also frustrate the people around you because they realise they can’t seem to influence you to do the thing they want. With that, they will lose out. And you will also command respect from people who understand the game you are playing.

However, that’s not to say it will be all bright and rosy. On some days, you will lose some, and on some days, you will win some. It’s frustrating. And that’s the nature of the game. Just do not give up. By giving up, you are dropping out of the infinite game.

Even then, it’s also important not to forget about the finite games of your life because they can affect the quality of your life in the short term or block you from progressing. For example, getting a house for your family, getting that degree that you always wanted, or finding a job to feed yourself. Just don’t make the finite games the only game you play in your life because they lead you nowhere good.

I know you might wonder what could you do if you don’t know your ‘why’.

There’s something else I believe to be an infinite game; identify and put your strengths in play whatever you do. Don’t focus on fixing your flaws because they only serve to take away your energy from the things that truly matter. Just acknowledge your flaws and get someone who can hide them for you in both your personal and professional life.

Be fearless about who you are

People who have an outward personality may not have the issue of showing the whole world who they are. They may come across as loud spoken, confident and sometimes just plain irritating. And there will be people who doesn’t mind having them as friends. For some of us, the more reserved, quiet and highly sensitive people, you can’t help but want to run away from these kind of people.

And it’s perfectly all right to do that.

What is not all right is when these reserved, quiet and highly sensitive people keep to themselves even when other people are insulting them, making snide remarks, or step all over them metaphorically.

It’s also understandable because these kind and nice souls didn’t want to hurt another person’s feeling or simply want to keep the peace. Another reason could be they are lacking the confidence or are just too self-conscious.

I’m like that too. Always hated bringing attention to myself. And didn’t quite like challenging people more senior than me. I’m highly sensitive and is an INFP.

But I’ve learnt that it’s important to stand up for yourself and speak up.

It’s only by speaking up and setting expectations, other people will know where you stand. If they respect you as a person, they will accept those expectations and leave you be. If they don’t, then it’s not your problem if they choose to keep picking a fight with you. You can either make your stance even firmer or find someone who can help you resolve the issue.

Admittedly, there are times when I utterly failed to set expectations or make my stances clear because of my fear of disappointing people.

And I remember quite vividly about how I actually ignore how another person saw me and make my stances clear. It was with my first two jobs that I actually made it clear about what I will do when it comes to my job and I don’t work weekends or late. I didn’t know why I said those things but somehow those words just came out. But of course the end result was pretty different. One respects it while the other kind of use it as a weapon against you.

Looking back now, I think I did good then.

But when it came my third job, I didn’t quite assert myself because I felt like I should be like my new colleagues. More proactive, hardworking, etc. And after having encounter people using what you said as a weapon against you, well, I didn’t want to feel the same way again.

But what happened was my boss then got very confused as to who I am because I stop asserting and being myself. Hell, even I became confused as to who I am. That time of my life was a complete mess.

And now at my fourth full-time job, I went at it differently. I sprinkled a little of what I will do and what I will not do every now and then. And there is no holding hold back when it comes to showing my emotions or attitude to certain things. So much so, I can come across as an asshole.

But you know what?

It actually made me happier overall. People also know where I stand on certain things as well as my strengths and weakness. This meant that when tasks are assigned to me, it fits me. Not only that, I’m perfectly fine with people pointing out my weakness or certain things I don’t do right. For example, if someone is upset that I don’t give a shit about certain things, I really don’t care. After all, if it’s something I don’t give a shit about, why should I give a shit about what you think or feel about me. But it doesn’t mean I don’t respect you as a person.

And by being fearless about who I am, I have come to acknowledge my strengths and weaknesses. I know that certain aspect of my personality give me certain strengths that others don’t have. And it’s far more effective to be doubling and tripling down on my strengths than attempting to fix my weakness. My strengths are what give me the ability to do the kind of work others can’t do.

With that being said, I’d also prefer my colleagues tell me they don’t do certain things too. The reason is simple. It’s so that everyone knows where everyone stands. And now I come to see for myself how it allows all of us to find ways to workaround the limitations and still deliver the end product.

So don’t be ashamed of who you are even amongst your friends and family. They may be mad at you for certain things you do but if they have truly accepted your flaws and can focus on your strengths, they will still be around. If they aren’t, then obviously they aren’t supposed to be part of your life.