Skip to content

podcast

Connecting Apache Kafka to Azure Event Hubs

Welcome to "Continuous Improvement," the podcast where we explore strategies, tips, and tricks to enhance your productivity and solve technical challenges. I'm your host, Victor, and in today's episode, we'll be discussing how to integrate Azure Event Hubs with Apache Kafka.

But before we dive in, I want to give a shoutout to our sponsor, Acme Software Solutions. Acme is a leading provider of enterprise integration tools and services, helping businesses streamline their workflows and maximize efficiency. Check them out at acmesoftware.com for all your integration needs.

Now, let's get started. Recently, I had the chance to work on an integration project involving Azure Event Hubs and Kafka. A colleague of mine faced some hurdles while trying to export messages from an existing Kafka topic and import them into Event Hubs. To help others who might encounter similar issues, I thought it would be valuable to share the steps I took to overcome these challenges.

So, let's jump into the step-by-step process.

Step 1: Download and Extract Apache Kafka. Apache Kafka is an open-source, distributed event streaming platform that enables the construction of distributed systems with high throughput. You can download the latest version of Apache Kafka from their website.

Step 2: Start the Kafka Environment. Ensure that you have Java 8 or higher installed in your local environment. To start all the Kafka services, execute the provided shell commands.

Step 3: Create and Set Up Configuration Files. Create a new configuration file with the necessary properties and replace the placeholder values with the details from your Azure endpoint. Don't forget to retrieve the required password from the Event Hub namespace settings.

Step 4: Create Three Kafka Topics. Use the provided "kafka-topics" commands to manually create the required topics.

Step 5: Run Kafka Connect. Kafka Connect is a powerful tool to stream data between Apache Kafka and Azure Event Hubs. Start the Kafka Connect worker in distributed mode.

Step 6: Create Input and Output Files. Set up the input and output files that will be used for testing purposes. These files will be read by the FileStreamSource and written to by the FileStreamSink connector.

Step 7: Create FileStreamSource Connector. Launch the FileStreamSource connector using the provided commands to start importing data from Kafka to Event Hubs.

Step 8: Create FileStreamSink Connector. Follow the instructions to set up the FileStreamSink connector, which will export data from Event Hubs back to Kafka.

Finally, confirm that the data has been replicated between the input and output files. You should see that the output file contains the same data as the input file, confirming the successful integration between Kafka and Event Hubs.

Before we end today's episode, I must emphasize that the support for Azure Event Hubs' Kafka Connect API is still in public preview. The FileStreamSource and FileStreamSink connectors deployed here are intended for demonstration purposes and not for production use.

I hope you found this episode helpful in understanding how to integrate Azure Event Hubs with Apache Kafka. If you have any questions or would like to suggest topics for future episodes, feel free to reach out to me on Twitter @VictorCI. Don't forget to subscribe to "Continuous Improvement" on your favorite podcast platform so you never miss an episode.

That's all for today. Until next time, keep improving and stay productive!

Disclaimer: The information provided in this episode is based on personal experiences and should not be considered as professional advice. Always consult with experts and refer to official documentation for accurate guidance.

Product Engagement Strategy

Welcome to "Continuous Improvement," the podcast where we explore strategies and techniques to enhance our daily lives and achieve our goals. I'm your host, Victor, and today we'll dive into the captivating world of product design and the psychology of engagement.

Hello, listeners! I recently attended a class on the Psychology of Engagement, and I am thrilled to share what I've learned with all of you. In this episode, I'll be applying these concepts to a product that has caught my attention—an app I use daily to manage my savings and investments. But before we dive in, let's talk about the company I work for, Thought Machine.

Thought Machine is a cutting-edge product company revolutionizing the banking industry. We recently raised a staggering $200 million in our Series C funding round, backed by top venture capitalists and renowned global banks, including Nyca Partners, Molten Ventures, JPMorgan, and Standard Chartered. Our core banking product, called Vault, is a game-changer for banks across the globe.

Now, back to the app that has captivated me—the one I use to manage my savings. Its intended behavior is to encourage users to deposit and save money. I find it incredibly rewarding to check my account balance every night and see my progress toward financial freedom. The internal trigger that drives my engagement with this app is my goal of achieving financial security and independence.

