Skip to content

2022

Business Strategy Recommendations

I recently took an online course called "Section4 Strategy Sprint." After learning about the strategies that define the most valuable firms worldwide, I am applying this framework to evaluate real-world companies and identify strategic opportunities. The company I have chosen to analyze is Thought Machine, where I work and which I am familiar with.

Overview of Thought Machine

Thought Machine is a product-based company that has developed a core banking solution, transforming the banking industry and empowering banks to offer innovative services to their customers.

Growth at Thought Machine

We recently raised $200 million in our Series C funding round, which involved industry-leading venture capitalists and major global banks like Nyca Partners, Molten Ventures, JPMorgan, and Standard Chartered. This brings our total funding to $350 million and values our company at over £1 billion.

Clients of Thought Machine

We work with a variety of clients, ranging from Tier 1 banks to challengers, including Atom Bank, Curve, Lloyds Banking Group, Monese, SEB, Standard Chartered, TransferGo, Arvest, ING, and JPMorgan Chase.

Products of Thought Machine

Our product, Vault, operates on cloud-native platforms like Amazon Web Services, Google Cloud Platform, and Microsoft Azure, eliminating the need for legacy technology. Vault can be configured through Smart Contracts to run any type of retail bank product, from current accounts to loans and mortgages.

T-Algorithm Strategies Evaluation

I am using the T-Algorithm framework for this analysis, which identifies strategies that have led companies like Apple, Google, Facebook, and Amazon to achieve trillion-dollar valuations. It enables explosive growth and substantial margins, and influential business leaders use it to focus on what matters most to customers while advancing key business priorities.

Traditional Tier 1 banks must adapt quickly to meet their customers' needs, making it a high business priority for Thought Machine's clients to transition from legacy systems to a more efficient, cloud-native technology stack.

1. Rundle

Rundle refers to a bundle of goods and/or services that generate recurring revenue. Banks are keen on reducing complexity and are often hindered by outdated, monolithic systems. Thought Machine offers a solution where banks can subscribe to our ledger, paying based on usage, which creates a recurring revenue model.

2. Appealing to Human Instinct

Successful businesses often appeal to a fundamental human instinct. In our case, we target the logical part of the human brain by offering practical and cost-effective solutions. Thought Machine attracts new banks with product advantages in stability, security, resilience, and cost-benefit.

3. Benjamin Button Effect

Products that leverage network effects become more valuable over time. Traditional banks often find it difficult to extract data from their legacy systems. Thought Machine's product offers the flexibility to integrate with other platforms, like Salesforce and Tableau, to resolve this issue.

4. 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 in capital raising.

5. Vertical Integration

By owning as much of the value chain as possible, a firm can control the end-to-end customer experience. Banks prioritize cost, convenience, and speed, and Thought Machine addresses these needs by offering integrated solutions through partnerships.

6. Accelerant

An "accelerant" firm serves as a career springboard. Traditional Tier 1 banks are risk-averse and lack agility. At Thought Machine, our culture encourages continuous learning, high-quality work, and a great deal of fun.

T-Algorithm Strategy: Visionary Storytelling

Based on my analysis, the strategy with the most significant potential for Thought Machine is visionary storytelling. I propose that we articulate a simple, appealing, and believable vision for transforming the banking industry.

Future of Banking Initiatives

  1. Increase Social Media Presence of Our CEO (Low effort, High impact)

Just as Elon Musk is portrayed as an innovator, our CEO, Paul Taylor, could increase his online presence. We need a charismatic leader to challenge the status quo in the banking industry. Short videos on platforms like Instagram and TikTok could drive brand awareness.

  1. Engage with Technology Communities (Medium effort, High impact)

We should consider open-sourcing some of our technology to attract more developers. Organizing meetup groups with perks like free beer and pizza could engage the tech community. Weekly newsletters can keep the community updated.

  1. Deepen Connections with Banks (High effort, High impact)

Building a good reputation within the banking industry could help in raising additional funds. Partnering with top consulting firms like Accenture, Deloitte, and BCG could also be beneficial.

