Header image

TypeScript – How To Avoid “Any”?

26/09/2022

1.91k

  • The harmful effects of any
  • Avoiding any
TypeScript - How To Avoid "Any"?

How to avoid any?

In the previous blog – Typescript and “any” type, I introduced TypeScript and what exactly is any type.

In this blog, I’d like to show more about the harmful effects when using any and introduce some built-in types, features and customs types that you can use to avoid any.

The harmful effects of any

While TypeScript is a type checker, any type tells TypeScript to skip/disable type-checking. On the other hand, due to the nature of JavaScript, in some cases providing accurate types isn’t a simple task. In such situations, programmers are tempted to use any.

In most situations using or implicit any – a type that allows to store anything and skip type checkers, programmers can’t guarantee what type the value is stored and how it will be used. Furthermore, when the code is executed at runtime, errors may occur even though they were not warned before. For example:

let result; // Variable 'result' implicitly has an 'any' type.
result = 10.123; // Number is stored at 'result'

console.log(result.toFixed()); // `toFixed()` is a method of `number`

result.willExist(); // `willExist()` isn't a method of `number`, but no errors appear.

Because of that, the use of any is something that should be minimized as much as possible, to ensure the source code does not encounter any errors.

Avoiding any

Based on the basics of TypeScript and Everyday Types, in this blog, I’ll be sharing what I learned and used to write code without any.

Type aliases & Interfaces

A type alias is exactly a name for any type, you can actually use a type alias to give a name to any type at all, not just an object type. For example:

// Type alias
type Point = {
  x: number,
  y: number
};

type ID = number | string;

An interface declaration is another way to name an object type:

// Interface
interface IPoint {
  x: number,
  y: number
};

Differences between Type Aliases and Interfaces:

// Override
type Point = { // TypeError: Duplicate identifier 'Point'.
  a: string
};
interface IPoint {
  a: string
};

Union & Literal types

A union type is a type formed from two or more other types, representing values that may be any one of those types.

// Union types
let anyNumber: string | number;

// Usage
anyNumber = '123';
anyNumber = 123;
anyNumber = true; // TypeError: Type 'boolean' is not assignable to type 'string | number'.

In addition to the general types of string and number, you can refer to specific value of strings and numbers.
By combining literals into unions, you can express a much more useful concept. For example:

// Literal types
let direction: 'top' | 'left' | 'right' | 'bottom';

direction = 'top';
direction = 'top-right'; // TypeError: Type '"top-right"' is not assignable to type '"top" | "left" | "right" | "bottom"'

Type assertions

Sometimes you will have information about the type of a value that TypeScript can’t know about.

For example, if you’re using document.getElementById, TypeScript only knows that this will return some kind of HTMLElement, but you might know that your page will always have an HTMLCanvasElement with a given ID.

In this situation, you can use a type assertion to specify a more specific type:

// Type assertions
const myCanvas = document.getElementById('main-canvas') as HTMLCanvasElement;

Generics

// Example
const getRandomNumber = (items: number[]): number => {
  let randomIndex = Math.floor(Math.random() * items.length);
  return items[randomIndex];
};
const getRandomString = (items: string[]): string => {
  let randomIndex = Math.floor(Math.random() * items.length);
  return items[randomIndex];
};

// Generics function
const getRandomGeneric = <T>(items: T[]): T => {
  let randomIndex = Math.floor(Math.random() * items.length);
  return items[randomIndex];
};

// Usage
const teams: string[] = ['frontend', 'ios', 'android'];
const numbers: number[] = [1, 2, 3, 4, 5, 6, 7, 9, 10];

const randomResult1 = getRandomGeneric<string>(teams);
const randomResult2 = getRandomGeneric<number>(numbers);

In the example above, the getRandomGeneric is the generic identity function that worked over a range of types.

The type of generic functions is just like those of non-generic functions, with the type parameters listed first, similarly to function declarations:

const identity = <Type>(param: Type): Type => {
  return param;
};

When calling identity a function, you now will also need to specify the type of param that the function will use.