To optimize user behavior, I've employed the concept of "habit zones" and identified three key behaviors my company could focus on: spending money, saving money, and borrowing money. After careful consideration, I realized that the behavior with the greatest habit-forming potential is saving money while monitoring daily interest accruals.

To better understand why this behavior is so impactful, I asked myself "why" five times. The answer lies in our need for financial security and the fear of not having enough for significant life events. By checking our daily interest accruals, we can gauge whether we are saving enough to meet our financial goals and protect ourselves from future uncertainties.

To design an external trigger that cues customers to perform this behavior, I applied the 5 Panels framework. Let me introduce you to our persona—an individual named Alex. Alex is a 34-year-old working professional in Singapore, and he wants to start saving money while controlling his expenses. He feels anxious about not being able to afford his upcoming wedding.

Now, imagine Alex discussing wedding plans and finances with Melanie at a coffee shop. During their conversation, he mentions his desire to purchase a car as well. Alex feels social pressure as his peers are getting married and starting families. These external triggers compel Alex to monitor his savings account for daily interest accruals, associating it with his fear of not saving enough for his wedding.

However, as we know, translating behavior into action isn't always straightforward. There are steps and hurdles customers face along the way. For Alex, these include receiving his salary, allocating a portion to savings, logging into the app, transferring money to a savings account, waiting for the next day to see significant interest accrual, verifying the daily interest amount, and resisting the temptation to withdraw his savings.

Albeit challenging, the most significant hurdle for Alex is allocating a portion of his income for savings. To address this, we need to offer a solution that provides the necessary monetary discipline while catering to his individual needs and desires.

Our user story for Alex goes like this: Alex, a working professional burdened by various expenses and loan repayments, finds it difficult to save money. To overcome this, he needs to cut back on unnecessary spending and determine a reasonable savings target. Our solution is to develop an app that rewards users for saving through daily interest accruals. This app will project future savings and interest amounts, helping users set aside money more effectively. Additionally, it will provide tailored services based on the user's risk profile and savings goals.

And now, let's talk about our engagement strategy. To drive and sustain user engagement, we need to employ various techniques. We'll send notification reminders, encouraging users to allocate money for savings while providing projections of their future account balances. We'll also allow for automatic transfers to a savings account, so users can effortlessly save. Variable rewards, such as a sense of achievement, saving tips, and cashback offers, will further motivate users to stay engaged. Additionally, we'll incentivize users to refer their friends, earning them a higher interest rate on their savings account.

Our strategic priorities at Thought Machine involve enhancing user engagement by offering more rewarding incentives for saving money, ensuring a smooth user experience, and continuously improving our app based on customer feedback.

To measure the success of our efforts, we've identified key performance indicators (KPIs). We'll track the number of reminder notifications sent, the number of new savings accounts opened through referrals, and the total amount of interest paid to customer savings accounts.

In conclusion, the Hooked Model is an exceptional framework that synthesizes decades of research into a simple four-phase process. By understanding and applying these principles, we can encourage more people to save money effectively and ethically through our product design.

Thank you for joining me today on "Continuous Improvement." I hope you found this exploration of the psychology of engagement and product design insightful. Remember, continuous improvement is the key to achieving our goals. Stay tuned for more episodes where we'll delve into different topics to help you optimize your life.

This has been "Continuous Improvement." I'm Victor, your host, and until next time, keep striving for continuous improvement.

Finding a Fulfilling Job

Welcome back, everyone, to another episode of Continuous Improvement! I'm your host, Victor, and today we're diving into the topic of finding fulfillment in our careers. We all want to feel a sense of purpose and accomplishment in our work, and sometimes that means exploring new paths, overcoming challenges, and finding the courage to pursue our passions.

In our blog post today, the author shares their journey of self-reflection and their search for a career that brings not just financial stability, but also a sense of joy and impact. They highlight the importance of continuous learning, empathy, and strategic thinking in this quest for fulfillment.

One of the challenges they face is their introverted nature. Networking and presenting themselves to new clients can be daunting, but they recognize the value of developing their soft skills to succeed in the global job market. It's a reminder that personal growth and improvement are essential elements on the path to fulfillment.