Next Steps

  1. Tweet more frequently from the CEO's Twitter account, emphasizing a bold vision.
  2. Open-source part of our technology and create a tech meetup group.
  3. Encourage our banking clients to share success stories using our product.

Any Questions?

I look forward to receiving feedback that will solidify my learnings and improve these recommendations. Don't hesitate to get in touch with me on LinkedIn: https://linkedin.com/in/victorleungtw

商業策略建議

我最近上了一門名為「Section4 策略 Sprint」的線上課程。學習了關於定義全球最有價值公司的策略後,我正在應用這個框架來評估真實世界的公司並識別戰略機會。我選擇分析的公司是 Thought Machine,這是我工作的地方,我對它相當瞭解。

Thought Machine 概覽

Thought Machine 是一家產品為本的公司,已開發了核心銀行解決方案,改變了銀行業並賦權銀行向客戶提供創新服務。

Thought Machine 的成長

我們最近在我們的 C 輪資金籌集中籌集了 2 億美元,這涉及到了業界領先的風險投資者和全球主要銀行,如 Nyca Partners、Molten Ventures、摩根大通和渣打銀行。這使我們的總籌資額達到了 3.5 億美元,並使我們的公司估值超過了 10 億英鎊。

Thought Machine 的客戶

我們與各種客戶合作,範圍從第一層次銀行到挑戰者,包括 Atom Bank、Curve、Lloyds Banking Group、Monese、SEB、Standard Chartered、TransferGo、Arvest、ING和摩根大通。

Thought Machine的產品

我們的產品,Vault,運行在像亞馬遜網路服務、Google Cloud Platform 和 Microsoft Azure 這樣的雲原生平台上,消除了對傳統技術的需求。Vault可以通過 Smart Contracts 進行配置,運行任何類型的零售銀行產品,從當前的賬戶到貸款和抵押貸款。

T-Algorithm 策略評估

我在這次分析中使用了 T-Algorithm 框架,該框架識別了像蘋果、Google、Facebook 和 Amazon 這樣的公司取得億萬身價的策略。它能夠實現爆炸性的增長和大量的利潤,並且影響力強大的商業領袖使用它專注於客戶最關心的事情,同時推進關鍵的業務優先事項。

傳統的第一層次銀行必須迅速適應以滿足他們的客戶需求,這使得Thought Machine的客戶從傳統系統過渡到更有效,雲原生技術棧成為了高商業優先級的事項。

1. Rundle

Rundle 指的是能夠產生再生收入的商品和/或服務的捆綁。銀行渴望降低復雜性,並經常受到過時的、整塊的系統的阻礙。Thought Machine 提供了一種解決方案,銀行可以訂閱我們的帳本,根據使用量付費,這創造了一種常態收入模式。

2. 吸引人類本能

成功的企業通常會吸引一種基本的人類本能。在我們的案例中,我們通過提供實用且成本有效的解決方案來鎖定人類大腦的邏輯部分。Thought Machine 通過穩定性、安全性、韌性和成本效益上的產品優勢吸引新的銀行。

3. Benjamin Button Effect

利用網絡效應的產品隨著時間的推移變得更有價值。傳統銀行常常發現很難從他們的傳統系統中提取資料。Thought Machine的產品提供了與其他平台(如Salesforce和Tableau)集成的靈活性,以解決這個問題。

4. Visionary Storytelling

景觀敘事是能夠有效地闡述大膽願景的能力。傳統銀行通常缺乏深層的工程卓越文化,而 Thought Machine 由一位具有這種文化的前 Google 員工創立。這種故事在資金籌集中很有幫助。

5. 縱向整合

通過儘可能地讓一個公司擁有價值鏈,該公司可以控制端到端的客戶體驗。銀行優先考慮成本、方便性和速度,Thought Machine通過合作夥伴提供整合的解決方案來滿足這些需求。

6. Accelerant

一個"助燃劑"公司用作職業的跳板。傳統的第一層次銀行是保守的並且缺乏靈活性。在 Thought Machine,我們的文化鼓勵持續學習,高品質的工作,並有很多的樂趣。

T-Algorithm 策略:景觀敘事

根據我的分析,對 Thought Machine 最有潛力的策略是景觀敘事。我建議我們為改變銀行業的形象擁有一個簡單,吸引人,並有說服力的視野。

