Sharpening Your Axe: The Key to Achieving Lasting Success in Your Career and Life

“Give me six hours to chop down a tree, and I will spend the first four sharpening the axe.” – Abraham Lincoln.

“We don’t rise to the level of our expectations; we fall to the level of our training.” – Archilochus.

These two quotes may seem enough to make a point, but let’s dive deeper. While powerful quotes inspire us, it is reflecting on their meaning that can lead to actual growth and understanding.

We constantly face expectations, deadlines, and urgent tasks in our professional and personal lives. It’s easy to feel compelled to jump into action immediately, with no time to plan, set the stage, or improve ourselves.

However, this mindset can be counterproductive in the long run. By hastily making assumptions, we are more prone to mistakes, which can lead to additional problems and perpetuate a vicious cycle.

In software development, success hinges on clear requirements, comprehensive user stories, thorough documentation, well-defined criteria for completion, and rigorous testing. By investing time in these areas, software engineers effectively sharpen their axes, leading to a more efficient development process and fewer mistakes.

In the book “Accelerate: Building and Scaling High-Performing Technology Organizations,” Nicole Forsgren concludes: “High performers understand that they don’t have to trade speed for stability or vice versa because by building quality in, they get both.”

While this advice applies to teams and organizations, it’s also crucial for individuals to invest in personal growth. Embracing challenges and putting ourselves in uncomfortable situations can lead to meaningful development.

Despite our busy schedules and seemingly endless responsibilities, prioritizing self-improvement is essential. A valuable piece of advice is to “pay yourself first.” Dedicate the first 30 to 60 minutes of your workday to learning something new, deepening your expertise, or refining your existing skills.

As a people manager, encouraging your team members to invest in themselves has numerous benefits for team performance:

  1. Broad knowledge leads to diverse perspectives in discussions.
  2. Deep expertise enables the implementation of more efficient solutions.
  3. Proficiency in tools boosts overall efficiency.
  4. Keeping up with industry and market trends gives your team a competitive edge.
  5. Knowledge fosters critical thinking.
  6. People are happier when they feel they are improving, which promotes retention.

We can achieve significant progress when we strive for personal growth and adhere to best practices as an organization. It may be slow initially, but as we build momentum, we become unstoppable.

In conclusion, take the time to invest in yourself and encourage your team to do the same. Embrace continuous learning and growth as both individuals and organizations. Start by dedicating a portion of your day to improving your skills and knowledge. Watch the ripple effect on your personal success, team performance, and overall organizational achievements. So, don’t wait any longer—begin your journey toward self-improvement and excellence today. Remember, every step you take towards sharpening your skills and tools will bring you closer to realizing your full potential and achieving lasting success.

The Value of Thinking Outside the Box: A Tale of Two Employees

An old employee, who has been working for the company for ten years, knocks on the boss’s door with a complaint. The employee mentions that he has been arriving half an hour early and leaving half an hour late daily, working hard, and never complaining. However, a new employee, who started six months ago, has already been promoted and earns more without putting in extra hours. The old employee feels this is unfair and wants to address the issue.

The boss thinks for a minute and says:

– OK, before we continue this conversation, do me a favour: Today is Friday, it’s a hot day, and we’ve had a good week. I’m considering treating the staff to a fruit salad at the end of the day. On the next block, there is a greengrocer. Buy bananas, strawberries and oranges, please.

The employee, good and hardworking, agrees and leaves. About 40 minutes later, he returned sweaty and breathless and said: Boss, unfortunately, the grocery store is out of oranges, but they will get a new delivery at the end of the week, so we will have to postpone until Monday. I already put it on my calendar to go there early.

The boss thanks him and says:

– OK, sit here and watch.

Next, the boss calls the new employee into his office and tells him the same story about the fruit salad. The new employee agrees and leaves without saying anything more than “OK.” This leaves the old employee puzzled.

Less than 10 minutes later, the new employee came back and said:

OK, boss. I called the grocery store, and they’re out of oranges, but then I explained what we’re trying to do here, and they suggested using tangerine, which will give a very similar effect and some people even like it better. I told them how many people we have, and they gave me a quote. I thought we would need disposable cups and spoons too, so I called the corner store and got a quote for that too.
It must take about 40 minutes to go to the grocery store and another 10 to the corner store. Plus, we need to consider the time it will take for an employee to prepare everything. So it could be a little expensive for the company. I called the pastry shop in the neighbouring community because I knew they sell ready-made fruit salad. I got a quote, including delivery, and buying directly from them is cheaper. We can even add ice cream for the exact cost as it would be for us to buy and prepare it ourselves.