The author also reflects on their childhood fascination with history and the stories of ordinary people who became trusted advisors, making significant impacts on their communities. They see themselves as potential advisors, driven by empathy and a desire to help others succeed while achieving something bigger than themselves.

However, like many of us, the fear of failure and taking excessive risks can hold them back from pursuing their dreams. The blog post acknowledges the importance of balancing ambition with practicality and the fear of disappointing their family's expectations. It's a struggle many of us can relate to.

Fulfillment isn't just about the work itself; it's also about the relationships we have along the way. The author shares the tension between their ambitions and the potential impact on their personal relationships. Balancing personal and professional aspirations is a delicate dance that can sometimes require sacrifice and communication.

But amidst these challenges, the author reminds us that we don't need to be the wealthiest person in the world to find contentment. It's not just about the high salaries or working at prestigious companies. Fulfillment can be found in meaningful connections, side hustles, and opportunities to make a positive impact in the world.

Today's post encourages us to embrace complexity and actively seek work that we deeply appreciate. It's a call to align our passions, talents, and values to create a career that brings joy and purpose.

If you resonate with this journey and are seeking fulfillment in your own career, let's connect! I'd love to hear your stories and insights. Together, we can navigate the complexities and find work that truly enhances our lives.

That's it for today's episode of Continuous Improvement. I hope you found value and inspiration in the blog post we explored. Remember, fulfillment is a continuous pursuit, so let's keep improving together.

Thank you for tuning in, and until next time!

Business Strategy Recommendations

Welcome back, listeners, to another episode of Continuous Improvement. I'm your host, Victor, and today we have an exciting topic to discuss. But before we dive in, I wanted to share something interesting with you all. I recently took an online course called "Section4 Strategy Sprint" and let me tell you, it was eye-opening. The strategies I learned about are revolutionizing the way companies operate and helping them achieve remarkable growth. Today, we'll be applying these strategies to analyze a real-world company and identify strategic opportunities. The company we've chosen to analyze is none other than Thought Machine, where I have personal experience and insights. So, let's get started!

For those of you who may not be familiar, Thought Machine is a product-based company that has transformed the banking industry with its core banking solution, empowering banks to provide innovative services to their customers. They recently made headlines by raising $200 million in their Series C funding round, bringing their total funding to an impressive $350 million. With clients ranging from Tier 1 banks to challengers like Atom Bank and Curve, it's clear that Thought Machine is making waves in the industry.

Now, let's evaluate Thought Machine using the T-Algorithm framework. This framework has been used by trillion-dollar companies like Apple, Google, Facebook, and Amazon to achieve explosive growth and substantial margins. It focuses on what matters most to customers while advancing key business priorities. As we dive into the strategies, keep in mind that these are potential opportunities for Thought Machine.

The first strategy we'll discuss is Rundle. Rundle refers to a bundle of goods or services that generate recurring revenue. Traditional banks often face complexity due to outdated systems, and Thought Machine offers a solution where banks can subscribe to their ledger, paying based on usage. This creates a recurring revenue model that aligns well with the needs of banks.

The next strategy is all about appealing to human instinct, and this is where Thought Machine makes a strong case. By targeting the logical part of the human brain and offering practical and cost-effective solutions, they attract new banks with advantages in stability, security, resilience, and cost-benefit. It's definitely a winning strategy for them.

Moving on to the Benjamin Button Effect strategy, we have an interesting opportunity here. Traditional banks often struggle with extracting data from legacy systems. Thought Machine's product, Vault, offers the flexibility to integrate with other platforms like Salesforce and Tableau, solving this data extraction issue. Leveraging the power of network effects, Vault becomes more valuable over time.

Now, let's talk about Visionary Storytelling. This is the ability to articulate a bold vision effectively. Traditional banks often lack a deep culture of engineering excellence, whereas Thought Machine was founded by an ex-Googler with such a culture. This story has been beneficial for them in capital raising and could continue to be a driving force.

Vertical Integration is the next strategy on our list. By owning as much of the value chain as possible, a firm can control the end-to-end customer experience. Thought Machine addresses the needs of banks by offering integrated solutions through partnerships, prioritizing cost, convenience, and speed.