銀行業的未來

  1. 增加我們 CEO 的社交媒體存在(低費力,高影響力)

正如 Elon Musk 被描繪為創新者一樣,我們的 CEO,Paul Taylor,可以增加他的網路存在感。我們需要一位有魅力的領導者來挑戰銀行業的現狀。在 Instagram 和 TikTok 等平台上的短片可以提高品牌知名度。

  1. 與科技社群交流(中等費力,高影響力)

我們應該考慮開源一部分我們的技術以吸引更多的開發者。組織附帶免費啤酒和披薩等禮品的聚會可以讓科技社區的人們積極參與。每週的新聞通訊可以讓社區的人們保持更新。

  1. 與 Banks 建立更深的聯繫(高費力,高影響力)

在銀行業建立良好的聲譽可以幫助我們籌集更多的資金。與頂尖的諮詢公司如 Accenture,Deloitte,和 BCG 的合作也可能會有所幫助。

下一步

  1. 從 CEO 的 Twitter 帳號發布更多的推文,強調大膽的願景。
  2. 開源我們的一部分技術並創建一個科技聚會小組。
  3. 鼓勵我們的銀行客戶分享他們使用我們產品的成功經驗。

有任何問題?

我期待收到能夠鞏固我學習並改進這些建議的反饋。歡迎您通過 LinkedIn 與我聯繫:https://linkedin.com/in/victorleungtw

Making API call from Google Sheet

Imagine you are a business user and your favourite tool of all time is Excel. You are not technical enough to do coding, but you are comfortable writing functions, calculating in the spreadsheet and plotting graphs. In this article, I am going to show you how to write simple scripts in Google Sheets, so that you can make a simple API call from it and do a lot more powerful tabulation. It is easy to use with no installation required.

Firstly, open a new blank Google Sheet. We would then make use of two of the cells as the input coordinates. We can get the values from this cell using Google Sheets later on. In this example, we make B1 and B2 as variables for the datetime and date respectively.

Secondly, we create a button. From the top navigation tool, simply click on “Insert” and then “Drawing” option. And we would draw a rectangle button with text “Get Air Temperature”. Click save and close to create the new button.

Right click on the new button and select “Assign a script”. We would input the value “getAirTemperature” for now and we will create the method later.

Third step, in the navigation bar, select “Extensions” and then select “App Scripts”. Similar to Microsoft Excel Visual Basic macro script, we are going to write some Javascript instead, where all the magic happens.

In the code editor, copy and paste the code below:

function getAirTemperature() {
    // Getting input values from Google Sheet
    let ui = SpreadsheetApp.getUi();
    let sheet = SpreadsheetApp.getActiveSheet();

    // Google Sheet Cell - [Row, Column]
    let inputCoordinates = {
        datetime: [1, 2],
        date:
  created: [2, 2],
    }

    let outputCoordinates = {
        stations: [2, 4],
        readings: [2, 6]
    }

    let datetime = sheet.getRange(
        inputCoordinates.datetime[0],
        inputCoordinates.datetime[1]
    ).getValue();

    let date = sheet.getRange(
        inputCoordinates.date[0],
        inputCoordinates.date[1]
    ).getValue();

    let result = ui.alert(
        'Please confirm the following parameter:',
        'datetime' + ":" + datetime + "\n" +
        'date' + ":" + date + "\n",
        ui.ButtonSet.YES_NO);

    if (result == ui.Button.YES) {

        // Make HTTP call to Weather API
        let apiCaller = ApiCaller()
        let response = apiCaller.getAirTemperature(datetime, date);
        Logger.log(response.getContentText());

        ui.alert('Get waether data successfully');

        let data = JSON.parse(response.getContentText());
        let stations = data["metadata"]["stations"];
        let readings = data["items"][0]["readings"];

        for (let i = 0; i < stations.length; i++) {
            // Setting output values to Google Sheet
            sheet.getRange(
                outputCoordinates.stations[0] + i,
                outputCoordinates.stations[1]
            ).setValue([stations[i]["name"]]);

            sheet.getRange(
                outputCoordinates.readings[0] + i,
                outputCoordinates.readings[1]
            ).setValue([readings[i]["value"]]);
        }


    } else {
        ui.alert('Permission denied.');
    }

}

