Learn smart, learn from people's mistakes

SUNDAY, JUNE 14, 2020    

Generally I always believe in consistency. Have you ever wondered how did engineers are able to be so successful and capable to create their own compilers, the Vue.js framework or even to spearhead the technology behind some of the tech giants such as Spotify or SpaceX flight system? All greatness starts as a beginner like how Michael Jordan was once cut from his high school basketball team. But through consistency, grit and some little tweaks in his focus was he able to set himself up for success. This is parallel to your journey to understand technology as well. I believe learning is a process and a journey for the long haul. And mastery in the technology domain is the outcome of the many small steps taken to learn and master your fundamentals.


You can check out my learnings from Michael Jordan that has set me up towards the path of success from my article here.


In this article today, I’ve curated some interesting articles I’ve read the past two weeks. You can expect to get a list of interesting articles biweekly for this entire year 2020 so do keep watch for this space.


There are 4 broad topics we will be touching on:


  1. General topics
  2. Technology tools
  3. Technical Scalability
  4. Technology and management



General topics



Development pipelineSource from medium


Learning is a constraint problem. Find out what factors are causing the constraint, remove the constraint and increase the learning.


Conventional wisdom tells us to help others learn with feedback, but the more productive approach is to help the person reflect on where they want to go: their goals and success factors. - Peterson


Motivation and insights


The key point of this article is to communicate with clarity and direction. Use a framework to understand and break down the different constraints of an individuals current development process. Does he know what he wants to develop in? Is he motivated to do so? Does he have the skills and knowledge to develop? Does he take on the opportunities to try? Are they feeling a sense of accountability to what they want to achieve with the company?


Ask questions to help them find clarity in their own development process, and your goal isn’t to improve your insight or motivation for them. As indicated in the article, the learning happens in their head, not yours. As you attempt to help them find clarity, understand that learning improves when the constraints are removed. Identity the possible constraints faced by the individual contributor using the framework by David Peterson


After all, everyone wants to be in a team where they know the team lead is seeking to groom his people and help them to achieve their own goals. If you want to achieve big goals, you need a team. You can only sustain a team if you prioritize people first. Your actions and decisions has to reflect this message.



This articles talks about the courage of people that tries things that are not conventional and often times looks silly. But these ideas often give birth to new possibilities and give people fresh perspectives to tackle a problem differently.


We only expand the realm of the possible when individuals dare to try things that seem impossible.


Here’s a plaque that sits in front of the Rotary Rocket in Mojave


Source from the article indicated above


This is a community of engineers that wants to come together to create solutions to problems that singapore might be facing! And this is just one of their ways to spread positivity through actions, words and prayers. Really Thankful to be able to witness people giving time for the community!


What is BOBB about



Knowledge compounds. But information that will no longer be relevant after a month or a year are called expiring information. And expiring information are not knowledge at all. One such example is news. Daily news should take up the minimal amount of your time. Its expiring information that creates a false map and sense of knowledge.


One of the ability to compounding knowledge is to match patterns. As you get to consume information that doesn’t expire or expires slowly; is very detailed, and we will spend time think about it. as we think about it we can match patterns. This is how you learn to see what other people are missing. The longer you match patterns and acquire knowledge, the more advantage you get.



As a software engineer, I commonly have issues designing my site or features. Design has never been my strong suite. Not sure if this is the same issue for my readers here!


I happened to chance upon this site and they curated a whole lot of sites and libraries that already have ready-to-use aesthetically pleasing design tools and icons! Really useful to level up your site!


How to handle increased stress and build resilience


The resilience that we seek to build to help us face the pending storms before us is built on the inside. Often times it is the perspective towards stress that either paralyzes you or free you from its chains. Rather than to find quick external fixes such as productivity tools to help us deal with stress. The first step is to identify your default outlook towards stress. Some questions to ask ourselves and to recognize our stress outlook:


“How can I use the energy created by feeling stressed about this new job to better prepare for it?” or “What can I learn from the stress about my increased workload that will help me better prioritize my time?”


The second part is to always focus on what you can control. And you will start to recognize that many things are not in our control - Financial crisis, other people’s behavior, weather or just bad timing. Focusing on whatever resources you have placed before you and understanding what you are your possible responses to your situation definitely helps to craft yourself a way out of your situation.


In the perspective of software engineering, this is always crucial in development work. Often times you will face many blockers in which you have to be composed and clear headed to understand what are your resources, time, energy and other pending tasks at hand. Then prioritize your work based on urgency and impact. Then you can proceed to investigate either an issue or a possible solution to a problem you are currently facing. Either ways, one thing is most essential: Clarity of thought. Once your head and thinking goes muddy, you often find your problems magnified and bigger than they actually are.