Lastly, we have Accelerant. Thought Machine's culture encourages continuous learning, high-quality work, and a great deal of fun. This culture sets them apart from traditional Tier 1 banks that are often risk-averse and lack agility. Being an accelerant firm serves as a career springboard for both the company and its employees.

Based on this evaluation, there is one key strategy that stands out for Thought Machine - Visionary Storytelling. Articulating a simple, appealing, and believable vision for transforming the banking industry could be a game-changer. So, let's dive into some specific initiatives to bring this strategy to life.

Firstly, increasing the social media presence of the CEO, Paul Taylor, could work wonders. Just like innovators such as Elon Musk, having a charismatic leader challenging the status quo in the banking industry can create a buzz. Short videos on platforms like Instagram and TikTok could help drive brand awareness and engage the audience.

Secondly, engaging with technology communities is essential. Thought Machine should consider open-sourcing some of their technology to attract more developers. Organizing meetup groups with perks like free beer and pizza can engage the tech community. Weekly newsletters can also keep the community updated and build a strong network.

Lastly, deepening connections with banks is crucial for raising additional funds and building a good reputation within the industry. Partnering with top consulting firms like Accenture, Deloitte, and BCG can be extremely beneficial. These partnerships can bring credibility and open doors to more opportunities.

Moving forward, here are the next steps to implement these initiatives:

First, Tweet more frequently from the CEO's Twitter account, emphasizing a bold vision. This will help in keeping the conversation going and capturing the attention of the audience.

Second, open-source part of our technology and create a tech meetup group. By doing so, Thought Machine can attract more developers, build a strong community, and establish themselves as thought leaders in the industry.

And finally, encourage our banking clients to share their success stories using our product. Published case studies and testimonials can be powerful tools to showcase the positive impact Thought Machine has made on their operations.

I'm thrilled about these proposed initiatives and I believe they have the potential to solidify Thought Machine's position as a frontrunner in the banking industry. I look forward to seeing how they implement these strategies and the incredible growth that awaits them.

That's all for today's episode of Continuous Improvement. Thank you for tuning in and joining me on this journey of analyzing and learning from real-world companies. If you have any questions or feedback, feel free to reach out to me on LinkedIn at linkedin.com/in/victorleungtw. Until next time, keep striving for continuous improvement!

Making API call from Google Sheet

Welcome back to Continuous Improvement, the podcast where we explore different strategies and techniques to enhance our productivity and achieve constant growth. I'm your host, Victor, and today we have an exciting topic for all our business users out there who love working with spreadsheets. We'll be discussing how to write simple scripts in Google Sheets to revolutionize your data analysis and make powerful API calls. So, let's dive right in!

Picture this scenario: you're a business user who loves using Excel as your go-to tool. You're comfortable writing functions, calculating in spreadsheets, and even creating visualizations. But what if I told you that you can take it a step further and make API calls directly from Google Sheets? No coding required! In this episode, I'll guide you through the process of writing simple scripts to fetch data from APIs, enabling you to perform more powerful tabulations and analysis. And the best part? It's all done within the user-friendly environment of Google Sheets. No need for complex installations!

Firstly, open a new blank Google Sheet. We'll use two cells as input coordinates. In this example, I'll let B1 and B2 represent variables for datetime and date, respectively.

Secondly, to create a button, click on "Insert" in the top navigation toolbar, then select "Drawing." Draw a rectangular button labeled "Get Air Temperature." Save and close the drawing to create the button.

Next, right-click on the newly created button and select "Assign a script." For now, let's input the value "getAirTemperature." We'll create the method for this script later.

Moving on, in the navigation bar, select "Extensions" and then "App Scripts." Here, we'll write JavaScript code to perform the magic, similar to creating a Visual Basic macro script in Microsoft Excel.

In the code editor, copy and paste the provided script. Don't worry if you don't understand all the details—we'll go through it together. This script acts as a trigger when the button is clicked. It retrieves input values from the Google Sheet, prompts the user for confirmation, makes an API call using the UrlFetchApp.fetch function, and displays the output in the spreadsheet.

