{"id":10156,"date":"2025-10-19T17:15:57","date_gmt":"2025-10-19T17:15:57","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=10156"},"modified":"2025-10-19T17:15:57","modified_gmt":"2025-10-19T17:15:57","slug":"ten-years-starting-again-my-journey-with-tidb-by-siddontang-oct-2025","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/10156\/","title":{"rendered":"Ten Years, Starting Again: My Journey with TiDB | by siddontang | Oct, 2025"},"content":{"rendered":"\n<\/p>\n<div>\n<div>\n<div>\n<div class=\"speechify-ignore ac cw\">\n<div class=\"speechify-ignore bi m\">\n<div class=\"ac im in io ip iq ir is it iu iv iw\">\n<div class=\"ac r iw\">\n<div class=\"ac ix\">\n<div>\n<div class=\"bn\" role=\"tooltip\">\n<div tabindex=\"-1\" class=\"bf\"><a target=\"_blank\" rel=\"noopener follow\" href=\"https:\/\/medium.com\/@siddontang?source=post_page---byline--d017139331a3---------------------------------------\" data-discover=\"true\"><\/p>\n<div class=\"m iy iz by ja jb\">\n<div class=\"m fr\"><img decoding=\"async\" alt=\"siddontang\" class=\"m fk by bz ca de\" src=\"https:\/\/miro.medium.com\/v2\/resize:fill:64:64\/0*zegCFdYrhS-1qBQw.png\" width=\"32\" height=\"32\" loading=\"lazy\" data-testid=\"authorPhoto\"\/><\/div>\n<\/div>\n<p><\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><span class=\"bg b bh ab bl\"\/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p id=\"9e96\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">The most precious things in life are memories and reflection.<\/p>\n<p id=\"99ec\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Time flies \u2014 ten years have passed. On April 1, 2015, Max asked me, very seriously on April Fools\u2019 Day, \u201cDo you want to start a company together?\u201d From that moment, I jumped on the TiDB train. The ride has been bumpy and brilliant.<\/p>\n<p id=\"c734\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">In these ten years, I\u2019ve been part of every step \u2014 from zero to one, from a small open-source project to a global product. Standing at this point in time, I want to write down the real story and lessons from this journey. It\u2019s a record of the past, and I also hope it helps friends who love technology and entrepreneurship.<\/p>\n<p id=\"ee70\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">This series isn\u2019t about bragging or sugar-coating. I want to share, honestly:<\/p>\n<ul class=\"\">\n<li id=\"0422\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">How a simple technical dream slowly became real<\/li>\n<li id=\"0246\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">How a programmer painfully \u2014 but necessarily \u2014 changes when tech meets business<\/li>\n<li id=\"32f2\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">How open source and customer success became TiDB\u2019s core DNA<\/li>\n<li id=\"2e5f\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">How to win global trust with technology and product<\/li>\n<li id=\"8fae\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">How a programmer grows into a manager \u2014 and then a technical leader<\/li>\n<\/ul>\n<p id=\"0dfb\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">I believe these real stories are the most valuable \u2014 and most worth recording.<\/p>\n<p id=\"0a83\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Alright, enough preface. Let\u2019s begin this trip down memory lane.<\/p>\n<h2 id=\"5c0d\" class=\"nz oa hl bg ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bl\">I. The Journey Begins \u2014 An April Fools\u2019 Invitation<\/h2>\n<h3 id=\"bf63\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">The April Fools\u2019 Day message<\/h3>\n<p id=\"9b7c\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">April 1, 2015. For programmers, it\u2019s a day to joke around. I didn\u2019t expect a message that felt too crazy to be true.<\/p>\n<p id=\"eda2\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">It was from Max. We\u2019d collaborated in the open-source community, but had never met in person. The message was short:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"6e8f\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cWe\u2019re going to start a company. We want to build a distributed database \u2014 open source. Want to join?\u201d<\/em><\/p>\n<\/blockquote>\n<p id=\"50eb\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">My brain froze. On April Fools\u2019 Day? Was he messing with me?<\/p>\n<p id=\"071e\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">I replied without thinking: \u201cAre you kidding me?\u201d<\/p>\n<p id=\"85a4\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Max replied immediately: \u201cI\u2019m serious.\u201d<\/p>\n<p id=\"1a1a\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">I was stunned. The \u201cjoke\u201d felt very real.<\/p>\n<h3 id=\"e21b\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Why me?<\/h3>\n<p id=\"78c9\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Why did Max think of me? Looking back, the answer is open source.<\/p>\n<p id=\"7a08\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We had worked together through issues and PRs. Even without meeting, we already knew each other\u2019s coding style and personality. That\u2019s the magic of open source: in our world, you don\u2019t rely on looks; your code is your face. Your skill and your character are all on GitHub.<\/p>\n<p id=\"04bc\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Without open source, we would\u2019ve been strangers. Even if we\u2019d met for coffee, trust wouldn\u2019t come so fast. Open source made us trust each other before we ever shook hands.<\/p>\n<p id=\"f90d\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">In a way, open source is like a matchmaking site for programmers \u2014 way more effective than coffee chats.<\/p>\n<h3 id=\"f56b\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Two shocks: open source and remote work<\/h3>\n<p id=\"9812\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">I still had doubts, but I kept chatting with Max. The more we talked, the more I felt they weren\u2019t joking.<\/p>\n<p id=\"92b2\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">\u201cOpen-source distributed database, change the world.\u201d Ten years ago, that sounded\u2026 well, a bit \u201cteenage-dream.\u201d Big dream, maybe a bit silly. Especially since none of us had written database source code before.<\/p>\n<p id=\"f658\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">I initially said no \u2014 the company would be in Beijing, and I lived in Zhuhai. I didn\u2019t want to move.<\/p>\n<p id=\"19bf\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Then Max said: \u201cYou can work from home.\u201d<\/p>\n<p id=\"6715\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Remember, this was ten years ago. A founder actively offering remote work? That was bold \u2014 even crazy.<\/p>\n<p id=\"2f90\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">At that moment I thought: this company will either fail fast, or be very, very cool.<\/p>\n<h3 id=\"ea39\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">First in-person meeting felt like old friends<\/h3>\n<p id=\"9514\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">I booked a flight to Beijing and finally met Max \u2014 and the other two founders, Ed and Dylan.<\/p>\n<p id=\"ce61\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Believe it or not, it was our first time meeting, but it felt like a reunion. No awkwardness at all. Pretty magical.<\/p>\n<p id=\"d0d7\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Why so much trust so fast? Again \u2014 open source.<\/p>\n<p id=\"8baa\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">From day one, open source became part of TiDB\u2019s bones \u2014 and later our strongest card when we went global.<\/p>\n<h3 id=\"4d25\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">\u201cTrue open source,\u201d almost fully transparent<\/h3>\n<p id=\"1693\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">From the first day, we chose \u201ctrue open source.\u201d What does that mean?<\/p>\n<p id=\"38f0\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We made almost everything public on GitHub \u2014 code, issues, bugs, PRs \u2014 totally transparent. Customers and peers could see everything, complain about anything.<\/p>\n<p id=\"5eeb\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">People asked, \u201cAren\u2019t you afraid customers will see all your bugs?\u201d<\/p>\n<p id=\"15e3\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We felt the opposite. Radical transparency builds trust.<\/p>\n<p id=\"22f3\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Customers could watch how we work, how we find and fix bugs, and how the product grows. In the end, this transparency brought us more trust than companies who try to hide their problems.<\/p>\n<h3 id=\"8c55\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Why build a distributed database?<\/h3>\n<p id=\"1c65\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">TiDB started with one pain: <strong class=\"mv hm\">sharding<\/strong>.<\/p>\n<p id=\"d7ae\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">As internet developers, we suffered from MySQL sharding. Every schema change meant a long night. It was painful.<\/p>\n<p id=\"1a24\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We wanted a truly <strong class=\"mv hm\">scalable<\/strong> distributed database that would end sharding nightmares.<\/p>\n<p id=\"7941\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">At the start, the idea was simple: solve our own pain. Later, we learned that this pure intention became our core strength \u2014 and a big reason customers chose us.<\/p>\n<h3 id=\"104d\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">The brave and the clueless<\/h3>\n<p id=\"e6eb\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Back then, none of us had database development experience. We were heavy users, not creators. Why did we dare to build one?<\/p>\n<p id=\"5543\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Sometimes, not knowing is a gift. As the saying goes: \u201cIgnorance is fearless.\u201d<\/p>\n<p id=\"b64d\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">With that courage, I became PingCAP\u2019s first full-time employee and began a ten-year journey building TiDB.<\/p>\n<p id=\"16cd\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">To this day, I\u2019m still proud of that decision.<\/p>\n<h2 id=\"7bc4\" class=\"nz oa hl bg ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bl\">II. The Joy of Building<\/h2>\n<h3 id=\"238e\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">When is building a product the happiest?<\/h3>\n<p id=\"b7af\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Programmers often ask: \u201cWhen is coding the happiest?\u201d<\/p>\n<p id=\"5f37\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">My answer is simple: <strong class=\"mv hm\">before the product has users.<\/strong><\/p>\n<p id=\"fe80\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Before customers show up, you can just write code. No angry calls, no urgent tickets, no midnight firefights. Pure joy.<\/p>\n<p id=\"239a\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">But products are for users. That happy time can\u2019t last forever.<\/p>\n<h3 id=\"c104\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">We weren\u2019t that crazy<\/h3>\n<p id=\"eb11\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Building a database from scratch sounds insane. But we didn\u2019t start blind. Google had published papers like Spanner. CockroachDB had already started a year earlier. HBase existed.<\/p>\n<p id=\"2172\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Building wheels isn\u2019t shameful. Building them with your eyes closed is. We stood on giants\u2019 shoulders \u2014 and borrowed many proven ideas.<\/p>\n<h3 id=\"41fe\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Why Go?<\/h3>\n<p id=\"9748\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">First step: pick a language. We chose Go \u2014 no hesitation.<\/p>\n<p id=\"5e46\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Why? We loved Go and knew it well. In unknown territory, the safest tool is the one you know.<\/p>\n<p id=\"f6eb\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Our strategy: get it running first.<\/p>\n<h3 id=\"c513\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">MySQL compatibility<\/h3>\n<p id=\"6932\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">We decided to be MySQL-compatible. That choice made TiDB a great MySQL alternative later.<\/p>\n<p id=\"4e9b\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">But wow, the pitfalls:<\/p>\n<ul class=\"\">\n<li id=\"923f\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Weird MySQL syntax corners<\/li>\n<li id=\"7872\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Endless compatibility quirks<\/li>\n<\/ul>\n<p id=\"33e5\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">It\u2019s a double-edged sword. But on balance, it helped more than it hurt.<\/p>\n<h3 id=\"5ae3\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Simple optimizer, classic executor<\/h3>\n<p id=\"d7ea\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Today TiDB has an advanced optimizer and engine. Back then, we had no optimizer background.<\/p>\n<p id=\"48d3\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">So we followed the programmer\u2019s rule: \u201cIf you don\u2019t know, build the simplest thing.\u201d We wrote a rule-based optimizer. For execution, we used the classic Volcano model \u2014 pull-based next layers. Simple and effective.<\/p>\n<p id=\"020a\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">That fearless simplicity gave us a usable first version quickly.<\/p>\n<h3 id=\"71ac\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Test-driven for real<\/h3>\n<p id=\"d283\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">From day one, we took testing seriously. It\u2019s a database \u2014 people\u2019s data is on the line. One big mistake, and we\u2019d be out of a job.<\/p>\n<p id=\"7f2f\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We once aimed for 100% test coverage. Sounds crazy, but it found tons of bugs.<\/p>\n<p id=\"7987\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Besides unit tests, we did \u201cextreme\u201d things:<\/p>\n<ul class=\"\">\n<li id=\"4929\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Ported SQLite\u2019s sqllogictest \u2014 felt painful at the time, but later we were so glad we did<\/li>\n<li id=\"c99b\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Learned Clojure to run Jepsen tests \u2014 caught many hidden transaction bugs<\/li>\n<li id=\"2ec2\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Used TLA+ to model-check core algorithms \u2014 hard work, better sleep<\/li>\n<li id=\"ef4b\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Built Chaos engineering tools \u2014 eventually open-sourced <strong class=\"mv hm\">Chaos Mesh<\/strong>, which many people love<\/li>\n<\/ul>\n<h3 id=\"5694\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Rust and TiKV: dodging the C++ trap<\/h3>\n<p id=\"2a7c\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Next challenge: storage. We refused to use C++. Too complex. Too risky.<\/p>\n<p id=\"2ba7\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Rust had just hit 1.0, so we took the leap:<\/p>\n<ul class=\"\">\n<li id=\"de44\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Great performance and memory safety; if it compiles, it tends to run well<\/li>\n<li id=\"71b5\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Strong community, which helped TiKV attract contributors<\/li>\n<\/ul>\n<p id=\"7c84\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">But Rust had downsides back then:<\/p>\n<ul class=\"\">\n<li id=\"c4d7\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Slow compile times<\/li>\n<li id=\"cd3b\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Young ecosystem \u2014 lots of wheels to build<\/li>\n<\/ul>\n<p id=\"44e9\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We also made a naming mistake: <strong class=\"mv hm\">Region<\/strong>. In HBase it means a data shard. Cloud providers also use \u201cRegion\u201d for geography. Endless confusion with customers. Lesson: naming is not trivial.<\/p>\n<h3 id=\"107d\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Spanner dreams, real-world compromises<\/h3>\n<p id=\"4fbf\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">We borrowed ideas from Spanner, but our customers didn\u2019t have Google\u2019s infrastructure \u2014 no TrueTime, no Colossus. Most ran on IDC hardware or VMs.<\/p>\n<p id=\"bbaa\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">So we chose a <strong class=\"mv hm\">shared-nothing<\/strong> design. It fit the time. But as cloud took over, its limits became clearer. We\u2019d have to evolve beyond it.<\/p>\n<h3 id=\"f3c3\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Summary: the golden, tech-driven days<\/h3>\n<p id=\"14c1\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Looking back, those early days were a programmer\u2019s paradise:<\/p>\n<ul class=\"\">\n<li id=\"d821\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Focused days, simple joy<\/li>\n<li id=\"424a\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">New technical challenges every week<\/li>\n<li id=\"7675\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Passion that drew brilliant hackers to join us<\/li>\n<\/ul>\n<p id=\"683f\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">That foundation carried us forward.<\/p>\n<h2 id=\"a1ac\" class=\"nz oa hl bg ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bl\">III. Commercialization: How Do We Survive?<\/h2>\n<h3 id=\"be2b\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">The soul question: \u201cWhere are the customers?\u201d<\/h3>\n<p id=\"bcca\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Early on, we loved the tech high. We didn\u2019t seriously ask:<\/p>\n<p id=\"fede\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">\u201c<strong class=\"mv hm\">How will we make money?<\/strong>\u201d<\/p>\n<p id=\"e18f\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We thought great code was enough. \u201cBusiness\u201d felt dirty to our idealistic programmer minds.<\/p>\n<p id=\"962b\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">But a company isn\u2019t a charity. No revenue, no future. The earlier you answer \u201cwho buys, and why,\u201d the fewer punches you take later.<\/p>\n<p id=\"909f\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">I regret not thinking about this sooner. Focusing on customer needs earlier would have helped the company \u2014 and my own growth.<\/p>\n<h3 id=\"01d8\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">From \u201ctech-first\u201d to \u201ccustomer-first\u201d \u2014 the painful switch<\/h3>\n<p id=\"b53a\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">The hardest transition for engineers? Moving from tech-first to customer-first.<\/p>\n<p id=\"b7f9\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We learned this the hard way.<\/p>\n<p id=\"0bd8\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">TiDB had a parameter that, when false, gave great performance but risked data loss on crash. In 2.0, we changed the default to true.<\/p>\n<p id=\"723d\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Sounded reasonable. But some open-source users upgraded and saw performance fall off a cliff. Their businesses broke.<\/p>\n<p id=\"2f2f\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We realized: upgrades should keep old behavior for existing users, while new installs get the new default. A simple thought \u2014 but we missed it because we were stuck in our tech logic instead of real customer scenarios.<\/p>\n<p id=\"f75b\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We repeated similar mistakes a few times. Each time, it reminded us:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"bf91\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cBuild for real customer scenarios \u2014 not for your own elegance.\u201d<\/em><\/p>\n<\/blockquote>\n<h3 id=\"1443\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">The painful game launch failure<\/h3>\n<p id=\"8bd6\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">One game company chose TiDB for a global launch. On launch day, a single hot SQL brought TiDB to its knees. We watched it happen. It was brutal.<\/p>\n<p id=\"4d7a\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">If we had:<\/p>\n<ul class=\"\">\n<li id=\"9f7a\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Reviewed their SQL earlier<\/li>\n<li id=\"937d\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Built tools to split hotspots<\/li>\n<\/ul>\n<p id=\"e40f\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">\u2026maybe we could\u2019ve avoided it.<\/p>\n<p id=\"2d54\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">But there\u2019s no \u201cmaybe\u201d in production. They failed to launch. That taught us:<\/p>\n<ul class=\"\">\n<li id=\"6834\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Real customer scenarios are complex<\/li>\n<li id=\"ad75\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Databases are not just tech \u2014 you also need delivery, service, support<\/li>\n<li id=\"9062\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Always respect the customer\u2019s business<\/li>\n<\/ul>\n<p id=\"5852\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">After that, we never \u201ctech-showed-off\u201d lightly again.<\/p>\n<h3 id=\"f51a\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">A bank launch success: a turning point<\/h3>\n<p id=\"f4cc\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Soon we got another chance: a bank core system project.<\/p>\n<p id=\"e5e6\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">This time we were fully pragmatic:<\/p>\n<ul class=\"\">\n<li id=\"418e\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">We walked every business path with the customer<\/li>\n<li id=\"ebf4\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Reviewed everything that might break<\/li>\n<li id=\"fe57\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Fixed weak spots fast<\/li>\n<li id=\"bcb9\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Prepared full launch and rollback plans<\/li>\n<\/ul>\n<p id=\"cf2e\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">It worked. The launch succeeded. The customer praised us. That success built our confidence \u2014 and pushed us from \u201ctech-first\u201d to \u201ccustomer success-first.\u201d<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"73d4\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cA product is good only if the customer says it is. When customers win, the product wins.\u201d<\/em><\/p>\n<\/blockquote>\n<h3 id=\"c00d\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">The long road to business maturity<\/h3>\n<p id=\"2149\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">The switch from tech-driven to customer- and business-driven was long and painful. Honestly, even now, the \u201ctech-driven bug\u201d is still inside us.<\/p>\n<p id=\"60a9\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">But databases are different:<\/p>\n<ul class=\"\">\n<li id=\"53fa\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">They\u2019re not just products \u2014 they\u2019re <strong class=\"mv hm\">services<\/strong><\/li>\n<li id=\"76c2\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Product quality, delivery, and support all matter<\/li>\n<li id=\"2e85\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\"><strong class=\"mv hm\">Customer success<\/strong> is the real north star<\/li>\n<\/ul>\n<h3 id=\"ea4d\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Summary: making money isn\u2019t shameful<\/h3>\n<p id=\"a609\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">One sentence to fellow programmers:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"17fb\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cMaking money isn\u2019t shameful. Customers paying you is the best proof your tech creates value.\u201d<\/em><\/p>\n<\/blockquote>\n<p id=\"693e\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We write code so customers can succeed. Then the company succeeds. And so do we.<\/p>\n<h2 id=\"395d\" class=\"nz oa hl bg ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bl\">IV. The Power of Scalability<\/h2>\n<h3 id=\"25aa\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">From complaints to growth: TiDB 3.0\u2019s turning point<\/h3>\n<p id=\"8b1a\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Early TiDB had poor performance. Customers complained: \u201cIt scales, but it\u2019s slow.\u201d<\/p>\n<p id=\"a5bc\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We knew we had to fix performance. In 3.0, we optimized key paths with multi-threading. Performance jumped several times.<\/p>\n<p id=\"ff9c\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">After 3.0, customer adoption grew fast.<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"a4a0\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cOnce performance crosses the threshold, scalability becomes a superpower.\u201d<\/em><\/p>\n<\/blockquote>\n<h3 id=\"14f7\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">The bike that wouldn\u2019t unlock<\/h3>\n<p id=\"38ed\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">One morning, I tried to unlock a shared bike. It wouldn\u2019t open. People around me complained too.<\/p>\n<p id=\"cde1\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Later, I learned our TiDB had gone down for that system. The app couldn\u2019t unlock bikes.<\/p>\n<p id=\"dc82\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">I felt terrible. Our product messed up my daily life. But I also realized:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"5808\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cTiDB is running core systems at many companies now.\u201d<\/em><\/p>\n<\/blockquote>\n<p id=\"020d\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Scalability earns trust \u2014 but when you fail, the blast radius is big.<\/p>\n<h3 id=\"ae27\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Midnight disk-full horror<\/h3>\n<p id=\"e9ba\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">At a customer with 100+ TB clusters, disks filled up overnight. TiKV crashed repeatedly. Chaos.<\/p>\n<p id=\"4dd5\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Deleting logs was too slow. Migrating data produced snapshots that also ate disk.<\/p>\n<p id=\"e112\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We stayed until 4 a.m., and found a way:<\/p>\n<ul class=\"\">\n<li id=\"8867\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Slow down scheduling to reduce snapshots<\/li>\n<li id=\"4d8d\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Throttle writes so the system could rebalance<\/li>\n<\/ul>\n<p id=\"ddaf\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">It worked. But it reminded us: big scale means big responsibility.<\/p>\n<h3 id=\"0158\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Why customers came back from competitors<\/h3>\n<p id=\"b447\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Overseas, we lost to big-name competitors a few times. A few months later, customers returned.<\/p>\n<p id=\"2ee8\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">The reason: at real scale, the competitors couldn\u2019t keep up. TiDB could.<\/p>\n<p id=\"bf33\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Scalability isn\u2019t a slogan \u2014 it decides real-world choices.<\/p>\n<h3 id=\"81ae\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Fast growth, hidden risks<\/h3>\n<p id=\"7335\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">After 3.0, growth was almost too smooth. Confidence turned into overconfidence. Later, quality problems exploded.<\/p>\n<p id=\"a33b\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">But that\u2019s a later chapter.<\/p>\n<h3 id=\"3d0e\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Summary: power and responsibility<\/h3>\n<p id=\"747d\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Scalability won us customers \u2014 and more duty. The more core the workload, the less room for error.<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"c5e6\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cScalability is our superpower \u2014 and a heavy responsibility.\u201d<\/em><\/p>\n<\/blockquote>\n<h2 id=\"7ed6\" class=\"nz oa hl bg ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bl\">V. From Chaos to First Light (Product- and Customer-Driven)<\/h2>\n<h3 id=\"5df7\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">The pain of TiDB 4.0<\/h3>\n<p id=\"ca15\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">We moved fast \u2014 too fast. 4.0 exposed the cost. We kept a \u201cone big release per year\u201d cadence, but internally it was chaos: too many features, not enough testing, quality drifting out of control.<\/p>\n<p id=\"ee1f\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We shipped 4.0 and followed it with <strong class=\"mv hm\">12<\/strong> patch releases to stabilize. Customer complaints hit hard. My mornings began with \u201cDid another customer blow up overnight?\u201d<\/p>\n<p id=\"377c\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We had to change.<\/p>\n<h3 id=\"615a\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">The arrogance of \u201cno PMs\u201d<\/h3>\n<p id=\"387c\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">We made a huge mistake: we basically had no PMs.<\/p>\n<p id=\"1055\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We even said, proudly, \u201cWe don\u2019t need PMs. Engineers are the best PMs.\u201d<\/p>\n<p id=\"ea60\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Terrible idea.<\/p>\n<p id=\"a082\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Without PMs:<\/p>\n<ul class=\"\">\n<li id=\"9e78\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">No one set feature priorities<\/li>\n<li id=\"1990\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">No one drove product strategy<\/li>\n<li id=\"07db\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">No one deeply studied customer scenarios<\/li>\n<\/ul>\n<p id=\"c7a1\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We ended up with a stew of features and no clear direction.<\/p>\n<h3 id=\"0ccc\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Introducing PMs: the real turn<\/h3>\n<p id=\"9317\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">We finally accepted reality: engineers can\u2019t do everything. Product needs product owners.<\/p>\n<p id=\"457c\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">When PMs joined:<\/p>\n<ul class=\"\">\n<li id=\"d126\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Feature priorities became clear<\/li>\n<li id=\"856c\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Each release had a theme<\/li>\n<li id=\"9c45\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">We focused on customer problems and regained trust<\/li>\n<\/ul>\n<h3 id=\"c588\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Release cadence: from 1 year \u2192 2 months \u2192 6 months<\/h3>\n<p id=\"87f2\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">After 4.0, we tried a \u201ctrain model\u201d every two months \u2014 small, fast releases with better quality.<\/p>\n<p id=\"d6e3\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">But too many versions confused customers. Bug fixes required endless cherry-picks. Dev cost ballooned.<\/p>\n<p id=\"3f85\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We eventually settled on <strong class=\"mv hm\">6-month releases<\/strong>:<\/p>\n<ul class=\"\">\n<li id=\"e389\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Good balance of stability and speed<\/li>\n<li id=\"9b27\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Reasonable version count<\/li>\n<li id=\"491a\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Enough time to ensure quality<\/li>\n<\/ul>\n<h3 id=\"67ec\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Quality first: starting with 6.0<\/h3>\n<p id=\"69bf\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">After the 4.0 pain, we made quality #1 in 6.0:<\/p>\n<ul class=\"\">\n<li id=\"cea8\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Reduced memory usage, fewer OOMs<\/li>\n<li id=\"76ea\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Smoothed disk I\/O<\/li>\n<li id=\"4b84\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Focused on stability over fancy features<\/li>\n<\/ul>\n<p id=\"a7b6\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Customer feedback improved quickly.<\/p>\n<h3 id=\"642f\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">In the cloud era: back to one LTS per year<\/h3>\n<p id=\"00d3\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Cloud changed the game:<\/p>\n<ul class=\"\">\n<li id=\"7c06\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">We can ship features faster on cloud<\/li>\n<li id=\"3d16\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Use early cloud feedback to validate<\/li>\n<li id=\"dfcf\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Then roll stable features into an annual LTS<\/li>\n<\/ul>\n<p id=\"d6a7\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Innovation speed + LTS stability = a strong combo.<\/p>\n<h3 id=\"a419\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Back to basics: what is a database?<\/h3>\n<p id=\"e45a\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">We asked ourselves:<\/p>\n<p id=\"3fa8\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">\u201cWhat is a database, really?\u201d<\/p>\n<p id=\"0f2e\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Answer:<\/p>\n<ul class=\"\">\n<li id=\"fe67\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">It doesn\u2019t need a thousand fancy features<\/li>\n<li id=\"013e\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">It must make data handling safe, stable, and easy<\/li>\n<\/ul>\n<p id=\"a7ec\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">That insight reshaped our roadmap.<\/p>\n<h3 id=\"a930\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Summary: from chaos to clarity<\/h3>\n<p id=\"992f\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">We shifted from messy growth to product and customer success focus:<\/p>\n<ul class=\"\">\n<li id=\"2eee\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">PMs matter<\/li>\n<li id=\"130f\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Quality comes first<\/li>\n<li id=\"47fa\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Cadence must fit reality<\/li>\n<li id=\"95d1\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Cloud lets us innovate safely<\/li>\n<li id=\"c8c1\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">And we re-learned the simple truth of databases<\/li>\n<\/ul>\n<h2 id=\"ffc6\" class=\"nz oa hl bg ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bl\">VI. TiDB Cloud: A Hard, Rewarding Journey<\/h2>\n<h3 id=\"7e60\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">The early misunderstanding: \u201cJust run it on the cloud?\u201d<\/h3>\n<p id=\"51ee\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">We thought cloud was simple:<\/p>\n<p id=\"2072\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">\u201cJust run TiDB on the cloud.\u201d<\/p>\n<p id=\"28ae\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Reality slapped us. Hard. Many times.<\/p>\n<p id=\"47f8\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Same as early Kubernetes: \u201cJust write a YAML.\u201d But production is a different world.<\/p>\n<h3 id=\"f18e\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Early Kubernetes pain<\/h3>\n<p id=\"f87c\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">In 2018, we built TiDB Cloud on Kubernetes. AWS EKS wasn\u2019t mature yet. We chose an open-source project called Gardener and ran K8s ourselves.<\/p>\n<p id=\"ebe5\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">That decision became a nightmare:<\/p>\n<ul class=\"\">\n<li id=\"cf04\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Poor stability<\/li>\n<li id=\"9460\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Huge maintenance cost<\/li>\n<li id=\"30c7\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Engineers suffered daily<\/li>\n<\/ul>\n<p id=\"ef28\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">It took years to migrate to managed EKS. Lesson:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"b682\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cIn the cloud era, trust the cloud vendors\u2019 pace of progress.\u201d<\/em><\/p>\n<\/blockquote>\n<h3 id=\"4c52\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">From local disks to cloud disks: a mindset shift<\/h3>\n<p id=\"ed2a\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">We were stubborn about local disks:<\/p>\n<ul class=\"\">\n<li id=\"33b4\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Better performance, we said<\/li>\n<li id=\"162b\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">We spent huge effort making K8s schedule local disks<\/li>\n<li id=\"c229\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Later cloud disks improved so fast that local disk ops became a nightmare<\/li>\n<\/ul>\n<p id=\"3f35\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">As customers grew, local disk Ops alone could drown us.<\/p>\n<p id=\"44e5\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Looking back, it was a fight between programmer perfectionism and cloud reality \u2014 and reality won.<\/p>\n<h3 id=\"8dff\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Running a cloud service: we sell service, not software<\/h3>\n<p id=\"aee8\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">With software, you ship and leave. Ops is the customer\u2019s job.<\/p>\n<p id=\"3dc2\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">With cloud, the customer buys <strong class=\"mv hm\">service<\/strong>:<\/p>\n<ul class=\"\">\n<li id=\"70a0\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">SLA<\/li>\n<li id=\"5206\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Maintenance windows<\/li>\n<li id=\"587c\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Security and compliance<\/li>\n<li id=\"db00\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">When there\u2019s an issue, you jump in \u2014 now<\/li>\n<\/ul>\n<p id=\"5a9b\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Doing cloud Ops well is way harder than writing good software. But that pain grew us into a service-oriented team.<\/p>\n<h3 id=\"7edf\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Next-gen TiDB Cloud: from shared-nothing to shared-everything<\/h3>\n<p id=\"e548\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Classic TiDB was <strong class=\"mv hm\">shared-nothing<\/strong> \u2014 great for IDC days, but cloud exposed limits:<\/p>\n<ul class=\"\">\n<li id=\"e84b\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Node failures trigger data rescheduling<\/li>\n<li id=\"e2f8\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Storage expansion ties to physical nodes, expensive and slow<\/li>\n<\/ul>\n<p id=\"9a9c\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We began a big shift:<\/p>\n<ul class=\"\">\n<li id=\"00ec\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Move data from cloud disks to <strong class=\"mv hm\">S3 object storage<\/strong><\/li>\n<li id=\"710f\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Evolve from shared-nothing to a more <strong class=\"mv hm\">shared-everything<\/strong> style<\/li>\n<li id=\"f3c7\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Split into micro-services to improve elasticity and resource efficiency<\/li>\n<\/ul>\n<p id=\"e432\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">\u201cWon\u2019t S3 be slow?\u201d Not if you layer caching and optimize the access paths. (More on that another time.)<\/p>\n<p id=\"c66d\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Splitting services helped a lot:<\/p>\n<ul class=\"\">\n<li id=\"ae48\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Heavy I\/O tasks (like compaction) became independent<\/li>\n<li id=\"f228\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Scale up under load, scale down when idle<\/li>\n<li id=\"539a\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Lower cloud costs<\/li>\n<\/ul>\n<p id=\"b297\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">After this, we finally found the right posture for the cloud.<\/p>\n<h3 id=\"62c1\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Summary: pain, lessons, and a clearer future<\/h3>\n<p id=\"1a9c\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">We paid a lot of tuition on cloud:<\/p>\n<ul class=\"\">\n<li id=\"e24d\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">K8s choices, disk choices, architecture changes<\/li>\n<li id=\"5d94\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Service Ops and customer support systems<\/li>\n<\/ul>\n<p id=\"ac15\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Today, TiDB Cloud is already over half of company revenue. That says it all: cloud isn\u2019t just the future \u2014 it\u2019s the present.<\/p>\n<p id=\"0959\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">The road was hard, but we found our way. And there\u2019s much further to go.<\/p>\n<h2 id=\"b909\" class=\"nz oa hl bg ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bl\">VII. Going Global: A Programmer\u2019s International Challenge<\/h2>\n<h3 id=\"b618\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Global trust is hard<\/h3>\n<p id=\"6b7f\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">When we faced the global market, a question appeared:<\/p>\n<p id=\"08cc\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">\u201cWhy would companies trust a database from a bunch of unknowns?\u201d<\/p>\n<p id=\"e06f\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Databases hold a company\u2019s life. Trust doesn\u2019t come easy.<\/p>\n<h3 id=\"05ed\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Open source: our ace card<\/h3>\n<p id=\"9711\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">TiDB was open source from day one. That gave us an advantage:<\/p>\n<ul class=\"\">\n<li id=\"cc39\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Customers could try it themselves<\/li>\n<li id=\"7147\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">They could read the code and see how bugs were handled<\/li>\n<li id=\"40ad\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Trust barriers dropped<\/li>\n<\/ul>\n<p id=\"fd5a\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">A Japanese payments company found us this way. They used AWS Aurora at first, but big promos crashed it. They searched open-source options, tried TiDB, and switched. Today, TiDB is one of the mainstream choices in Japan\u2019s payment sector.<\/p>\n<p id=\"1e97\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Open source is powerful.<\/p>\n<h3 id=\"780a\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">When a TiKV finally crashed \u2014 we smiled<\/h3>\n<p id=\"1d86\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">The same customer later reported: \u201cA TiKV node crashed!\u201d<\/p>\n<p id=\"5a2f\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We checked and found it hadn\u2019t been restarted in <strong class=\"mv hm\">three years<\/strong>.<\/p>\n<p id=\"98e3\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We were shocked \u2014 and thrilled. That kind of stability is a strong selling point.<\/p>\n<p id=\"3963\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">In another incident, an AWS AZ in Japan went down. Their services had issues, but TiDB kept serving. That boosted global trust.<\/p>\n<h3 id=\"13e2\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Donating to CNCF: more than code dumps<\/h3>\n<p id=\"2957\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">To boost global awareness, we did two big things:<\/p>\n<ul class=\"\">\n<li id=\"d91c\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Donated <strong class=\"mv hm\">TiKV<\/strong> to CNCF; it became a CNCF <strong class=\"mv hm\">graduated<\/strong> project<\/li>\n<li id=\"dadf\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Donated <strong class=\"mv hm\">Chaos Mesh<\/strong> to CNCF, helping many engineers test reliability<\/li>\n<\/ul>\n<p id=\"deae\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">These donations increased trust and visibility worldwide.<\/p>\n<h3 id=\"4386\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Rust: a surprise global booster<\/h3>\n<p id=\"a735\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Choosing Rust for TiKV helped global adoption:<\/p>\n<ul class=\"\">\n<li id=\"c7e8\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">The Rust community is global and active<\/li>\n<li id=\"c798\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Engineers loved contributing<\/li>\n<li id=\"ec4e\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">TiKV became a star project in the Rust world<\/li>\n<\/ul>\n<p id=\"1b8d\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">That indirectly helped us win overseas customers.<\/p>\n<h3 id=\"98c0\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Real internationalization is local<\/h3>\n<p id=\"f752\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">We used to think \u201cinternationalization\u201d meant translating docs and flying a salesperson over.<\/p>\n<p id=\"06d4\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We learned:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"bdd0\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cThe best internationalization is localization.\u201d<\/em><\/p>\n<\/blockquote>\n<p id=\"6e8e\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Culture matters. Tech alone won\u2019t save you if support isn\u2019t local and responsive.<\/p>\n<p id=\"504c\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">So we:<\/p>\n<ul class=\"\">\n<li id=\"4488\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Built local teams in the US, Europe, Japan, and Southeast Asia<\/li>\n<li id=\"bf36\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Offered 24\/7 global-local support<\/li>\n<li id=\"171e\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Hired local sales and presales to understand culture and needs<\/li>\n<\/ul>\n<p id=\"4c19\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">That\u2019s how we built a real global presence.<\/p>\n<h3 id=\"1ee0\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">A dream in the Computer History Museum<\/h3>\n<p id=\"5c3f\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">In 2018, Ed and I visited the Computer History Museum in Mountain View. We joked:<\/p>\n<p id=\"1d46\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">\u201cI hope TiDB will be in a display case here someday.\u201d<\/p>\n<p id=\"bb3d\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">If that day comes, it means TiDB truly earned global recognition.<\/p>\n<p id=\"6718\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">That dream still pushes us forward.<\/p>\n<h3 id=\"3164\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Summary: from programmers to a truly global team<\/h3>\n<p id=\"3cc8\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Our global path was tough but full of gains:<\/p>\n<ul class=\"\">\n<li id=\"c958\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Open source opened doors<\/li>\n<li id=\"df43\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Rust and CNCF raised our global reputation<\/li>\n<li id=\"97f9\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Localization is the heart of internationalization<\/li>\n<li id=\"7298\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Global teams are the foundation of global customer success<\/li>\n<\/ul>\n<p id=\"3832\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Today, with many customers worldwide, we can proudly say:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"9cee\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cWe are an open-source database trusted around the world.\u201d<\/em><\/p>\n<\/blockquote>\n<h2 id=\"cc45\" class=\"nz oa hl bg ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bl\">VIII. Customer Success: A Programmer\u2019s Highest Pride<\/h2>\n<h3 id=\"993c\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">What is customer success?<\/h3>\n<p id=\"f244\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Customer success has been PingCAP\u2019s core value from day one.<\/p>\n<p id=\"a910\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">At first, we believed success meant:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"59c9\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cWrite elegant, efficient, awesome code.\u201d<\/em><\/p>\n<\/blockquote>\n<p id=\"b414\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Over time, we learned the real standard:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"7312\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><strong class=\"mv hm\"><em class=\"hl\">Customer success.<\/em><\/strong><\/p>\n<\/blockquote>\n<p id=\"6566\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">If our database makes a customer\u2019s business better, then we truly succeeded.<\/p>\n<h3 id=\"cda4\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Customers are the best teachers<\/h3>\n<p id=\"0179\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Why do we emphasize customer success?<\/p>\n<p id=\"263d\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Yes, it\u2019s practical \u2014 customers pay the bills.<\/p>\n<p id=\"a2ab\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">But more importantly, customers teach us:<\/p>\n<ul class=\"\">\n<li id=\"9b98\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">They know their business best<\/li>\n<li id=\"e3d8\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Real needs push tech forward<\/li>\n<li id=\"9f13\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">They help us break our own mental limits<\/li>\n<\/ul>\n<h3 id=\"9f80\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Pushing limits: importing a 50 TB single table<\/h3>\n<p id=\"8084\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Another North American customer asked:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"cffc\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cCan you import a <\/em><strong class=\"mv hm\"><em class=\"hl\">50 TB<\/em><\/strong><em class=\"hl\"> single table?\u201d<\/em><\/p>\n<\/blockquote>\n<p id=\"4fff\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We failed the first few times. The customer was furious: \u201cFix it in a week or we cancel.\u201d<\/p>\n<p id=\"98f4\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We worked day and night, optimized, and made it happen.<\/p>\n<p id=\"1d38\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Then another customer asked: \u201cWhat about <strong class=\"mv hm\">100 TB<\/strong>?\u201d Thanks to the 50 TB work, they succeeded on their own.<\/p>\n<p id=\"a712\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We realized:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"1138\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cTiDB can go further than we thought.\u201d<\/em><\/p>\n<\/blockquote>\n<h3 id=\"7174\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">SaaS and one million tables<\/h3>\n<p id=\"9d92\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">A top SaaS customer asked:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"5493\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cCan TiDB support <\/em><strong class=\"mv hm\"><em class=\"hl\">1,000,000 tables<\/em><\/strong><em class=\"hl\">?\u201d<\/em><\/p>\n<\/blockquote>\n<p id=\"2400\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We were shocked. Typical OLTP doesn\u2019t have that many. But for multi-tenant SaaS, each tenant has its own database with a few tables. With enough tenants, one cluster needs a million tables.<\/p>\n<p id=\"874f\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We had never designed for that.<\/p>\n<p id=\"69f3\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We refactored deeply:<\/p>\n<ul class=\"\">\n<li id=\"af89\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Schema layer<\/li>\n<li id=\"418d\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Optimizer<\/li>\n<li id=\"cfc6\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Memory use per table<\/li>\n<\/ul>\n<p id=\"9db8\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We made it. After that, more SaaS customers came.<\/p>\n<h3 id=\"ddd0\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Should engineers support customers directly?<\/h3>\n<p id=\"dccd\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Engineers prefer quiet coding. Few want customer calls and on-site visits.<\/p>\n<p id=\"4789\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">But we decided engineers must support customers. We created <strong class=\"mv hm\">Customer Advocate<\/strong>:<\/p>\n<ul class=\"\">\n<li id=\"5134\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Assign an engineer owner to key customers<\/li>\n<li id=\"23ee\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">They understand the scenario deeply<\/li>\n<li id=\"7815\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">They coordinate help when issues arise<\/li>\n<\/ul>\n<p id=\"bfd8\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">One engineer met with the same customer 200+ times in a year. Sounds crazy. But the result was great:<\/p>\n<ul class=\"\">\n<li id=\"a4a6\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Customers got expert help<\/li>\n<li id=\"d593\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Engineers got real feedback<\/li>\n<li id=\"1489\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Satisfaction and loyalty rose<\/li>\n<\/ul>\n<p id=\"7176\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">That customer moved from HBase to TiDB, and now is cutting over larger Aurora workloads, too.<\/p>\n<h3 id=\"b859\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">The value is in real scenarios<\/h3>\n<p id=\"ac6f\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">We learned:<\/p>\n<ul class=\"\">\n<li id=\"c323\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Customers are experts<\/li>\n<li id=\"1020\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Real scenarios beat paper designs<\/li>\n<li id=\"27d1\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Only by going to the front lines can we build what customers actually need<\/li>\n<\/ul>\n<p id=\"8342\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">That approach won us broad recognition.<\/p>\n<h3 id=\"d6af\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Summary: the highest pride<\/h3>\n<p id=\"11d7\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Switching from tech-first to customer-first isn\u2019t easy. But once you do, you see:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"a831\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cCustomer success is the programmer\u2019s highest pride.\u201d<\/em><\/p>\n<\/blockquote>\n<p id=\"ef97\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Every \u201cthank you,\u201d every bit of trust, every customer win \u2014 that\u2019s our fuel.<\/p>\n<p id=\"527a\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We\u2019ll keep doing one thing:<\/p>\n<p id=\"d5f7\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><strong class=\"mv hm\">Put customer success first, and keep building a better database.<\/strong><\/p>\n<h2 id=\"8faa\" class=\"nz oa hl bg ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bl\">IX. My Ten Years of Growth: From Programmer to Technical Leader<\/h2>\n<h3 id=\"bd09\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Ten years as \u201cEmployee No1\u201d<\/h3>\n<p id=\"1477\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">I joined as PingCAP\u2019s first official employee and lived through TiDB\u2019s whole journey from zero to global. The company changed fast, and so did I \u2014 moving from coder to technical leader.<\/p>\n<h3 id=\"3380\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">First management lesson: respect Conway\u2019s Law<\/h3>\n<p id=\"fc6c\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Conway\u2019s Law:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"5f41\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cOrganizations design systems that mirror their communication structures.\u201d<\/em><\/p>\n<\/blockquote>\n<p id=\"254c\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">To build a great product, build the right organization.<\/p>\n<p id=\"876a\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">TiDB is distributed, so our organization had to be distributed. That brings challenges:<\/p>\n<ul class=\"\">\n<li id=\"4ed1\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Different time zones \u2014 how do we communicate well?<\/li>\n<li id=\"597b\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">How to avoid silos?<\/li>\n<li id=\"f3af\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">How to keep collaboration fast?<\/li>\n<\/ul>\n<p id=\"4bac\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We suffered early, then learned to collaborate asynchronously.<\/p>\n<h3 id=\"9c76\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">The art of async: code and docs beat meetings<\/h3>\n<p id=\"a655\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">With a global team, meetings are hard. We centered communication on GitHub \u2014 code and docs:<\/p>\n<ul class=\"\">\n<li id=\"ecef\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Every feature has clear docs<\/li>\n<li id=\"0184\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Every major decision has a design doc and review<\/li>\n<li id=\"e070\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Daily work happens in issues and PRs<\/li>\n<\/ul>\n<p id=\"b5f8\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">It\u2019s far more efficient than endless meetings.<\/p>\n<h3 id=\"714e\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">The power of terminology<\/h3>\n<p id=\"0c98\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">We didn\u2019t respect terminology early on. Global teams got confused by words that meant different things to different people.<\/p>\n<p id=\"8241\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">I led many standardization efforts. Once we aligned terms, communication sped up.<\/p>\n<h3 id=\"68a8\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Leveling up: from team lead to department head<\/h3>\n<p id=\"c538\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Going from IC to lead is tough. Going from lead to department head is a different game:<\/p>\n<ul class=\"\">\n<li id=\"142d\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Delegate and trust<\/li>\n<li id=\"e676\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Focus on culture and environment<\/li>\n<li id=\"ad6a\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Motivate managers and their teams<\/li>\n<\/ul>\n<p id=\"38c7\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">These skills go beyond pure tech. They stretched me a lot.<\/p>\n<h3 id=\"95e3\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Cultural shift: product- and customer-first<\/h3>\n<p id=\"63f6\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">Culture matters more than process. Our culture focus: <strong class=\"mv hm\">customer success<\/strong>.<\/p>\n<p id=\"750c\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">We repeated it in meetings, reviews, and plans:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"97d8\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cWe write code for real customer needs.\u201d<\/em><\/p>\n<\/blockquote>\n<p id=\"39c9\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">That culture improved quality and satisfaction.<\/p>\n<h3 id=\"bbb6\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">What is a true technical leader?<\/h3>\n<p id=\"6a49\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">I used to think great tech was enough. Now I know:<\/p>\n<ul class=\"\">\n<li id=\"4e98\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Tech is the baseline<\/li>\n<li id=\"654c\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Communication, organization, empathy, business sense, and customer view are just as important<\/li>\n<\/ul>\n<p id=\"d329\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">A real technical leader understands people, business, and customers \u2014 not just code.<\/p>\n<h3 id=\"3323\" class=\"ox oa hl bg ob oy oz ef of pa pb eh oj ne pc pd pe ni pf pg ph nm pi pj pk pl bl\">Summary: the next ten years start now<\/h3>\n<p id=\"ac35\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">In ten years, I grew from engineer to leader. I watched our product grow and changed with it.<\/p>\n<p id=\"9356\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">I\u2019m still excited:<\/p>\n<ul class=\"\">\n<li id=\"8e98\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">To keep growing<\/li>\n<li id=\"65af\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">To lead the team to bigger wins<\/li>\n<li id=\"8491\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">To become a better technical leader<\/li>\n<\/ul>\n<p id=\"06bf\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Just like the day I joined:<\/p>\n<blockquote class=\"pr ps pt\">\n<p id=\"8ec4\" class=\"mt mu pu mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\"><em class=\"hl\">\u201cMy next ten-year journey is just beginning.\u201d<\/em><\/p>\n<\/blockquote>\n<h2 id=\"b82c\" class=\"nz oa hl bg ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bl\">X. Goodbye, First Decade \u2014 Hello, Next Journey<\/h2>\n<p id=\"ab62\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">There\u2019s so much more than I can fit here. Ten years hold too many moments.<\/p>\n<p id=\"786e\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Looking back: there were surprises, challenges, and so much growth. From Max\u2019s April Fools\u2019 message to today\u2019s globally known open-source distributed database; from chasing technical perfection to holding onto customer success as the root; from a simple startup dream to a global, cloud-era product \u2014 this journey gave me far more than I imagined.<\/p>\n<p id=\"4595\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">If I must summarize:<\/p>\n<ul class=\"\">\n<li id=\"0a18\" class=\"mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt bl\">Open source is a belief that wins trust from users and community<\/li>\n<li id=\"d7ed\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Product focus + customer success = real growth<\/li>\n<li id=\"9112\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Scalability is not only a technical edge \u2014 it\u2019s a growth engine for customers and the business<\/li>\n<li id=\"36aa\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Internationalization requires localization \u2014 and expands both culture and thinking<\/li>\n<li id=\"1eb8\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">A programmer\u2019s real pride isn\u2019t lines of code \u2014 it\u2019s customers succeeding because of your product<\/li>\n<li id=\"5d37\" class=\"mt mu hl mv b mw nu my mz na nv nc nd ne nw ng nh ni nx nk nl nm ny no np nq nr ns nt bl\">Growing from tech to management is painful but necessary \u2014 it teaches lessons beyond code<\/li>\n<\/ul>\n<p id=\"7f1e\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">TiDB has walked ten years. My journey is just starting. I believe the next decade will bring more growth, more challenges, and \u2014 always \u2014 customer success. We\u2019ll keep building a better product for customers around the world.<\/p>\n<p id=\"8295\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">Thank you to every customer, partner, and colleague over these ten years. Your trust and company made all this possible.<\/p>\n<p id=\"5a12\" class=\"pw-post-body-paragraph mt mu hl mv b mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq he bl\">See you in the next decade.<\/p>\n<h2 id=\"9d19\" class=\"nz oa hl bg ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow bl\">Acknowledgments<\/h2>\n<p id=\"a2c2\" class=\"pw-post-body-paragraph mt mu hl mv b mw pm my mz na pn nc nd ne po ng nh ni pp nk nl nm pq no np nq he bl\">This article came from my spoken words, recorded with ChatGPT, then turned into text and organized with GPT-5. I guess GPT-5 picked up some of my writing style from the recording, so I only did light edits. AI is getting stronger and stronger. In the next decade, TiDB will also have many new stories in AI \u2014 but that\u2019s for another time.<\/p>\n<\/div>\n\n<br \/><a href=\"https:\/\/medium.com\/@siddontang\/ten-years-starting-again-my-journey-with-tidb-d017139331a3\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"The most precious things in life are memories and reflection. Time flies \u2014 ten years have passed. On April 1,  [&hellip;]","protected":false},"author":1,"featured_media":10157,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-10156","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hatena-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ten Years, Starting Again: My Journey with TiDB | by siddontang | Oct, 2025 - \u30dd\u30b1\u30b3\u30f3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/medium.com\/@siddontang\/ten-years-starting-again-my-journey-with-tidb-d017139331a3\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ten Years, Starting Again: My Journey with TiDB | by siddontang | Oct, 2025 - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"The most precious things in life are memories and reflection. Time flies \u2014 ten years have passed. On April 1, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/medium.com\/@siddontang\/ten-years-starting-again-my-journey-with-tidb-d017139331a3\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-19T17:15:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/bc1f8416df0cad099e43cda2872716e5864f18a73bda2a7547ea082aca9b5632.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"22\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/medium.com\\\/@siddontang\\\/ten-years-starting-again-my-journey-with-tidb-d017139331a3#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/10156\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"Ten Years, Starting Again: My Journey with TiDB | by siddontang | Oct, 2025\",\"datePublished\":\"2025-10-19T17:15:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/10156\\\/\"},\"wordCount\":4553,\"image\":{\"@id\":\"https:\\\/\\\/medium.com\\\/@siddontang\\\/ten-years-starting-again-my-journey-with-tidb-d017139331a3#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/bc1f8416df0cad099e43cda2872716e5864f18a73bda2a7547ea082aca9b5632.jpeg\",\"articleSection\":[\"\u306f\u3066\u306a\u30d6\u30ed\u30b0\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/10156\\\/\",\"url\":\"https:\\\/\\\/medium.com\\\/@siddontang\\\/ten-years-starting-again-my-journey-with-tidb-d017139331a3\",\"name\":\"Ten Years, Starting Again: My Journey with TiDB | by siddontang | Oct, 2025 - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/medium.com\\\/@siddontang\\\/ten-years-starting-again-my-journey-with-tidb-d017139331a3#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/medium.com\\\/@siddontang\\\/ten-years-starting-again-my-journey-with-tidb-d017139331a3#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/bc1f8416df0cad099e43cda2872716e5864f18a73bda2a7547ea082aca9b5632.jpeg\",\"datePublished\":\"2025-10-19T17:15:57+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/medium.com\\\/@siddontang\\\/ten-years-starting-again-my-journey-with-tidb-d017139331a3#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/medium.com\\\/@siddontang\\\/ten-years-starting-again-my-journey-with-tidb-d017139331a3\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/medium.com\\\/@siddontang\\\/ten-years-starting-again-my-journey-with-tidb-d017139331a3#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/bc1f8416df0cad099e43cda2872716e5864f18a73bda2a7547ea082aca9b5632.jpeg\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/bc1f8416df0cad099e43cda2872716e5864f18a73bda2a7547ea082aca9b5632.jpeg\",\"width\":1200,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/medium.com\\\/@siddontang\\\/ten-years-starting-again-my-journey-with-tidb-d017139331a3#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ten Years, Starting Again: My Journey with TiDB | by siddontang | Oct, 2025\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ten Years, Starting Again: My Journey with TiDB | by siddontang | Oct, 2025 - \u30dd\u30b1\u30b3\u30f3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/medium.com\/@siddontang\/ten-years-starting-again-my-journey-with-tidb-d017139331a3","og_locale":"ja_JP","og_type":"article","og_title":"Ten Years, Starting Again: My Journey with TiDB | by siddontang | Oct, 2025 - \u30dd\u30b1\u30b3\u30f3","og_description":"The most precious things in life are memories and reflection. Time flies \u2014 ten years have passed. On April 1, [&hellip;]","og_url":"https:\/\/medium.com\/@siddontang\/ten-years-starting-again-my-journey-with-tidb-d017139331a3","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-10-19T17:15:57+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/bc1f8416df0cad099e43cda2872716e5864f18a73bda2a7547ea082aca9b5632.jpeg","type":"image\/jpeg"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"22\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/medium.com\/@siddontang\/ten-years-starting-again-my-journey-with-tidb-d017139331a3#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/10156\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"Ten Years, Starting Again: My Journey with TiDB | by siddontang | Oct, 2025","datePublished":"2025-10-19T17:15:57+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/10156\/"},"wordCount":4553,"image":{"@id":"https:\/\/medium.com\/@siddontang\/ten-years-starting-again-my-journey-with-tidb-d017139331a3#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/bc1f8416df0cad099e43cda2872716e5864f18a73bda2a7547ea082aca9b5632.jpeg","articleSection":["\u306f\u3066\u306a\u30d6\u30ed\u30b0"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/10156\/","url":"https:\/\/medium.com\/@siddontang\/ten-years-starting-again-my-journey-with-tidb-d017139331a3","name":"Ten Years, Starting Again: My Journey with TiDB | by siddontang | Oct, 2025 - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/medium.com\/@siddontang\/ten-years-starting-again-my-journey-with-tidb-d017139331a3#primaryimage"},"image":{"@id":"https:\/\/medium.com\/@siddontang\/ten-years-starting-again-my-journey-with-tidb-d017139331a3#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/bc1f8416df0cad099e43cda2872716e5864f18a73bda2a7547ea082aca9b5632.jpeg","datePublished":"2025-10-19T17:15:57+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/medium.com\/@siddontang\/ten-years-starting-again-my-journey-with-tidb-d017139331a3#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/medium.com\/@siddontang\/ten-years-starting-again-my-journey-with-tidb-d017139331a3"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/medium.com\/@siddontang\/ten-years-starting-again-my-journey-with-tidb-d017139331a3#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/bc1f8416df0cad099e43cda2872716e5864f18a73bda2a7547ea082aca9b5632.jpeg","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/bc1f8416df0cad099e43cda2872716e5864f18a73bda2a7547ea082aca9b5632.jpeg","width":1200,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/medium.com\/@siddontang\/ten-years-starting-again-my-journey-with-tidb-d017139331a3#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"Ten Years, Starting Again: My Journey with TiDB | by siddontang | Oct, 2025"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/10156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=10156"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/10156\/revisions"}],"predecessor-version":[{"id":10158,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/10156\/revisions\/10158"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/10157"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=10156"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=10156"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=10156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}