As the new employee confidently presented his detailed plan, the old employee watched in disbelief. The new employee’s innovative and proactive approach starkly contrasted with the old employee’s unyielding dedication to output and hours of grunt work.

The boss smiles at the old employee and dismisses the new one just by saying:

– Order it with ice cream.

As the old employee left the boss’s office, he realized it wasn’t enough to put in the hours and work hard. He needed to adapt to the changing demands of the workplace and embrace innovation and proactivity.

Who are you in this tale?

Work vs Toil: How to Work Smarter, Not Harder

We all know the feeling of being bogged down by toil – those repetitive, time-consuming tasks that require little mental effort but eat away at our productivity. This post will explore ways to reduce toil and work smarter, not harder.

Use Tools Correctly and Efficiently

For most of the audience of this blog, work involves spending much of our day typing and editing text. Mastering our tools – Microsoft Word, Google Docs, vscode, emacs or vim – is essential to our productivity. By learning our tools’ default shortcuts and features, we can save ourselves hours of wasted time. Copying and pasting, multi-line selection, searching and replacing, and moving efficiently between sections. This should be muscle memory and not consume either time or mental space.

Use Better and Modern Tools

Expanding on the section above, using outdated tools is often counterproductive. As more and more people use modern tools, new features are created to address everyday needs. For example, installing software on a Linux server used to be an extremely laborious process. However, modern Linux distributions now have package management systems that trivialize the process. By adopting modern tools, we can save ourselves hours of toil.

Now, I want to drive this point home with some points why you should put the effort to leave your comfort zone and learn new tools:

  1. Increased efficiency: Modern tools are often designed to be more efficient and streamlined than their older counterparts. They may have better user interfaces, more intuitive workflows, and more advanced features to help us work more efficiently and reduce toil. For example, newer text editors may have better search and replace functionality, faster loading times, and better support for various programming languages.
  2. Improved collaboration: Modern tools often have better features like real-time editing and commenting. This can be particularly useful for remote teams or working with clients in different locations. So we can reduce the need for back-and-forth communication and improve the speed and accuracy of work.
  3. Easier integration: Modern tools are often designed to work well with other modern tools. For example, a modern project management tool may integrate well with a modern time-tracking tool, enabling us to streamline our workflow and reduce toil. Using modern tools designed to work together can reduce the need for manual integration and reduce the risk of errors or inconsistencies.
  4. Staying competitive: Employers and clients may expect us to be proficient in the latest tools and technologies, and failing to keep up can lead to missed opportunities or lost business. If we stay up-to-date with modern tools, we can remain relevant and competitive in our field while reducing toil and improving the quality of our work.

Automate Repetitive Tasks

Automating repetitive tasks can save us a significant amount of time. Whether using a tool like autokey to create shortcuts or scripts to automate larger tasks, the benefits of automation are clear. Use the Pareto Principle to find the 20% of things you do that take up 80% of your time and automate those tasks.

Think of it this way: Suppose a software engineer needs to run a suite of automated tests on their codebase before deploying it. Running these tests manually can be time-consuming and error-prone. However, by automating the testing process, the engineer can save time and improve the overall quality of their work. This can be achieved using a continuous integration (CI) tool like Jenkins or Travis CI to run the tests whenever new code is committed automatically. The CI tool can be configured to run the tests on various environments, such as operating systems or browsers, ensuring the code works correctly across different platforms. The engineer can also receive notifications of failed tests, enabling them to identify and fix any issues quickly. By automating the testing process, the engineer can free up time for more critical work, such as developing new features or improving existing ones, while improving the codebase’s overall quality.

Delegate Tasks

Delegating tasks can be a tricky balancing act. One must consider factors like the importance of the task, the trustworthiness of the person or entity we’re delegating to, and the cost of our time versus the cost of having someone else do the task. However, delegating can be a powerful way to reduce toil and free up our time for more critical work.

This is also applicable in our personal lives in addition to our daily work. I still have to read the book Buy Back Your Time: Get Unstuck, Reclaim Your Freedom, and Build Your Empire by Dan Martell. But I listened to a podcast interview with him, and I was inspired.

Plenty of services will allow you to hire people in the gig economy to help you carry tasks, like Fiverr (which I used several times), TaskRabbit and Fancy Hands.