The first time you click on the button, you'll be prompted to give permission for this custom script to run. Since this is for development purposes, click "Continue," log in, and choose the option to continue with unsafe settings.

Next, an alert will pop up asking for confirmation of the input values retrieved from the Google Sheet. Click "Yes" to continue. If everything goes well, you should see a success confirmation. The temperature values from the API call are then displayed in the Google Sheet.

If you're a developer rather than a business user and prefer working with your own code editor, such as VScode, you can edit the script in a more familiar environment. You can even use the command-line interface tool called "clasp" to develop locally. This allows for better source version control. To get started, make sure you have Node.js installed and run the following command in your terminal:

npm install @google/clasp

Then follow the instructions in the documentation, specifically the guide for clasp, to set it up. Once you've installed clasp and configured it, you can clone your script using the command:

clasp clone <your Script ID>

You can then make changes in your preferred code editor, such as VScode, and upload the new AppScript using:

clasp push

Note that you may need to enable the Apps Script API by visiting https://script.google.com/home/usersettings. This will ensure a smooth process.

To summarize, Google Sheets is a powerful tool for computations, and being able to make API calls directly from it opens up even more possibilities for complex data analysis. You can leverage Google Sheets as a frontend for calculations and provide a user-friendly experience for business users, rather than relying on custom-built UIs. Feel free to reach out if you have any questions about making API calls from Google Sheets. And remember, happy coding!

That brings us to the end of another insightful episode of Continuous Improvement. I hope you've learned something valuable today and are inspired to explore the endless capabilities of Google Sheets. Stay tuned for more episodes where we'll continue to uncover strategies for personal and professional growth. I'm Victor, your host, signing off until next time. Keep improving and embrace the power of continuous growth!

The Process of Self-Publishing a Book

Hello, and welcome to Continuous Improvement, the podcast that explores personal growth, self-reflection, and the journey towards becoming the best version of ourselves. I'm your host, Victor, a software engineering manager in the fintech industry. Today, I want to share with you my experience of self-publishing a book and the valuable lessons I learned along the way.

A couple of months ago, I decided to take on the challenge of writing and publishing a book online through Amazon's self-publishing service. Let me clarify, I am not a professional writer or artist, but rather someone who was looking to improve my communication skills and embark on a journey of personal growth.

The motivation to write this book came to me during the COVID-19 lockdown last year. As I had time for self-reflection, I realized the importance of enhancing my abilities to think, speak, and write effectively. It was during this time that I stumbled upon a YouTube video by Dr. Jordan Peterson, a renowned clinical psychologist and professor from Canada. His advice that "if you can think, speak, and write, you are absolutely deadly," resonated deeply with me.

To further explore this path of self-improvement, I enrolled in Dr. Peterson's self-authoring program, which provided online prompts for self-reflection. Simultaneously, I joined a Toastmasters club to enhance my public speaking skills. It was during this time that I met a mentor who encouraged me to take the leap and write a book.

Getting started wasn't the most difficult part; it was maintaining the habit of writing despite feeling unmotivated. I faced distractions like constant notifications on my phone and negative self-talk that made me doubt my abilities. Thoughts like "I'm not a good writer" or "Nobody will read what I've written" often deterred me. But despite these difficulties and uncertainties, I remained true to my objectives and persevered with my writing journey.

However, what disappointed me the most wasn't negative feedback, but rather the lack of feedback altogether. In today's digital age, traditional books face fierce competition from platforms like YouTube and podcasts. While I still appreciate the printed word and read extensively to stay mentally engaged, it was discouraging that even my close relationships, such as my girlfriend, didn't take the time to read my work.

Though I did receive some positive feedback when I announced the publication of my book on social media, only two people actually bought it. This was a sobering validation of my efforts. It made me realize that without being a high-profile figure like the CEO of Disney, Jeff Bezos, or Elon Musk, it's incredibly challenging to gain recognition for one's contributions.

This realization became one of the invaluable lessons I learned from this self-publishing journey. It's clear that if I want to reach more people and create an impact, I should study marketing strategies and better understand audience expectations before diving into another self-publishing project.

If you're interested in learning more about my journey and are seeking inspiration in your own endeavors, I invite you to check out my book. You can find it on Amazon by searching for https://www.amazon.com/dp/B09FHXLD4G.

