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.

Dont wait

We spend a lot of our time waiting for shit to happen. It could be we are waiting for the bus to arrive at the bus stop, waiting for that cup of coffee or waiting for that friend to arrive for a lunch appointment.

In hindsight, it’s a such a tremendous waste of time. But here’s the thing. There’s nothing we can do about it. The things I mentioned are out of our control. It’s something that we have to learn to accept and let it happen.

Easier said than done, right?

I know. It’s difficult because I’m still struggling with that. As far as I remember, I like to control aspects of my environment so that I get what I want. However, age has this effect of showing you it’s just stupid. Attempting to control anything else but yourself will only make you miserable.

So… let’s give up our control and mindlessly wait!

Right.

It’s one of the stupidest choices you can make because you are giving up opportunities to grow.

For those who know me knows that I work as a software engineer. In this line of work, you can’t afford to stop. The moment you stop or get comfortable, you will be replaced by something new or fresh. Technology is progressing at an exponential rate. And this fact is what deter some people that I know from this line of work because it’s hard to have a decent life. At least based on what I’ve been told and personally experienced.

Even then, it didn’t stop me from falling into the trap of getting comfortable and doing what I already know. You see, I started out as a Java programmer, switched to C# and now wants to go back because I love that language more than any other languages I’ve used. Furthermore, I saw that it’s time for me to specialise.

But there was no action because I went with waiting. Didn’t go for courses any more or bothering to read up on the latest stuff. And I’m waited, stupidly might I add, for the opportunity to switch the programming language that I use. No more pet projects too.

And look at where it got me.

I couldn’t secure any job interviews with the companies I really want to join.

You might think this situation only applies to developers or engineering fields. Have to be very careful with that. Because, as far as I know, no business, field or industry remain stagnant for a long time. Everything is a fair game when it comes to disruption. Look at how Uber disrupted the transportation industry. Or AirBnb disrupted the accommodation business within the tourism industry.

So the question is, are you going to wait until the day you are disrupted and find yourself out of job?

I for one don’t want that to happen.

So, it’s time to start from scratch again to build up my experience with the programming language I began with.

And no more waiting!

This is why I’m spending time to read up on Java again and using it to build pet projects. It doesn’t matter if the project idea has been done to death by other programmers. The key thing here is that you learn how to code in that language again to solve problems. You have to demonstrate to your future employers that you can write in that language without issue. And the good thing is I’ve got my own startup idea that I want to work on with my friends. It will be a great opportunity for me to practice.

Maybe for your case, you are working in a highly-specialised field and it’s not practical for you to be having a side business or side projects to learn or relearn skills that you don’t really use in your day-to-day job anymore. But it doesn’t mean you can’t learn other stuff. There are many other things that you could learn to make yourself a more well-rounded person.

For example, in this day and age, emotional intelligence is the most important skill anyone should have. Unlike technical skills, no amount of courses or seminar is going to teach you emotional intelligence if you don’t actively practice it in real life with your friends, family or peers. I for one know that I’m no good with that and it’s one of those things I’m constantly learning during my day to day work and interactions. Because I know that if I don’t work on this, I will alienate a lot of people and make it hard for people to work with me to achieve some goals. I can’t wait for something really bad to happen before I start practising.

Or, here is another example. Maybe you find that you are a very creative and chaotic person. You don’t really plan anything out because it doesn’t seem to affect your work. Yay, you are a pantser of sort. high five Therefore, you don’t really bother yourself with it. But does it mean you wait for something bad to happen before you learn how to be organise?

Because you see, having the ability, or some resemblance of ability to plan, is very important to achieve goals or targets. I’m a pantser and acknowledge the importance of basic planning. I do that from time to time if not my work process will be very chaotic. And the ability to plan or be organise could be the difference between you and some other creatives who are trying to show secure some sort of contract, sales or opportunities.

So what you could do is to go for courses on planning or even do it in your daily life. Like your groceries. Or getting the tools you need to do your work. Or plan out your finances. Whatever it is you can find to practice planning, just do it.

Don’t wait for things to happen. It might already be too late. Do it now.

To grow, just 5 percent more

Personal growth is really just an umbrella term for improving oneself across different aspect. It could be your skillsets, knowledge, interpersonal relationship, emotional intelligence, and many more. Depending on the aspect that we want to improve on, we could go for short courses, get advice from friends and have them monitor our progress, or even learn it from videos indirectly.

Many times, we fell into the trap of attempting to grow quickly when we were at the beginning of that journey. There could be many reasons for that. The best reason I could think of is, impatient. The other reason is spite.

And I’m writing from my own perspective because those are the two reasons why I want to grow quickly despite it being irrational and not practical.

You see, it all stem from being hurt when someone points out a flaw, mistakes or something that you have or made. Then you feel like you want to shut them up for good and shove their words back down their throats. And so you went full swing into fixing the flaw or mistakes someone mentioned.

At first it would go well. You are happy to practice. But it won’t last long. The passion or the drive to change just fizzle out one day. Nothing sticks. Your old habits come back again. Mistakes happen again. And the other party wins.