The detail above just Generic identity functions, you can read more generics Generic link

Unknown

unknown is what should be used when you don’t know a proper type of object. Unlike any, it doesn’t let you do any operations on a value until you know its type (skip/disable type-checker).

When you unknow something, you need to check before executing. For example:

const invokeAnything = (callback: unknown): void => {
  if (typeof callback === 'function') {
    callback();
  }
  if (typeof callback === 'number') {
    console.log(callback);
  }
  if (typeof callback === 'string') {
    console.log(callback.toUpperCase());
  }
};

// Usage
invokeAnything('typescript'); // Result: TYPESCRIPT

Record for basic object

Probably, nearly every JavaScript developer at some time has used an object as a map-like collection. However, with strict types, it may not be that obvious how to type this. So, you may use interface, but this way you can’t add anything to the object. Then, you need to think about using Record.

The definition:

type Record<K extends keyof any, T> = {
  [P in K]: T;
};

And the usage:

// Usage
const dict: Record<string, number> = {};
dict.a = 1;
dict.b = 'a'; // TypeError: "a" is not assignable to type number

let obj: Record<string, number>;
obj = {
  a: 1,
  b: 2
};

As you can see, it means that the developer can enter any key, but the value has to be of a specific type.

Conclusion

The TypeScript compiler is so powerful. There are so many things we can do with it.

any type can be avoided with more advanced technics such as interface, type intersection, and the use of generics, etc.

Hope you like it! Enjoy TypeScript and make the code without any!

Author: Anh Nguyen

Related Blog

prd-thumb-draft-product

Software Development