Thank you for joining me on this episode of Continuous Improvement. Remember, personal growth is a continuous journey, and sometimes the most valuable lessons are found in the setbacks and disappointments we face along the way. Stay motivated and keep striving to become the best version of yourself.

If you enjoyed this episode, don't forget to subscribe to our podcast for more inspiring stories and valuable insights. Until next time, this is Victor signing off.

Announcer: Thank you for listening to Continuous Improvement. For more episodes and information, visit our website at . Follow us on social media at @CIPodcast. If you have any questions or suggestions for future episodes, please email us at info@continuousimprovementpodcast.com.

The Lost Message

Welcome to "Continuous Improvement," the podcast where we explore personal growth, life lessons, and finding ways to become the best versions of ourselves. I'm your host, Victor, and today we're diving into a story about relationships, personal sacrifices, and the pursuit of maturity.

Picture this: it all started with a simple WhatsApp message. I received a late-night greeting from someone I never expected to hear from again -- my ex-girlfriend, Joanne, from Hong Kong. Little did I know that this message would bring back memories and trigger a reflection on personal growth and continuous improvement.

Joanne and I had different aspirations and approaches to life. She focused on practicality, aiming for excellent grades, a successful career, and financial security. Meanwhile, my passion for science led me on a quest to unravel the mysteries of the universe.

Our differences often became apparent when it came to making choices on even the simplest things. For example, I suggested going to my favorite hawker center for an affordable and tasty meal, but Joanne longed for more luxurious experiences.

As time went on, I realized that money became a point of contention in our relationship. Joanne believed that ambition and financial success were markers of maturity and responsibility. And as my career advanced, so did the pressure to meet her expectations.

I finally got a pay raise and decided to reward myself with a new car, a shiny blue Mini Cooper. Ironically, Joanne seemed more thrilled about it than I did. I found myself playing the role of a personal chauffeur, giving free rides to not only Joanne but also her family and friends.

But the costs of maintaining the car and meeting Joanne's lavish desires began to weigh heavily on my finances. I had to cut back on my parents' allowance, which left me feeling guilty and conflicted.

Our differences in priorities and perspectives continued to create tension. We argued over trivial matters, with Joanne repeatedly questioning my level of maturity. Our personalities clashed, I was introverted and preferred the company of computers, while she thrived on social interactions and the prestige of her financial career.

After 18 months of dating, Joanne made a life-altering decision. She felt that she had to choose between staying with an "immature guy" or exploring other possibilities. It was a painful breakup, and I found myself questioning my own maturity once again.

Despite the breakup, we tried to remain friends. But as time went on, it became clear that the dynamic had changed. Joanne never reciprocated the gifts I sent on her birthdays, and I had to accept that some relationships are not meant to be salvaged.

Time passed and wounds healed, but sometimes life has a way of throwing unexpected curveballs. Joanne reached out again, inviting me to her wedding. I pondered attending, but ultimately chose to focus on my own growth and development. I had moved on and realized that dwelling on the past would only hinder my progress.

Relationships are like a continuous journey of trial and error. It's through these experiences that we learn about ourselves, our values, and what we truly desire in life. Looking back, I see that Joanne's perception of maturity was just one perspective among many.

If there's one lesson I can offer from my own story, it's this: continuous improvement starts by understanding ourselves and being true to our own values. We should never compromise our growth and happiness for someone else's expectations.

Thank you for joining me on this episode of "Continuous Improvement." Remember, life is a never-ending process of growth, and the pursuit of maturity is a personal journey we must all navigate. Until next time, keep striving for the best version of yourself.

Fortune

Hello and welcome to Continuous Improvement, the podcast dedicated to personal growth and professional development. I'm your host, Victor, and today we have an inspiring story of resilience, career transitions, and the importance of not judging others based on their job titles.

When we are young, we often receive advice from our parents about the importance of education and the fear of ending up in certain professions. But sometimes life has different plans for us. Today, I want to share with you an incredible journey of self-discovery and continuous improvement, based on a blog post titled "Every Job Has a Story" by an anonymous author.