Don’t just blindly read and copy information without internalizing the solution first. That is just pure laziness and laziness will not get you very far. It is understandable that crucial thinking and genuinely analyzing a solution can be tiring, but that is necessary for your own development! So put your brain to write! You’re too gifted by the Creator to just let that talent slip away!



Really insightful and candid article that addresses why a reader may choose to pause or deliberately breaking their flow so to write down an information. Similar to another article i’ve written, it is crucial to take deliberate pauses to internalize the information that you are taking in. Take that time to understand the flow and writing pattern of the author. Is that a bigger picture that the author wishes to convey. Find out what do you truly want to find out from the piece of information you are reading. Glimpse at the title and the table of content. Draft out a rough idea of what you think this book or article may be, and then take deliberate notes to connect those dotes. This is crucial in the technology space if you wish to understand the ever new information that will come your way. Ideally, we want to reach a state where we are able to move alongside the forefront of the industry and be able to participate in the problems that you are interested in. And at the end of the day, be able to path a clearer route for the next generation developers.


Pay it forward. Whatever you learn, seek to educate the next generation.




Technology tool and insight



This site allows you to create diagrams from code! This is super amazing and is really fast to get your sequence diagram up in no time! Definitely will use this in my own personal technical journey!



If you have to write code comments, ensure that you are writing comments to document down WHY you did your code in this particular way. Do not write comments as a way to get around laziness or just plain bad variable naming. Comments to write down your reasoning and ideally the use cases can help to give clarity when you are revisiting your code after a year.


  • Avoid using comments to explain what a code do. It would have been neater if you use refactor that code into a function with a meaningful name, and you can see how cognitively easy it is to understand that same snippet of code now.

if (customersFirstOrder) {
    // Apply free shipping
    orderCost = orderCost - shipping;
}

if (customersFirstOrder) {
    ApplyFreeShipping();
}

  • Avoid using comments to explain conditions

// This order has an outstanding payment
if (order.invoiced && !order.paid) {
    SendReminderEmail();
}

var orderPaymentDue = order.invoiced && !order.paid;
if (orderPaymentDue) {
    SendReminderEmail();
}



Technical scalability



The difference between scaling HTTPS and web sockets:


HTTP requests follows a request/reply pattern. You don’t expect the next request from the client to come back to the same server. Even if you wish to, there are sticky session mechanisms to be utilised. Web sockets on the other hand are stateful and once the connection is established, it will persist. This makes it powerful as a real time application but it is also what makes it difficult to scale. To deal with sockets’s pubsub feature, you need a pubsub broker.




Technology and management



1. Actions speak louder than words. Data speaks louder than actions.


Leaders want someone who will come back with research, data and finding on whether something is worth doing or not. Especially at a small startup.


2. Functional skills may be necessary in early leadership journey but what got you here wont get you there.


One of the key skills of a good developer is to recognize programming best practices that are applicable to the implementation at hand. Find out what principles to follow, and then what algorithm will best solve a tricky code situation.


But in management role, having the functional skills are not as important as having a vision, knowing and understanding what needs to be done. Then bring people along the journey on why we do what we are doing, When we recognize this, then we will spend more time explaining the why behind whatever implementation that is needed of upskilling ourselves just so we know how to do the team member’s job.


3. Strategy and execution are equally important


Strategy brings clarity. Execution without strategy is like one shooting in the dark; exhausting efforts to see no tangible results. This not only waste time but also spends morale among team members. Understanding the strategy is crucial for us to communicate strategy in a way that is relatable and motivating for others.


4. Not all processes are evil


Processes communicates consistency. And consistency in good practices helps to align our execution with the company’s strategy. Processes help to track efficiency and effectiveness of the team. It gives a sense of how well we are doing through weekly sprint reviews, and to track blockers every member may have.


You cannot know everything if you are trying to step up into a new role to challenge and push yourself. Being placed into a position where you feel like you dont know many things may be a good indicator of you pushing yourself for growth and personal development. Mistakes may be made along the way but you just got to stay curious and be willing to improve everyday.



Find out how to reduce long-live pull requests. This ensures that we reduce the time for tasks to be in development and so be able to deploy quicker with shorter iterations. When we are using the right tools to observe the length of different pull requests, we can shift some of our daily standup focuses to discuss how to handle these pull requests in particular - are there blockers to address? Are there programming practices to share and align and thus learn from for future iterations?


I thought the able to check stale pull requests can be useful to check what happened to these pull requests.


Source from sourceLevel


When you are tracking the blockers for these pull requests or tasks, it will help to decrease lead time (time to review and complete a PR) and increase throughput. This increase in throughput may translate to increase in deployment frequency