+0

    TypeScript And “Any” Type

    TypeScript is a strongly typed programming language that builds on JavaScript, giving you a better ability to detect errors and describe your code. But sometimes you don't know the exact type of value that you're using because it comes from user input or a third-party API. In this case, you want to skip the type checking and allow the value to pass through the compile check. The TypeScript any type is the perfect solution for you because if you use it, the TypeScript compiler will not complain about the type issue. This blog will help you understand the any type in TypeScript, but before doing that, let's begin with some basic concepts! What is TypeScript? TypeScript checks a program for errors before execution and does so based on the kinds of values; it’s a static type checker. Superset of JavaScript TypeScript is a language that is a superset of JavaScript: JS syntax is, therefore, legal TS. However, TypeScript is a typed superset that adds rules about how different kinds of values can be used. Runtime Behavior TypeScript is also a programming language that preserves JavaScript's runtime behavior. This means that if you move code from JavaScript to TypeScript, it is guaranteed to run the same way, even if TypeScript thinks the code has type errors. Erased Types Roughly speaking, once TypeScript’s compiler is done with checking your code, it erases the types to produce the resulting compiled code. This means that once your code is compiled, the resulting plain JS code has no type information. An easy way of understanding TypeScript A languageA superset of JavaScriptPreserver the runtime behavior of JavaScriptType checker layer JavaScript + Types = TypeScript Basic typing Type annotations TypeScript uses type annotations to explicitly specify types for identifiers such as variables, functions, objects, etc. // Syntax : type Once an identifier is annotated with a type, it can be used as that type only. If the identifier is used as a different type, the TypeScript compiler will issue an error. let counter: number; counter = 1; counter = 'Hello'; // Error: Type '"Hello"' is not assignable to type 'number'. The following shows other examples of type annotations: let name: string = 'John'; let age: number = 25; let active: boolean = true; // Array let names: string[] = ['John', 'Jane', 'Peter', 'David', 'Mary']; // Object let person: { name: string; age: number }; person = { name: 'John', age: 25 }; // Valid // Function let sayHello : (name: string) => string; sayHello = (name: string) => { return `Hello ${name}`; }; Type inference Type inference describes where and how TypeScript infers types when you don’t explicitly annotate them. For example: // Annotations let counter: number; // Inference: TypeScript will infer the type the `counter` to be `number` let counter = 1; Likewise, when you assign a function parameter a value, TypeScript infers the type of the parameter to the type of the default value. For example: // TypeScript infers type of the `max` parameter to be `number` const setCounter = (max = 100) => { // ... } Similarly, TypeScript infers the return type to the type of the return value: const increment = (counter: number) => { return counter++; } // It is the same as: const increment = (counter: number) : number => { return counter++; } The following shows other examples of type inference: const items = [0, 1, null, 'Hi']; // (number | string)[] const mixArr = [new Date(), new RegExp('\d+')]; // (RegExp | Date)[] const increase = (counter: number, max = 100) => { return counter++; }; // (counter: number, max?: number) => number Contextual typing TypeScript uses the locations of variables to infer their types. This mechanism is known as contextual typing. For example: document.addEventListener('click', (event) => { console.log(event.button); // Valid }); In this example, TypeScript knows that the event the parameter is an instance of MouseEvent because of the click event. However, when you change the click event to the scroll the event, TypeScript will issue an error: document.addEventListener('scroll', (event) => { console.log(event.button); // Compile error }); // Property 'button' does not exist on type 'Event'. TypeScript knows that the event in this case, is an instance of UIEvent, not a MouseEvent. And UIEvent does not have the button property, therefore, TypeScript throws an error. Other examples of contextual typing // Array members const names = ['John', 'Jane', 'Peter', 'David', 'Mary']; // string[] names.map(name => name.toUpperCase()); // (name: string) => string // Type assertions const myCanvas = document.getElementById('main-canvas') as HTMLCanvasElement; Type inference vs Type annotations Type inferenceType annotationsTypeScript guesses the typeYou explicitly tell TypeScript the type What exactly is TypeScript any? When you don’t explicitly annotate and TypeScript can't infer exactly the type, that means you declare a variable without specifying a type, TypeScript assumes that you use the any type. This practice is called implicit typing. For example: let result; // Variable 'result' implicitly has an 'any' type. So, what exactly is any? TypeScript any is a particular type that you can use whenever you don't want a particular value to cause type-checking errors. That means the TypeScript compiler doesn't complain or issue any errors. When a value is of type any, you can access any properties of it, call it like a function, assign it to (or from) a value of any type, or pretty much anything else that’s syntactically legal: let obj: any = { x: 0 }; // None of the following lines of code will throw compiler errors. // Using `any` disables all further type checking, and it is assumed // you know the environment better than TypeScript. obj.foo(); obj(); obj.bar = 100; obj = 'hello'; const n: number = obj; Looking back at an easier-to-understand any: A special type.Skip/Disable type-checking.TypeScript doesn't complain or issue any errors.Default implicit typing is any. Note that to disable implicit typing to the any type, you change the noImplicitAny option in the tsconfig.json file to true. Why does TypeScript provide any type? As described above, while TypeScript is a type checker, any type tells TypeScript to skip/disable type-checking. Whether TypeScript has made a mistake here and why it provides any type? In fact, sometimes the developer can't determine the type of value or can't determine the return value from the 3rd party. In most cases they use any type or implicit typing as any. So they seem to think that TypeScript provides any to do those things. So, is that the root reason that TypeScript provides any? Actually, I think there is a more compelling reason for TypeScript providing any that the any type provides you with a way to work with the existing JavaScript codebase. It allows you to gradually opt-in and opt out of type checking during compilation. Therefore, you can use the any type for migrating a JavaScript project over to TypeScript. Conclusion TypeScript is a Type checker layer. The TypeScript any type allows you to store a value of any type. It instructs the compiler to skip type-checking. Use the any type to store a value when you migrate a JavaScript project over to a TypeScript project. In the next blog, I will show you more about the harmful effects of any and how to avoid them. Hope you like it! See you in the next blog! Reference TypeScript handbookTypeScript tutorial Author: Anh Nguyen

    07/09/2022

    1.43k

    Software Development

    +0

      TypeScript And “Any” Type

      07/09/2022

      1.43k

      Our culture

      +0

        BA Team’s Offsite Training Session: Boosting Logic and Negotiation Skills

        BA stands for “Business Analyst,” but for this day, it also means “Break Away” from daily work. Our BA team recently participated in an off-site training session that was both meaningful and enjoyable. We learned valuable skills and shared laughs with a very engaging Japanese trainer through this Business Analyst training. Besides learning practical techniques, we got to see how professionals in Japan work with clear logic and how negotiation can be more creative than expected. Logical Thinking – Clear Communication Starts with Clear Thinking This part of the Business Analyst training session wasn’t about boring theories. Instead, it focused on how BAs can share ideas in ways that clients can easily understand. The goal was to avoid confusion when people understand the same message in different ways. One key idea the trainer shared was: 一文一義 (Ichi-bun Ichi-gi) – "One sentence, one idea." This means not putting too many ideas into one sentence; keep it simple to avoid confusion. The trainer reminded us: “The best communication is not using big words or complex grammar, but explaining difficult things in the simplest way.” In project discussions, what matters most is being concise, clear, and convincing, not using overly complex or lengthy sentences. One powerful tool we learned is the Pyramid Structure, a way to organize ideas clearly: Top-down communication: Start with the conclusion first, then give reasons.MECE: Ideas should not overlap, and together they must cover all important points. The Pyramid has 3 parts: Main MessageThe key point you want to say.Say it at the beginning.Key Points2–4 supporting reasons.Supporting EvidenceFacts, examples, numbers, or specific details. We practiced this method with the question:"What are the strengths of SupremeTech when promoting our brand?"  Everyone was surprised by how much clearer and more logical the answers became. Negotiation – Helping Clients Discover Their Real Needs Next, we moved into negotiation skills. The trainer gave us two surprising facts: Most clients don’t know exactly what they need at the start.Between 70% and 80% of buying decisions are made during the discussion process. As BAs, how can we help clients realize what they actually need, even if they haven’t explicitly stated it? We learned two useful techniques: 1. SPIN Questions A 4-step method to guide the conversation: S – Situation: Understand the client’s current situation.P – Problem: Identify any issues they are facing.I – Implication: Explore the impact of these problems.N – Need-payoff: Show how a solution can help. 2. BAF Focuses on: Benefit: What the client gains.Advantage: Why it works well.Feature: What the product or service includes. We did a quick practice activity: “Sell this bag to a customer.” Each group played both the BA and the client in real-life scenarios. The room was filled with energy and laughter as teams realized that simply changing the way they asked questions helped clients discover new needs they hadn’t previously considered. Example using SPIN: S (Situation): “What kind of bag do you use now?”P (Problem): “Do you ever feel it’s too small or hard to match with outfits?”I (Implication): “Is it inconvenient if you have to switch bags for different occasions?”N (Need-payoff): “Would it help to have one stylish bag that fits everything and works for all events?” And then with BAF: B (Benefit): “You can use this bag for work, travel, or outings while staying stylish.”A (Advantage): “Many office workers choose this model for its flexibility.”F (Feature): “It has 3 compartments and is made of water-resistant material.” By using these techniques, BAs can help clients understand what they truly need and make more informed decisions. “Soft Skills” – The Secret Tools of Every BA Being a BA without soft skills is like being a superhero without a cape—it feels like something’s missing! From the Pyramid Structure to SPIN and BAF, these are the soft skills that help BAs feel more confident when interacting with clients. With these tools, you don’t just meet client needs—you impress them and build stronger trust. Have you “equipped” yourself with these skills yet?If not, don’t wait—try practicing them in your next Business Analyst training meeting!

        23/06/2025

        4

        Thu Phan T. H.

        Our culture

        +0

          BA Team’s Offsite Training Session: Boosting Logic and Negotiation Skills

          23/06/2025

          4

          Thu Phan T. H.

          Japan – A journey of connection, learning, and cultural exploration

          Our success stories

          +0

            Japan – A journey of connection, learning, and cultural exploration

            From November 11 to 17, 2024, the SupremeTech team traveled to Japan with three main goals in mind: To explore and learn from Japanese corporate cultureTo visit and work with key clients: This included a visit to Classmethod (CM) and on-site discussions with one of the major clients involved in a key project at our companyTo attend Inter BEE, one of Japan’s leading tech events. The exhibition brought together cutting-edge trends in broadcasting, content creation, and digital entertainment — a must-see for anyone in the industry. Beyond the professional takeaways, the business trip gave us a deeper glimpse into how the Japanese work, connect with others, and shape their distinctive workplace culture. Detailed Agenda Time: 11/11/2024 – 17/11/2024 Location: Tokyo – Chiba, Nhật Bản DateMain activities10/11Travel from Vietnam to Tokyo11/11Work at Classmethod’s office & visit the client site12/11Continue working at Classmethod’s office13/11Attend Inter BEE 2024 in Chiba14~15/11Remote work from hotel: content wrap-up and business trip report preparation16/11Weekend break – Explore Hakone, enjoy hot springs, and the beauty of the Japanese landscape17/11Return to Vietnam Unforgettable Moments & Highlights Office day at Classmethod & client meeting for the project First Two Days: At Classmethod’s Tokyo Office Our first two days were spent working at Classmethod’s office, located on the 26th floor of Hibiya Tower — right in the heart of Tokyo. From up there, we were treated to a sweeping view of Tokyo Tower, and even caught a glimpse of Tokyo Skytree in the distance — a truly breathtaking sight that had us all pausing in awe. The office is thoughtfully designed, with a variety of modern, functional spaces: Cafeteria area: An open, friendly space where people can grab tea or coffee, chat freely, or even get some work done. One particularly charming detail was the “souvenir corner”, where employees leave small gifts or local specialties from their business trips — a fun and meaningful way to share experiences with colleagues.Meeting zone: Equipped with both group meeting rooms and private booths, this area supports a range of activities, from team discussions to quiet, focused work.Internal workspace: A spacious, quiet area reserved for employees — ideal for deep concentration. In the afternoon of our first day, we headed out with Classmethod’s team to visit one of their key clients. We attended a vendor meeting, met the stakeholders in person, and gained a much clearer picture of how our collaboration might evolve in the future. It was a solid start and just the right dose of excitement for the first day. Discovering Japanese Work Culture at Classmethod’s Office Flexible and Respectful Work Environment:The office features an open layout with minimal physical barriers but is smartly designed to maintain focus (e.g., personal booths and small meeting rooms). Everyone is encouraged to choose the work arrangement that best suits them.A Culture of Sharing and Internal Bonding:One great example is the “お土産 (omiyage)” corner in the cafeteria — a small but meaningful tradition of sharing. Boxes of sweets and gifts from different regions aren’t just snacks; they’re little stories passed around naturally among colleagues, building bonds and sparking conversations.Focus on Health and Comfort:Free tea and coffee are always available, and there are cozy spots throughout the communal area where you can take breaks and relax. This thoughtful care helps everyone recharge and stay creative throughout the workday. We truly felt that this is a workplace where people are respected, connections are encouraged, and productivity doesn’t come from pressure but from a spirit of initiative and mutual support. Meeting the Vendors Collaborating on the Project At the Vendor Meeting, we were warmly welcomed with coffee and pastries — a perfect example of “omotenashi,” the Japanese spirit of hospitality. When I introduced myself as being from Vietnam, everyone was pleasantly surprised and delighted, which created a friendly and warm atmosphere right from the start. Through the meeting, we not only got to know our partners better but also clearly felt how important personal communication is in technical collaboration — something that online meetings sometimes struggle to capture. Memorable Moments Beyond Work:  A Fun Visit to a Major Restaurant Chain (Day 2) On the morning of Day 2, before heading to the office, we stopped for breakfast at a restaurant that’s part of a well-known chain — and interestingly, also a client in our current project for a takeout ordering system. The menu was huge. It took us a while to finally decide on our breakfast picks. The restaurant had adorable cat-shaped serving robots with expressive digital faces, but our table was actually served by a real staff member (still cute, though!). Even though it was just a quick breakfast, being in the actual space where our product is used gave me a much clearer sense of the customer’s needs. It was a small but meaningful reminder of why we build what we build. Attending the Inter BEE event Inter BEE is Japan’s biggest tech exhibition dedicated to broadcasting, video, audio, and communications. It’s where major players like Panasonic, Sony, and Hitachi showcase cutting-edge technologies alongside smaller companies offering innovative tools, from video editing software and specialized storage devices to creative graphic design solutions. Some of the standout trends we saw at the event included: AI-powered content production4K/8K broadcasting and cloud-based transmission solutionsNew VR/AR applications in entertainment Impressive Moments from Inter BEE Attending Inter BEE was a completely new experience for me, not just because of its massive scale, but also thanks to the level of professionalism and precision in every detail of the event. Our Company’s Activities at the Event: Our team, in collaboration with our partner Enlyt, set up a booth to showcase CloudTV (internally known as OTTclouds) — a cloud broadcasting platform currently being developed and deployed for the Japanese market.While Mr. Hoang, the project lead, was busy welcoming visitors at the booth, I had the chance to explore the entire exhibition and dive into the latest technologies in the industry. A Few Highlights That Stood Out:  Flawless “Japanese-style” organization:From the booth layout and clear navigation signs to helpful staff everywhere, everything was organized with incredible logic and clarity. Despite the venue's size, finding our way around was surprisingly easy.High-quality tech booths: Every exhibitor put real effort into both content and presentation. The booths were visually impressive, filled with interactive demos and staff who were well-trained. Some even let visitors try out cutting-edge technology, such as VR gear or TV production systems, right on the spot.An authentic feeling for the broadcast-media world:For the first time, the TV and broadcast industry felt tangible to me — no longer distant or abstract. Seeing massive cameras, complex post-production setups, and live demos of AI dubbing or audio processing gave me a whole new appreciation for what happens behind the scenes of every show we watch.Learning through conversations:Beyond just looking around, I also had the chance to chat briefly with staff from a few booths. Even though I couldn’t catch every technical term, those exchanges were incredibly meaningful — a reminder of how valuable honest, human-to-human knowledge sharing can be. What I’m Taking Home from the Business Trip Our business trip to Japan brought so many meaningful takeaways — not just for me, but for the whole team: We got to see firsthand the meticulousness, warm hospitality, and thoughtful spirit of sharing that define how Japanese companies operate.From meaningful conversations to in-person meetings, we deepened our connections, especially with strategic clients involved in our company’s flagship projects.Inter BEE provided us with a front-row seat to the latest developments in broadcasting and digital entertainment — from AI-powered tools to immersive media solutions. This Japan business trip wasn’t just about understanding our clients or getting updates on current projects — it was also a rare chance to immerse ourselves in Japanese corporate culture, learn from how events are run, and truly feel the professionalism that drives the way people work in Japan. We’re hopeful that this won’t be the last time. Here’s to more chances in the future to reconnect, learn, and grow together. Snapshots from the Business Trip More snapshots from the Classmethod office and our client visit  A cozy space that doubles as a cafeteria and a free-seating work area Poster of the football team that Classmethod sponsors Instructions for staff on how to order food in the cafeteria View of the park from one of the meeting rooms Meeting with Classmethod team members from the project we're collaborating on The client team member prepared a slide showcasing different types of sweets for everyone to choose and try during the meeting. Some photos from the Inter BEE event

            11/06/2025

            69

            Ngan Vo T. T.

            Our success stories

            +0

              Japan – A journey of connection, learning, and cultural exploration

              11/06/2025

              69

              Ngan Vo T. T.

              Our success stories

              +0

                Enterprise-level AWS migration for a Global Luxury Jewelry Brand

                SupremeTech is now working closely with a globally recognized luxury jewelry retailer to migrate the LINE MINI App system from a “stand-alone” infrastructure to a globally managed AWS organization without disrupting operations or compromising brand quality.  In this project, the SupremeTech team has navigated complex integrations, multi-regional coordination, and a highly-layered digital ecosystem. Through product-focused execution, proactive risk management, and strategic alignment, the team delivered the system migration successfully without service disruption. A Glimpse Inside a Brand’s Operations As a luxury brand with a long-standing heritage, our client operates in a highly complex environment where every decision is carefully reviewed across multiple layers of management. Balancing this thoughtful, legacy-driven approach with the fast pace of modern technology is no small feat. The brand operates in a complex environment. Every move has to be carefully thought through by a great number of decision-making layers. The nature of technology is modern and fast-changing, which generally contradicts what the legacy brand is reputed for.  Nonetheless, luxury brands are born to be the most exquisite trendsetters of the world, so even when it comes to digital transformation, people expect no less than perfection. There's no room for disruption, no margin for error, and every change must align with the brand’s exceptional standards. Here’s what makes the system migration so complex: Global operations mixed with unique brand expectations in each marketExtremely high customer expectations, both in-store and onlineCoordinating across internal teams, regions, and business unitsAdhering to varying regulations within the system migration Challenges from Infrastructure migration for A Complex System  SupremeTech was engaged to develop a LINE MINI App for event registration during Q3–Q4 2024. Previously, the app operated independently, but the goal was to connect it with the brand’s internal infrastructure to enable seamless data flow, enhance cost tracking, and ensure consistent operations across teams. Technical Challenges 1. Steep Learning Curve Although we have a lot of experience with AWS services, diving into enterprise-level solutions introduced new challenges. It is still a significant hurdle for our team to learn, effectively use, and master tools like Kubernetes deployment, Datadog, and Argo CD within just a few weeks. With only two tech members, each of us had to upskill and take ownership quickly. For 3–4 months, we balanced daytime implementation and communication with the enterprise support team while spending nights learning the tool to tackle the project's growth. 2. Infrastructure Integration Another major challenge was migrating our application’s infrastructure with the enterprise’s complex existing systems. While we had a confirmed workflow and support from the enterprise team, translating that into working code proved more difficult than expected.  One example was setting up a proxy for application security—a critical component that introduced unexpected problems. This was also the first time a third-party vendor’s app was being migrated into the enterprise environment, so there was no clear blueprint. We gradually uncovered hidden requirements, such as additional permissions and configuration access, revealing just how much more we needed to understand the system’s inner workings. Project Management Hurdles 1. Adapting to Multi-Layer Entrepreneurial Ecosystems The client’s operations were not only large but also multi-dimensional, with several entrepreneurial arms. SupremeTech had to understand this complex structure and build systems that supported flexibility rather than fixed processes. Communication across many divisions within the client’s multinational operations team was another major challenge. We believe this would not have been possible without the strong commitment of our development team to deliver the best-fit solutions, especially the efforts of our Business Analyst. 2. Cross-Time-Zone Collaboration The client-side teams operated across multiple regions, including Japan, Southeast Asia, and Europe. To coordinate effectively, they had to deal with time zone differences, cultural differences, and varying work styles. So, how did we tackle such a Complex Transformation within a limit time? Navigating the challenges with both technical expertise and ownership  To keep up with global demand and high expectations from customers, the client needed to modernize its internal systems. But making changes at this scale wasn’t easy. SupremeTech had to overcome a range of technical and coordination challenges to ensure a smooth and successful transition: Proactive Mindset Quickly learning the workflow and system wasn’t enough; we had to troubleshoot why the app wasn’t working. Whether it was due to gaps in our understanding or setup issues from the support team, we had to keep moving forward, identify the root cause, and ensure successful deployment. SupremeTech engineers took the initiative step by step. They identified potential risks, assessed the impact on all stakeholders, and built mitigation strategies directly into the project timeline. This approach helped the team meet delivery milestones without compromising quality, even under tight constraints. Flexible Work Approach Working with just four team members on a project of this scale required laser focus and disciplined execution. With a product-focused mindset, with limited resources, it was crucial that every team member understood the broader system and took accountability for both outcomes and cross-functional collaboration. Streamlined Communication with a Clear Source of Truth Using chat channels was fast and convenient for communication across time zones. However, to avoid scattered updates, we created a single source of truth by setting up centralized documentation. This helped keep tasks clear, accountable, and on track. The team also placed a strong focus on role clarity. Everyone knew who was responsible for each task, who had the authority to approve it, and who should escalate any issues. This ensured smooth decision-making during critical moments. Shared Entrepreneurial Energy This wasn’t just a technical assignment. SupremeTech saw it as a shared venture. By aligning with the client’s entrepreneurial mindset, we became a strategic ally rather than just a vendor. This project demonstrated that even the most complex transformations can be successful with the right approach. By staying aligned with the client’s brand values, adapting to change, and working seamlessly across teams and borders, we delivered a solution that was both robust and future-ready. Here are some key takeaways for others on a similar journey: Keys takeaways For Luxury Brand Leaders Digital transformation doesn’t have to be disruptive. With clear goals, strong collaboration, and the right technology partner, even complex system migration can run smoothly. The key is aligning innovation with the company’s brand identity, operational reality, and long-term vision. For IT & Digital Teams We would suggest Design for change. Business needs can shift quickly, so systems must be able to adapt. Flexibility is not a bonus option. It is essential for long-term success.Plan for the future. Scalable architecture solves more than current problems. It helps save time, reduce costs, and prevent technical debt in the future.Collaborate across regions and teams. In global projects, strong coordination across departments, cultures, and time zones is not optional. It is the key to real progress. We understand that one success does not ensure the next, so we treat every upcoming opportunity as a great chance to learn. Each project will present new challenges to test our technical capabilities and project management skills. These challenges will sharpen our competencies and refine how we deliver, regardless of the situation's complexity. >>> Read more related articles:  LINE Mini App: Digital Transform Customer Service with Digital Point CardsLINE and Mobile Commerce Platform in Japan Future Prospects For the Client With this new digital infrastructure in place, the brand is now better prepared to deliver personalized, localized, and premium experiences across flagship stores, regional boutiques, and online platforms. The foundation is ready to support future innovation in areas such as CRM, client interfaces, and omnichannel commerce. For SupremeTech This project demonstrated and validated our ability to operate as a reliable strategic partner to luxury brands undergoing digital transformation at scale. We don’t just deliver code; we elevate customer experience and build technology that scales with ambition, while also preserving its heritage and protecting it. SupremeTech’s Service for Luxury Brands How We Help Luxury Brands Transform At SupremeTech, we specialize in helping luxury and retail brands navigate technical complexity with elegance and precision. Our tailored services include: Platform Strategy & IntegrationSystem Migration & Legacy Tech UpgradeLINE & Salesforce IntegrationEvent Management SystemsCustom Digital Advisory Want to know more about the LINE MINI App project for this client? Explore in the second episode of this series: Enhance the Customer Experience on Digital Platforms for Luxury Brands We understand what’s at stake for your brand equity, reputation, and customer loyalty, and we treat every project with that level of care. Looking to future-proof your luxury brand’s digital infrastructure? Please consult with our experts to discover how we can help you align your technology with your brand's vision. Development systems and technologies Below are the resources and technologies we use to develop the services: Details of entrustment: Design, Implementation, Testing, Migration, Maintenance & OperationPlatform: LINE MINI App (WebApp)Development language: NextJS (React Framework), TypeScriptTeam structure: 2 MM x 4 monthsProject Tech Lead 0.5 Business Analyst 0.5Infra Engineer 0.5Quality Control 0.5

                09/06/2025

                74

                Khanh Nguyen T. M.

                Our success stories

                +0

                  Enterprise-level AWS migration for a Global Luxury Jewelry Brand

                  09/06/2025

                  74

                  Khanh Nguyen T. M.

                  Customize software background

                  Want to customize a software for your business?

                  Meet with us! Schedule a meeting with us!