ApiCaller = function () {

    var weatherApi = {
        "airTemperature": {
            "method": "GET",
            "endpoint": "https://api.data.gov.sg/v1/environment/air-temperature"
        }
    }

    return {

        getAirTemperature: function (datetime, date) {

            datetime = datetime.replace(/"/g, "")
            date = date.replace(/"/g, "")

            var method = weatherApi.airTemperature.method
            var url = weatherApi.airTemperature.endpoint + "?date_time=" + datetime + "&date=" + date

            var options = {
                "method": method,
                "contentType": "application/json",
                "headers": {
                    "Content-Type": "application/json"
                }
            };

            return UrlFetchApp.fetch(url, options)
        }
    }

}

If you don’t understand what’s the code is doing, don’t panic, let me explain: when the button is clicked, the getAirTemperature function is triggered. It then get input values from Google Sheets, pop up an alert button for user confirmation. Once it’s confirmed, it makes an API call with UrlFetchApp.fetch to get the Singpaore temperature and finally it loop through all the results to display the output.

The first click on the button, you would be prompt with this message.

Go ahead and click continue, login and continue with unsafe options for development purposes.

Then an alert would popup to asked for confirmation of input values:

Click “Yes” to continue. If everything goes well, you should see the success confirmation.

Finally, we get the temperate values from API call and output the result in the Google Sheet.

As simple as that.

If you are a developer instead of a business user, you may want to edit the script in your favourite code editor, such as VScode and get a better source version control. Instead of editing using the online Apps Script editor, you can use the Command Line Interface clasp to develop locally. Once you’ve installed Node.js, you can use the following npm command to install:

npm install @google/clasp

Then follow the instructions on this doc:

https://developers.google.com/apps-script/guides/clasp

e.g.

clasp login
clasp clone <your Script ID>

Make changes in your VS code editor, then upload the new AppScript.

clasp push

Note: you may need to enable Apps Script API by visiting https://script.google.com/home/usersettings then retry.

Overall, Google Sheets is a powerful tool for you to do computation. It is even more useful given that you can do API calls from it directly for more complex use cases. You can use it as a frontend for doing calculations and it’s very user friendly to business users instead of using custom build UI. Let me know if you have any questions about making API call from Google Sheet. Happy coding!

從Google試算表發起API呼叫

想象一下,你是一位商業用戶,你最喜歡的工具是Excel。你可能不足夠技術化來編碼,但你很擅長寫函數、在試算表中計算和繪圖。在這篇文章中,我將向你展示如何在Google試算表中編寫簡單的指令碼,這樣你就可以從中發出一個簡單的API呼叫,並做更多強大的計算。使用起來非常容易,無需安裝。

首先,開啓一個新的空白Google試算表。然後我們會利用兩個單元格作為輸入坐標。我們可以稍後從Google試算表獲取這個單元格的值。在這個例子中,我們將B1和B2作為日期時間和日期的變數。

其次,我們創建一個按鈕。从上方的导航工具中,简单地点击“插入”然后选择“画图”选项。然后我们会画一个带有“获取空气温度”文字的矩形按钮。点击保存并关闭以创建新按钮。

在新创建的按钮上点击右键并选择“分配脚本”。我们现在先输入“getAirTemperature”,稍后我们再来创建这个方法。

第三步,在导航栏中,选择“扩展”然后选择“应用脚本”。我们将编写一些Javascript代码,类似于微软Excel的视觉基本宏脚本,所有的魔力都会在这里发生。

在代码编辑器里,复制并粘贴下面的代码:

function getAirTemperature() {
    // 使用Google試算表獲取輸入值
    let ui = SpreadsheetApp.getUi();
    let sheet = SpreadsheetApp.getActiveSheet();

    // Google試算表單元格 - [行, 列]
    let inputCoordinates = {
        datetime: [1, 2],
        date:
  created: [2, 2],
    }

    let outputCoordinates = {
        stations: [2, 4],
        readings: [2, 6]
    }

    let datetime = sheet.getRange(
        inputCoordinates.datetime[0],
        inputCoordinates.datetime[1]
    ).getValue();

    let date = sheet.getRange(
        inputCoordinates.date[0],
        inputCoordinates.date[1]
    ).getValue();

    let result = ui.alert(
        '請確認以下參數:',
        'datetime' + ":" + datetime + "\n" +
        'date' + ":" + date + "\n",
        ui.ButtonSet.YES_NO);

    if (result == ui.Button.YES) {

        // 對天氣API發送HTTP呼叫
        let apiCaller = ApiCaller()
        let response = apiCaller.getAirTemperature(datetime, date);
        Logger.log(response.getContentText());

        ui.alert('成功獲取氣象數據');

        let data = JSON.parse(response.getContentText());
        let stations = data["metadata"]["stations"];
        let readings = data["items"][0]["readings"];

        for (let i = 0; i < stations.length; i++) {
            // 將輸出值設置到Google試算表
            sheet.getRange(
                outputCoordinates.stations[0] + i,
                outputCoordinates.stations[1]
            ).setValue([stations[i]["name"]]);

            sheet.getRange(
                outputCoordinates.readings[0] + i,
                outputCoordinates.readings[1]
            ).setValue([readings[i]["value"]]);
        }


    } else {
        ui.alert('權限被拒絕。');
    }

}

ApiCaller = function () {

    var weatherApi = {
        "airTemperature": {
            "method": "GET",
            "endpoint": "https://api.data.gov.sg/v1/environment/air-temperature"
        }
    }

    return {

        getAirTemperature: function (datetime, date) {

            datetime = datetime.replace(/"/g, "")
            date = date.replace(/"/g, "")

            var method = weatherApi.airTemperature.method
            var url = weatherApi.airTemperature.endpoint + "?date_time=" + datetime + "&date=" + date

            var options = {
                "method": method,
                "contentType": "application/json",
                "headers": {
                    "Content-Type": "application/json"
                }
            };

            return UrlFetchApp.fetch(url, options)
        }
    }

}

如果你不理解这段代码在做什么,别慌,我来解释:当点击按键时,getAirTemperature方法会被触发。这个方法会从Google试算表中获取输入值,弹出一个等待用户确认的提示框。一旦用户确认,它就会使用UrlFetchApp.fetch发出一个API呼叫,获取新加坡的温度,然后它会遍历所有结果并显示输出。

第一次在按钮上点击,你会看到下面这条消息。

继续进行,登陆并选继续进行不安全的选项进行开发。

然后一個彈出式視窗會詢問是否確認輸入值:

點擊“是”繼續。如果一切順利,你應該可以看到成功確認的信息。

最后,我們從API調用中獲取溫度值,並將結果輸出到Google試算表。

就是这么简单。

如果你是一位开发人员而不是商业用户,你可能希望在你最喜欢的代码编辑器进行脚本更改,如VScode,并获取更好的源版本控制。你可以使用命令行界面clasp在你本地进行开发,而不是在线使用Apps Script编辑器。一旦你已经安装了Node.js,你可以使用以下的npm命令进行安装:

npm install @google/clasp

然后根据这个文档的说明操作:

https://developers.google.com/apps-script/guides/clasp

例如:

clasp login
clasp clone <你的脚本ID>

在你的VS code编辑器里进行更改,然后上传新的应用脚本。

clasp push

注意:你可能需要在访问https://script.google.com/home/usersettings后,再重新启用 Apps Script API。

总的来说,Google试算表是一个强大的用于计算的工具,从中直接发起API调用對於更复杂的使用场景而言更有用。你可以将它用作进行计算的前端,而对于商务用户来说,它比使用定制的UI更加友好。如果你有任何关于從Google試算表發出API調用的問題,請让我知道。编码愉快!

The Process of Self-Publishing a Book

A couple of months ago, I published a book online through Amazon's self-publishing service. Just to clarify, I am not a professional writer or artist; I work as a software engineering manager in the fintech industry. My motivation for writing the book was to improve my communication skills—a goal I identified during the COVID-19 lockdown last year when I had time for self-reflection.

I was inspired by a YouTube video from Dr. Jordan Peterson, a clinical psychologist and professor in Canada. He advised, "If you can think, speak, and write, you are absolutely deadly." This quote greatly motivated me, so I enrolled in his self-authoring program, which offers online prompts for self-reflection. Concurrently, I joined a Toastmasters club to improve my public speaking skills and met a mentor who encouraged me to write and publish a book.

Getting started wasn't the hard part; the challenge was maintaining the habit of writing, especially when I felt unmotivated. Distractions like notifications on my phone and negative self-talk ("I'm not a good writer; nobody will read what I've written") often deterred me. Despite knowing my book would likely not be a bestseller, I continued writing, staying true to my objectives.

What disappointed me was not receiving negative feedback but receiving no feedback at all. In today's internet age, traditional books face stiff competition from YouTube and podcasts. I still appreciate the printed word and read at least one book a week to stay mentally engaged and to stave off overthinking and depression.

The primary goal of my journaling was self-improvement, not public recognition. However, it was disheartening that even my close relationships, like my girlfriend, didn't take the time to read my work. While I did receive some positive feedback when I announced the book's publication on social media, only two people actually bought it—a sobering validation of my efforts.

The blunt truth is that if you're not a high-profile figure like the CEO of Disney, Jeff Bezos, or Elon Musk, your contributions are likely to go unnoticed. This realization is one of the lessons I've learned from self-publishing. Perhaps, if I were more renowned, I could sell a million copies. A book that goes unread feels like a new level of loneliness unlocked. Maybe I need to study marketing strategies or understand audience expectations before diving into another self-publishing project.

If you're interested in my journey and are looking for inspiration, my book is currently available on Amazon:

https://www.amazon.com/dp/B09FHXLD4G

出版自己書籍的過程

幾個月前,我透過亞馬遜的自我出版服務在網上出版了一本書。僅給予澄清,我不是一個專業的作家或藝術家;我在金融科技行業擔任軟件工程經理。寫這本書的動機是為了提高我的溝通技巧——我在去年COVID-19封鎖期間自我反思時確定的目標。

我受到加拿大臨床心理學家和教授喬丹·彼得森(Dr. Jordan Peterson)在YouTube視頻的啟發。他建議:“如果你能思考,說話,和寫作,你就絕對致命。”這句話極大地激勵了我,所以我報名參加了他的自我作者計劃,該計劃提供了自我反思的在線提示。同時,我加入了一個Toastmasters俱樂部以提高我公開演講的技巧,並遇到了一位鼓勵我寫作並出版書籍的導師。

開始並不是困難的部分;挑戰在於維持寫作的習慣,尤其是當我感到沒有動力時。像我手機上的通知和負面的自我對話(“我不是好作家;沒有人會閱讀我寫的”)讓我經常放棄。儘管知道我的書可能不會成為暢銷書,但我繼續寫作,忠於我的目標。

讓我失望的不是收到負面反饋,而是完全沒有收到反饋。在如今的互聯網時代,傳統書籍面臨來自YouTube和播客的激烈競爭。我仍然欣賞印刷文字,並至少每週閱讀一本書以保持思考並避免過度思考和抑鬱。

我寫日記的主要目標是自我提升,而不是公眾認知。但是,即使是我亲密的關係,比如我的女朋友,也沒有花時間閱讀我的作品,這讓我感到沮喪。當我在社交媒體上宣布書籍出版時,確實收到了一些積極的反饋,但實際上只有兩個人購買了它——這是我努力的清醒驗證。

直言不諱的事實是,如果你不是像迪士尼公司的CEO,傑夫·貝佐斯,或伊隆·馬斯克這樣的知名人物,你的貢獻可能會被忽視。這也是我從自我出版中學到的一課。也許,如果我更為知名,我可以賣出一百萬份。一本未被讀到的書感覺像是解鎖了新的孤獨層次。也許我需要學習市場營銷策略或在進行另一個自我出版計劃之前理解觀眾的期望。

如果你對我的旅程感興趣,並正在尋找靈感,我的書現在可以在亞馬遜上找到:

https://www.amazon.com/dp/B09FHXLD4G

The Lost Message

One night, a WhatsApp message lit up my screen, jolting me awake. Assuming it was an emergency, I was surprised to find that it was just a girl saying hi. "How's life, Victor?" Joanne, my former girlfriend from Hong Kong, had sent the message. "Did you get my message?" she asked. "Why didn't you respond?"

"I changed my phone number when I moved from Hong Kong to Singapore," I explained. As I spoke, thoughts of her flooded my mind, making me wonder about the message that had gotten lost.

We had attended different universities and pursued different degrees. Intrigued by science, I chose to major in chemistry. My goal was to unravel the mysteries of the universe. Unlike me, Joanne was pragmatic. She went into accountancy, aspiring to earn good grades, build a solid career, and secure a comfortable salary—while also finding a suitable and wealthy husband.

During one of our lunch dates, I suggested, "Let me take you to my favorite hawker center for $5 egg fried rice." Dissatisfied, she responded, "No, I want to go to a Japanese restaurant for delicious sushi, even if it's just a few pieces of rice." I tried to switch gears by talking about our vacation plans. "How about a local trip to Sentosa Island in Singapore?" I offered. "No, I want to go to Europe, to see the snowy mountains in Switzerland," she insisted.

Money was the stumbling block. "It's not just about the money," Joanne elaborated. "It's about your ambition to work hard, earn more, and elevate your social standing. That's what a responsible adult does." Despite working long hours, my expertise in quantum mechanics, Schrödinger equations, and black hole theories did not land me a high-paying job. "Victor, can you be more mature?" she asked.

Eventually, I changed jobs and got a pay raise. As my income rose, I felt the need to upgrade my lifestyle. When I told Joanne I was thinking about buying a car, she instantly exclaimed, "YES!" I purchased a blue Mini Cooper, and she seemed more excited about it than I was.

I began picking up Joanne in my new car every day. I was like her personal chauffeur, often extending free rides to her family and friends. Though maintaining the car was expensive, keeping my relationship with Joanne proved even costlier.

Joanne had a fondness for designer handbags. I had to gift her lavish items, even though I couldn't pronounce the names of her favorite brands correctly. Whether it was Gucci or Chanel, any of these handbags would cost me several months' salary. To settle my credit card debt, I had to cut back on the allowance I gave to my parents, which made me feel guilty.

During a romantic dinner at a Japanese restaurant, Joanne asked, "Victor, do you love me more than you love your car?" I tried to inject humor into the tense moment by replying, "Of course, I love my car," but she didn’t find it amusing. We continued to quarrel over trivial matters. "Victor, can you be more mature?" she asked yet again.

We were a couple of contrasting personalities. I was an introverted software developer who preferred talking to machines over people. Joanne, on the other hand, was an extroverted relationship manager in a bank, selling financial products with a soft yet assertive tone. What did that mean? It meant she earned more than I did.

After 18 months of dating, Joanne decided it was time to make a crucial choice: to continue with this "immature guy" or to look for alternatives. During one of our usual outings, I sensed something was off. She was distant and refused to hold my hand. Finally, after an uncomfortable silence, she spoke, "Victor, let's break up." My heart sank as I struggled to hold back tears. "Victor, can you be more mature?" she said one last time.

We remained friends after the breakup. Although I continued to send her gifts on her birthdays, she never reciprocated. Time does heal, and one day, an unexpected message from her arrived. It read, "Hey Victor, my wedding is coming up. Would you be interested in attending?" Irritated, I began to type "Congratulations," but I never pressed send. Instead, I deleted the message. "Why should I go?" I thought to myself.

I later saw pictures of her wedding on Facebook. She looked stunning, and her husband seemed wealthy and well-educated. "What a waste of money," I thought, but quickly pushed the idea aside. I had moved on. Relationships are built on trial and error, mostly error. If you don't want to repeat my mistakes, keep reading. I have plenty of advice on tackling life's challenges.

失落的訊息

一個晚上,我的手機螢幕亮起了一條WhatsApp訊息,讓我驚醒。以為是緊急事態,我很意外發現只是一個女孩說嗨。"Victor, 你過得如何?"來自香港的前女友Joanne發來的訊息。"你收到我的訊息了嗎?"她問道,"為什麼你沒有回覆?"

"我在從香港搬到新加坡的時候換了手機號碼,"我解釋道。當我說著的時候,我心中湧現出對她的思念,想知道遺失的訊息是什麼。

我們就讀不同的大學,選擇不同的學位。我對科學有興趣,選擇化學作為主修。我的目標是揭開宇宙的神秘面紗。和我不同,Joanne 是實際的。她進入會計領域,希望取得好成績,建立穩固的職業生涯,並獲得豐厚的薪水——同時找到一個合適且富有的丈夫。

在我們的一次午餐約會中,我建議道,"讓我帶你去我最喜歡的小販中心吃5美元的蛋炒飯。"她不滿意,回答說,"不,我想去日本餐廳吃美味的壽司,即使只是幾顆米。"我嘗試改變話題,談論我們的度假計劃。"我們去新加坡的圣淘沙島旅遊如何?"我提議。"不,我想去歐洲,去看瑞士的雪山,"她堅持。

金錢是個絆腳石。"這不僅僅是關於金錢,"Joanne詳述道。"這關乎你的抱負,去努力工作,賺更多錢,提升你的社會地位。這就是一個負責任的成年人該做的。"即使我長時間工作,但量子力學、薛丁格方程式和黑洞理論的專業知識並沒有讓我得到高薪工作。"Victor,你能不能成熟點?"她問。

最終,我換了工作,並得到了加薪。隨著收入的增加,我覺得需要提升自己的生活水平。當我告訴Joanne我正在考慮買車的時候,她立刻驚喜地叫道,"好呀!"我買了一輛藍色的Mini Cooper,她對此比我更興奮。

我開始每天用我的新車接送Joanne。我就像她的私人司機,經常免費接送她的家人和朋友。雖然維護車輛的費用很高,但維護和Joanne的關係更是昂貴。

Joanne非常喜愛名牌手袋。即使我無法正確地說出她最愛的牌子的名字,我也必須送她奢侈的禮物。不管是Gucci還是Chanel,其中任何一個手袋都會花掉我好幾個月的薪水。為了償還我的信用卡欠款,我不得不削減我給父母的零花錢,這讓我感到內疚。

在一頓浪漫的日本餐廳晚餐中,Joanne問,"Victor,你是不是比愛你的車還愛我?"我試圖以幽默來緩解這個緊張的時刻,答道,"當然,我愛我的車,"但她並不覺得好笑。我們繼續為些小事吵架。"Victor,你能不能更成熟一點?"她又問了。

我們是一對性格迥異的情侶。我是一個宅男軟體開發者,我更喜歡與機器交談而不是人。另一方面,Joanne是一家銀行的外向型關係經理,以軟性但堅定的口吻銷售金融產品。那意味著什麼?這意味著她賺的錢比我多。

經過18個月的交往,Joanne決定是時候做一個重要的選擇:繼續與這個"不成熟的傢伙"交往還是尋找替代品。在我們的一次通常的外出中,我感覺到有些不對勁。她變得冷淡,拒絕握住我的手。最後,在一個難熬的沉默之後,她說道,"Victor,我們分手吧。"我的心像是被撕裂般疼痛,我努力地忍住不流淚。"Victor,能你不能更成熟一點?"她再次這麼說。

我們在分手後仍然是朋友。雖然我依然在她生日時送她禮物,但她從未回贈。時間總能愈合一切,有一天,她的一條出乎意料的訊息突然出現。內容是,"嘿 Victor,我要結婚了。你想來參加嗎?"我有些惱怒,開始打"恭喜",但我從未按下送出。反倒是刪除了這則訊息。"我為什麼要去呢?"我對自己這麼想。

我後來在Facebook上看到了她的婚禮照片。她看起來很漂亮,她的丈夫看起來很富有,受過良好的教育。"真是浪費錢,"我這麼想,但很快就把那個念頭拋到腦後。我已經走出來了。人際關係建立在試錯上,大多是錯誤。如果你不想重蹈覆轍,就繼續看下去。我有很多關於如何應對生活挑戰的建議。