In a professional setting finding someone to delegate tasks can be challenging. Make sure you consider their skill sets and workload. Look for people who are reliable and require little direction. Or people who are self-starters and highly motivated and will only need to be taught once.

Create Checklists and Standard Operating Procedures

Maybe building up on the task delegation point, creating clear documentation and procedures can significantly reduce the toil involved in our work. By creating checklists and standard practices for everyday tasks, we can reduce the chance of mistakes, save time on training new employees, streamline our workflow and make delegation much more effortless.

In conclusion, by adopting these strategies, we can significantly reduce the toil involved in our work and work smarter, not harder. So take the time to streamline your workflow, automate repetitive tasks, and delegate where possible. Your productivity, your health, and your career will thank you.

Deliberate Practice

The saying goes, “practice makes perfect,” but is this true? Many people drive daily for 20 or 30 years and are still terrible drivers, while others claim to have “15 years of experience” but are technically weak. Practicing without a specific intention or focus is unlikely to bring improvement after the initial learning.

In the 1960s, psychologists Paul Fitts and Michael Posner identified three stages of learning: cognitive, associative, and autonomous. The cognitive stage is when you assimilate knowledge and learn the basics of a task. The associative stage involves making fewer mistakes and needing less mental effort to perform the task. The autonomous stage is when your skills become natural, and you can perform the task without much effort. Unfortunately, many people plateau at the autonomous stage while experts keep improving.

As a technology professional, you know that simply practicing your craft without a specific intention or focus won’t necessarily lead to improvement. To get better, you need deliberate practice. Here are some actionable items to help you implement deliberate practice:

Identify the key skills you need to develop

Take a look at your job description and identify the critical skills that are required for your role. Make a list of these skills and prioritize them based on which ones are most important to your job.

Set specific, measurable goals

Once you have identified the key skills you need to develop, set specific, measurable goals for each. For example, if one of your key skills is coding, you might set a goal to solve 5 LeetCode problems per week for the next month. Using coding challenge sites like LeetCode can help you practice your coding skills and track progress through their platform. Set a goal that challenges you but is still achievable, and track your progress over time to see how much you improve.

Seek feedback

Feedback is essential to deliberate practice, and there are many ways to get it. Here are some suggestions:

  • Peer review: Ask your colleagues or peers to review your work and provide feedback. This can be especially helpful if they have more experience in a particular area than you do.
  • Manager feedback: Schedule regular check-ins with your manager to discuss your progress and get feedback on your work. This can help you identify areas where you need to improve and set goals for the future.
  • Mentorship: Seek a mentor in your field who can provide guidance and feedback on your work. This can be a great way to get more personalized feedback and learn from someone with more experience.
  • User testing: If you’re working on a product or application, conduct user testing to get feedback on how people use it. This can help you identify areas where the product can be improved and ensure that it’s meeting the needs of your users.
  • Online communities: Join online communities related to your field, such as forums or Slack channels, where you can ask for feedback from other professionals. This can be a great way to get feedback from a broader range of people and learn from different perspectives.

Practice deliberately

To practice deliberately, focus on specific features of your work and practice them at a higher level than you’re comfortable with. For example:

  • Coding: If you’re a programmer, focus on writing more efficient code, tackling more complex coding challenges, or exploring new programming languages.
  • Design: If you’re a designer, focus on refining your skills in typography, colour theory, or user interface design.
  • Communication: If you’re a project manager, focus on improving your communication skills by practicing active listening, giving and receiving feedback, or presenting to stakeholders.

Deliberate practice should push you out of your comfort zone:

Embrace discomfort

Deliberate practice can be uncomfortable and frustrating, but it’s essential to growth. When you push yourself out of your comfort zone and practice challenging things, you create new neural pathways in your brain. This allows you to develop new skills and become better at the things you’re practicing.

Embracing discomfort also helps you develop resilience and a growth mindset. When you encounter challenges or setbacks, it’s easy to get discouraged and give up. But if you embrace discomfort and see it as an opportunity to learn and grow, you’ll be more likely to persist in facing difficulty and overcoming obstacles.

In conclusion

Deliberate practice is essential to becoming a better technology professional, and it requires identifying essential skills, setting measurable goals, seeking feedback, and practicing deliberately while embracing discomfort. You can develop new skills, improve your work, and achieve your career goals by taking action on these items. So, take the first step today and start implementing deliberate practice in your work. You can become the best version of yourself and achieve success in your field with dedication and effort.

References

Shift Left

Note: This article was originally written for my blog in Portuguese back in 2021.