Our story begins with the author's mom warning them to study hard or else they might end up as a garbageman. Fueled by this fear, the author worked hard and obtained a chemistry degree. However, job opportunities in their field were limited, forcing them to take a job at a clothing store.

Folding clothes in the store felt like a punishment, similar to Sisyphus endlessly pushing a rock up a hill. The author began questioning the value of their education and their chosen career path. Their journey took an unexpected turn when they worked as a garbageman during a New Year's Eve event in Australia.

The experience of being a garbageman, surrounded by the stench of alcohol and vomit, became a wake-up call for the author. It made them realize the importance of listening to their mom's advice and avoiding ending up in a job they had initially looked down upon.

Returning to Hong Kong, the author struggled to find employment in their field. Determined to change careers, they taught themselves programming and became a software engineer. Yet, imposter syndrome plagued their confidence. To overcome this, the author pursued further education—a part-time master's degree in computer science and later, an MBA.

But even after transitioning into a technical sales consultant role, the author found themselves repeating past mistakes. This job involved entertaining clients through excessive drinking, similar to the days when they were a garbageman.

A low point came during a business dinner with a major client when the author excused themselves to vomit in the restroom. This humbling experience reminded them of their earlier struggles in Australia and the job they had desperately tried to avoid.

The author's professional life also included encounters with KTV lounge culture, where they saw the challenges faced by women working in such environments. They realized that the struggle of these women and their own struggles were not so different.

Reflecting on their journey, the author gained a profound understanding of the value of education and the importance of never judging others based on their job titles. They share this message with us: every job has a story, and it's crucial to treat everyone with the respect they deserve.

And that concludes our story today. Remember, continuous improvement isn't just about personal growth; it's also about understanding and respecting the journeys of others. Thank you for joining me on this episode of Continuous Improvement. I'm Victor, your host, and I look forward to sharing more inspiring stories with you in the future.

Jobs to Be Done

Host (Victor): Welcome to another episode of Continuous Improvement, the podcast all about personal and professional growth. I'm your host, Victor, and today we're going to dive into a thought-provoking topic: the importance of understanding the job to be done when using a product or service.

Have you ever encountered an error message during an online transaction that left you frustrated? Join the club! Today, I want to share a personal experience that made me realize how crucial it is for both vendors and customers to consider the task at hand before using a service or product.

In my previous role as a technical lead in a bank, I discovered something quite fascinating. The financial industry is filled with acronyms, and even the banks have their own cynical ones. For instance, the bank I worked for, HSBC, had an acronym that stood for "How Simple Becomes Complicated." It perfectly captures the complexity behind seemingly simple tasks, like pressing a button on an internet banking site.

The process of delivering these services involves multiple teams working together. The business team collects requirements, the design team creates the layout, and the development team writes, tests, and deploys the software. Believe it or not, it often takes up to two weeks just to make a tiny alteration to a webpage.

During my time as part of the ASD-ASP team, responsible for creating regional features, I had the opportunity to develop services like PayNet's FPX in Malaysia and PayNow in Singapore. I was proud of my work, making online transactions smoother for customers.

However, I soon realized that there was an important aspect I hadn't fully considered — accessibility. Imagine being visually impaired and relying on assistive tools to navigate a website. It never occurred to me that the tools would unknowingly interrupt the transaction process by constantly announcing the countdown of remaining time.

I wanted to address this issue, but it proved to be quite challenging in such a large organization. The business analysts were mainly concerned with profits and considered their job done. The designers focused more on flashy animations rather than considering accessibility, and the engineers were already looking ahead to explore emerging technologies like machine learning and blockchain.

Sigh I wish I had known about Aristotle's three modes of persuasion back then - Ethos, Logos, and Pathos. These powerful tools could have helped me advocate for change and show the importance of considering the needs of all users.

Now, I'd love to hear your thoughts on this matter. Before using a product or service, have you ever considered the job it is meant to accomplish? What improvements would you like to see in the services you use?

Clayton Christensen, a renowned professor from Harvard Business School, introduced the concept of understanding the job that a person hires a product to do. This understanding allows us to identify areas for improvement and create a better experience.