Or in other words, you dropped out of the infinite game all because you don’t understand or get the real why you need to improve on certain things. You had failed to reconcile the purpose of the change with your personal ‘Why’. So, your attempt to change in such a short time is simply playing the finite game to achieve the goal of proving the other party wrong just because you don’t feel good about it.

Therefore, it’s very important to calm down, understand what was the issue and how you can reconcile with your personal Why. By that, I mean how does that change or growing in that specific direction helps you with your personal mission.

After that, you can actually make plans so that you can improve yourself at a steady pace. And to make that growth even more effective, all you need to do is apply 5% more effort, energy, attention or awareness in whatever it is you are doing.

The idea of 5% more was introduced to me two years ago by an ex-boss of mine. It was from the book by Michael Alden called 5% More: Making Small Changes to Achieve Extraordinary Results.

Back then, he was attempting to get all of us to be at the top of our game. To deliver quality work. To be more resilient when it comes to stress, etc.

So I bought the book and read it because I really wanted to be better then. Only managed to read till mid-way of the book before I gave up. Since then, I have moved on from the company, had to deal with multiple episodes of situational depression, and went back to a software development role. And in hindsight, fictional books are definitely more interesting.

But I digress.

Even though I managed to read half of the book, the idea behind it was simple. In whatever you do, all you need to do is apply 5% more of whatever it is you need to. Time. Energy. Attention. Focus.

Let’s put 5% into perspective.

You have already spent an hour on a task to create a report and you are about to complete it. Just the last page. However, you decided to call it a day and go home. You promise yourself that you will come back to finish that last page the next day. The next day comes and then new tasks came in that are of a higher priority. The task you promised to finish yesterday now sit undone. Later in the day, your boss tells you he or she needs that report on the desk in five minutes time. So you scramble to finalise the report. But because you are in panic mode, you forgot what was the report truly about and now you have to spend more time to understand it first before finishing that last page.

Now what if you have spend 5% more time on that report the day before. 5% more time isn’t a lot. Considering that you have already spent an hour on it and you are left the last page. 5% more translate to 3 minutes. If you had spent that 3 minutes the day before, do you think you would suffer now?

And what about 5% more energy, attention or focus? If you apply it to your tasks, do you think the end result will be better? Maybe it could be a simple adding of margin to a report. It doesn’t take a lot of effort right? But it could potentially make it easier to read or more presentable. Your client could be subconsciously impressed. Or maybe you could have picked out several spelling and grammatical mistakes in your writing by applying 5% more attention to details.

If you are consistent with the application of 5% more as part of your personal growth, you may just find yourself putting out high quality stuff without even thinking about it. All because you have trained that muscle well.

Not to brat but this application of 5% more is how I am able to write better, cleaner codes than my colleagues despite being younger than them without being intentional about it and write out test cases that fulfil the criteria without much thoughts.

Give yourself permission to experiment

As humans, we have always prefer what’s familiar over what’s new. It’s just so ingrained in our psychology. After all, new means unknown and that automatically translate into scary.

Now, we could probably draw on our past experiences to make some decisions to approach what’s new. However, there will be times when we don’t have enough data points to make that decision.

When that happens, there will be a couple of scenarios that could happen. For some of us, we will hesitate or freeze up completely. Then there will be those who is able to overcome their initial fear and come to a decision. Later, they’d probably second guess themselves until the day the result of their decision became clear. And then there will be those people who are so confident of their ability to make a good decision and stick to their gun going forward even when things go wrong.

This is also related to why some of us simply never liked the idea of experimentation. Being a trailblazer is just not their cup of tea.

And it’s totally understandable.

Experimentation means subjecting yourself to the unknown or doing something that you have never done before. It’s scary. A big part of the fear could easily stems from you caring too much about other people’s opinions. You are afraid that when you fail, people will laugh at you, make you look bad especially if it’s at the work place. Or it could be that you are afraid the higher-ups will use that failure to justify not giving you bonuses or think you are not a competent employee. Or, it could be that you really have no self-confidence.

As a result, you will end up finding excuses not to do that work.

I know because there were times when I simply dare not venture out to do something new or exciting. I didn’t want to fail at the new task.

But what do you think happens when you don’t experiment especially if you are a creator of some sort? Software, textual content, photographs, videos, it doesn’t matter.

By failing to experiment, you minimise the chances of you making mistakes. When you don’t make mistakes, you simply don’t get a chance to learn from those mistakes. So no new perspective of how things could or should be. No new experience to gain in order for you to share.

And before you know it, you have stagnated. You would have failed at being a creator and dropped out of the infinite game called personal growth.

For me, I don’t want to drop out of that game just yet. Thus why I switched up my writing from journaling mode to writing these kind of content. And yes, I was afraid that I would fail at the start. But I kept going. It’s also why I tend to ask for new and fresh stuff to do at work, taking into account the team’s bandwidth and the priority of my current tasks. And there were just times I actually second guessed myself when I hit a few roadblock and there’s the deadline breathing down on me. For example, I would ask myself why did I choose to take on implementing something new. But when I finally pushed it through and solved it, that feeling is really wonderful.

So give yourself the permission to experiment. To fail so that you have the chance to pick yourself up and try again.

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.