Shift Left is a practice in software development where the aim is to find defects as early in the process as possible. A study from NIST shows that the cost of finding and fixing defects increases exponentially the farther it is found in the development cycle. Therefore, the ideal scenario is to find defects as early as possible, ideally in the design phase.

As a DevOps professional, a large part of my work has been focused on code quality in our business unit, which primarily develops code for embedded systems, FPGAs, industrial automation, and industrial robot controllers. Given the nature of our products, the cost of developing high-quality code is immense, and each release cycle is exceptionally long.

To solve these problems, our team has been working to implement a Shift Left approach by following these steps:

Writing Unit Tests Concurrently with Code

Writing unit tests concurrently with the code is the most critical part of Shift Left. Developers should not wait for the next phase, testing, to see if there are any obvious bugs in the code. Instead, most testing should be done in the implementation phase through unit tests that must be run constantly. This also helps ease the test team’s workload and lets them focus on more important things than testing the basics.

Code Review

The next step is code review. Developers should create a branch, write the code (including tests), and send it for review instead of merging it directly into the trunk. Code review allows for the early detection of bugs and can prevent these issues from propagating to later stages of development, saving time and resources. Code review allows developers to learn from one another and share best practices, resulting in better code quality and more effective teamwork, again addressing them on the left. See Google’s best practices for code review.

Pre-Commit

Human beings don’t like to have their work criticized, so pre-commit hooks can reduce criticism’s human element. Using pre-commit, a bunch of tests can be pre-programmed to run in the code about to be committed. Linters, tools that check for leaking secrets, styling tools, and others can be used. Pre-commit does not allow code to be pushed if it does not pass QA on the developer’s machine. It ensures that the basics are covered before the code goes into review.

Text Editor and Plugins

The text editor/IDE that the developer uses is as far left as possible. Developers can use various plugins and tools to improve the code. For instance, Microsoft Visual Studio Code is an excellent editor with many useful plugins, including language servers, linters, and AI-based plugins like Co-pilot, Sourcery and TabNine. Sonarlint, a Sonarqube plugin, can analyze code and display issues as soon as the user saves it.

By following the steps outlined above, software development teams can significantly reduce the number of defects that make it to the testing phase. While no single solution guarantees perfect code, combining the tools and techniques discussed and a strong focus on code quality can help minimize the total project delivery cost and time. For further information on how these steps can help reduce defects and improve the overall quality of code, I strongly recommend reading Steve McConnell’s book Code Complete. Take action today to improve your software development process and achieve better outcomes for your team and business.

Troubleshooting with the OODA Loop

The OODA Loop, a decision-making technique developed by the US Air Force for combat operations, is a helpful framework for troubleshooting. By following the four phases of the OODA Loop – Observe, Orient, Decide, Act – and repeating the process if necessary, you can break down complex problems into manageable steps and make informed decisions to find a solution.

Here’s how to apply the OODA Loop to troubleshooting:

Observe: The first step is to observe the problem. Gather as much information as possible about the issue, including symptoms, errors, and messages. What else do you know about the problem? When did it start? What is the scope of the problem? What other pertinent information can you gather at this early stage? During this phase, it’s essential to focus on gathering quantity over quality. The more information you have in the beginning, the better. Leave to the decision phase on what to do with all this information.

Orient: Once you have observed the problem, the next step is to orient yourself to the expected or desired state of the system. This phase may be straightforward if you are troubleshooting something familiar. You can use your knowledge of the system to determine the normal state. However, you will need to gather information if the troubleshooting is in an unfamiliar system. The system’s end-users are often the best source of information, but documentation can also be helpful. In some cases, you may need to infer some things.

Decide: With the information gathered during the observation and orientation phases, it’s time to decide on an action plan. Keep in mind that, at this point, it is not a 100-step action plan that is sure to solve the problem. Don’t forget that we are working on a loop here. Plan something straightforward and easy to implement, just a single step to help you move further in the process. Make incremental changes, and reevaluate before moving forward.

Act: With the plan in place, it’s time to take action. Implement the plan and take the necessary steps. This could involve changing a setting, restarting a service, enabling more detailed logging in the application, or adding a breakpoint somewhere. Whatever you decided in the previous phase, do it.

Repeat: If the problem persists, enter the loop again and go through all the phases. As you observe the problem again, ask yourself if anything has changed. What is different at this moment? During the orientation phase, you need to understand the cause and effect of the problem. How did your changes during the last interaction cause the observed behaviour? Does that make sense? Have you seen similar problems? Can you infer any conclusions from what you observe? Based on your findings, decide what to do next. You may already know enough to try to implement a solution, or you may need to gather more information. Act again and return to the loop as necessary until you find a solution.