When I use online banking, my job is simply to complete the transaction. I don't care about flashy animations or the latest technologies. I want a smooth process that ensures successful transactions for everyone, including those with visual impairments. Did you know that in Malaysia, the government has regulations requiring a 70% success rate for FPX transactions, with penalties for non-compliance?

So, next time you encounter an issue with online banking or any other service, ask yourself: What is the job to be done? Think about others who may face similar challenges, especially those with different abilities. Don't forget, as a customer, you have a voice. Communicate your needs to the service providers and help drive positive change.

Remember, this is not a matter to be taken lightly. We each have the power to be the change we wish to see in the world.

That's all for today's episode of Continuous Improvement. I hope you found this discussion thought-provoking and that it inspires you to consider the job to be done when using products or services.

If you enjoyed this episode, don't forget to subscribe to our podcast and leave us a review. We always appreciate your feedback.

Until next time, keep striving for improvement in every aspect of your life. This is Victor, signing off.

[End of the podcast]

Working with Localization on Websites and Mobile Apps in APAC

Welcome back to another episode of Continuous Improvement, the podcast where we explore strategies, best practices, and insights to help you enhance your professional skills. I'm your host, Victor, and today we're diving into the world of frontend localization.

But before we get started, let me share a bit about myself. I used to work as a technical lead in a bank, where acronyms seemed to rule the day. From HSBC, which hilariously stood for "How Simple Becomes Complicated," to ASD-ASP, the team I was part of—Accelerated Scaled Delivery in the Asia-Pacific—I learned firsthand how complex frontend development can be.

In today's episode, we'll be addressing a question from a colleague in the UK who reached out to me about localization, tools, and best practices in the Asia-Pacific region. With my company expanding to locations like Singapore, the Philippines, and Vietnam, it's a topic close to my heart.

So, let's start by demystifying the term "i18n" often used in frontend development. Did you ever wonder what the number "18" represents? Well, it's not actually about 18 different languages, but the number of letters between the first 'i' and the last 'n' in the word "internationalization."

Now, let's dive into some real-life experiences. During my time at HSBC, we faced numerous challenges when it came to making even the smallest changes on a website. It often took weeks to change just one word on a production webpage due to the involvement of multiple teams, from business requirements to code review, quality assurance, and deployment.

One example I encountered was a timer that posed serious accessibility issues. Imagine relying on an accessibility tool as a visually impaired user, and you have no way of knowing the remaining time to complete a transaction. It's a frustrating experience that could've been easily avoided through better frontend development practices.

Speaking of practices, we used Adobe Experience Manager (AEM) to build web pages. While it allowed non-technical team members to make updates, it frequently required frontend engineers to make text changes or create dialogues using XML—a process that added unnecessary complexity.

Mobile localization had its own set of challenges. We relied on Python scripts to read copy in various languages from a Confluence page and generate localized JSON files, which were then included in the app. However, this approach often created more problems than it solved, as we discovered.

One common issue was inconsistencies in frontend designs labeled using Confluence pages. Outdated screenshots and inconsistent keys caused unexpected side effects when values were updated. It's crucial to have a robust system in place to ensure accurate and up-to-date translations.

Let's now turn our attention to potential localization issues on-screen. Imagine a scenario where the term "country" is used to list Taiwan or Hong Kong as separate countries, which can be illegal due to national security laws. These are the kind of pitfalls that must be avoided in a robust localization strategy.

Another challenge is failing to localize the search bar. Search behavior and sorting algorithms vary across languages and regions, making it essential to adapt the functionality accordingly. Error messages also need proper localization and not just direct translation. Mapping error codes to localized messages proves more effective than translating entire strings.

Moreover, the lack of versioning for translations can be disastrous, particularly when business requirements change frequently. And let's not forget the importance of accessibility translations. Ignoring them can significantly harm the user experience, especially for visually impaired individuals.

While machine translations like Google Translate might seem tempting, they often fall short in accurately conveying the intended meaning. That's why collaborating with local teams who understand the cultural nuances and potential issues is crucial for successful localization.

I hope this discussion has shed light on the challenges and best practices involved in frontend localization. If you have any questions or want to share your experiences, feel free to reach out. Thanks for tuning in today, and remember, there's always room for continuous improvement.