Remember, the OODA Loop is a continuous process that allows you to quickly and effectively tackle complex problems by breaking them down into manageable steps. Using this framework, you can make informed decisions based on the information you gather, act on those decisions, and continually re-evaluate until you find a solution. So, next time you’re faced with a troubleshooting challenge, try applying the OODA Loop to guide your decision-making. You can improve your problem-solving skills and become more effective at finding solutions with practice. Give it a try and see how it works for you!

Discipline

Or, more specifically, self-discipline. When you institute and follow a habit or routine as you have determined with yourself, regardless of motivation or disposition. Whether it’s hot or cold, in the mood to do it or not.

Here in my office, I have this poster right behind me, which I see every time I come to work and every time I join a video conference (for the benefit of other participants):

Discipline is freedom

At first glance, it may not seem accurate. Discipline seems almost the opposite of freedom. But let’s break it down a bit:

My alarm clock goes off at 4:15 in the morning. I don’t hit the snooze button. I don’t stay in bed enjoying another 5 minutes. When the alarm clock goes off, I immediately throw off the covers and sit on the bed—90% of the time, I don’t want to wake up. I’m not in the mood. It’s cold (I live in Canada, after all). Maybe I’m off duty and don’t have to work. But – out of sheer discipline – I get up.

That alone gives me enormous freedom. While most of the world is still sleeping, I can choose what to do with my day and get ahead of the competition.

If you have the discipline to wake up early, say 1 hour earlier than necessary, you can quickly improve your life by following the 20/20/20 principle from the book “ The 5 AM Club ”:

  1. Use the first 20 minutes for physical activities. Stretching, light jogging, or light resistance training (should not replace your primary exercise routine)
  2. Use the next 20 minutes for your education and development. Read a book, or listen to a technical podcast in your field, about self-help or another subject that will help you personally or professionally. Maybe watch a lecture or take an online course.
  3. Finally, use the last 20 minutes to meditate, reflect on the day before, write in your journal or have your daily devotional.

This isn’t particularly my routine, but it looks like a pretty decent framework.

Twenty minutes a day in a year means 121 hours. I guarantee that if you spend 121 hours a year studying, exercising and reflecting, you will be a better and more successful person, probably with more disposition and a better income.

Some perks of self-discipline I want to point out:

  1. By using discipline, you also avoid having to make decisions. And making decisions is something that generates fatigue and stress. See decision fatigue on Wikipedia.
  2. You become more productive. Less time is spent procrastinating or looking for excuses for doing or not doing something. Does your routine say that at 10 am, you answer emails? Guess what: At 10 am, you will be answering emails.
  3. Your Decisions Will Be Better: When you plan and institute a new habit or routine that you maintain via discipline, it’s usually something you’ve pondered and considered for a while. You have devised a strategy, and you have a plan. It’s not something you improvised at the last minute.

Developing discipline can seem tricky, but I think that’s because people often confuse discipline with willpower. People say I can lose weight and run marathons because I have willpower. Wrong. I have discipline.

Go back and read the first paragraph of this post again. Discipline is doing something regardless of wanting to.

I’m a fan of Jocko Willink, and on Twitter, he often answers questions as succinctly and obviously as possible.

– “How do I wake up earlier?”
– “Wake up earlier.”

– “How do I go to the gym every day?”
– “Go to the gym every day.”

One of the best ways to develop discipline is to use systems instead of setting goals.

The idea of ​​systems vs goals suggests that you should focus on developing systems and habits that lead to your desired results rather than just focusing on the results themselves. That way, you can reach your goals more sustainably and efficiently while building the discipline and skills necessary for long-term success.

If your goal is to lose 10 kg, this cannot seem easy. But adopting a system that states that you only have two meals a day and no more soda is easy to follow through discipline.

I highly recommend James Clear’s Atomic Habits book.

Finally, be persistent and have perseverance. You will succeed by creating good habits and staying disciplined even when things get tough.

In summary, self-discipline is a valuable skill that can transform a person’s life in many ways. By instituting and following established habits and routines, regardless of motivation or disposition, you can be more productive, make better decisions, and achieve goals more efficiently. When developing self-discipline, it’s essential to focus on systems rather than goals, be persistent and persevering, and look for additional resources to help with the process. Start practicing self-discipline today and experience all the benefits it can bring to your life.