Airbnb Moves from Webpack to Metro for Faster Builds

Like many companies, Airbnb has experienced growing pains with bundlers as its codebase grew. But even after its codebase quadrupled, the company was able to speed UX changes to the front end when it migrated its JavaScript code bundler from Webpack to Metro in 2018.

With build performance significantly improved, UI changes appeared 80% faster, as per the Time to Interactive (TTI) metric. Even the slowest production build, one compiling 49,000 modules (JavaScript files) is now 55% faster — down to 13.8 minutes from 30.5 minutes with Webpack. 

Airbnb’s own Page Performance Scores also improved (~1%) with those pages built with Metro.

For reference, after the codebase quadrupled around 2018, the average page refresh time for a simple one-line code change was anywhere between 30 seconds to two minutes depending on the project size.  

Airbnb software engineer Rae Liu covered some of the differences between Webpack and Metro and discussed some of the migration challenges which are summed up below.

What Is Metro?

Developed by Meta, Metro is the open-source JavaScript code bundler for React Native. As Airbnb’s stack doesn’t include React Native, their engineers worked directly with Metro’s engineers at Meta as well as on teams themselves to further develop the technology.

Metro breaks bundling down into three steps in the following order: resolution, transformation, and serialization.

  • Resolution: resolve the import/ require statements
  • Transformation: transpile code (source to source compiler which converts modern Typescript/ JavaScript source code into JavaScript and backwards compatible with old browsers), an example tool is babel 
  • Serialization: combine the transformed files into bundles

In development, Airbnb engineers created a Metro server with custom endpoints to handle building dependency graphs and source maps, translation, and bundling JS and CSS files. For production builds, they ran Metro as a Node API to handle resolution, transformation, and serialization. 

The migration took place in two phases. The first priority was the Metro development server as the slow Webpack development server was the source of significant development productivity costs. The second migration phase focused on bringing Metro to feature parity with Webpack and running an A/B test between Metro and Webpack in production.

Key Differences Between Metro and Webpack

Process JavaScript Bundles On Demand

Webpack pre-compiles the entire project on startup while Metro only compiles what is needed. What does this mean? A JavaScript bundle is technically just a serialized dependency graph, where an entry point is the root of the graph. 

At Airbnb, every frontend project has a Node server that matches a route to a specific entry point. When a web page is requested, the DOM includes script tags with the development JavaScript URLs. Webpack needs to know all the entry points for all the pages before it can start bundling while Metro only needs one entry point and can process JavaScript bundles as requested.

Unseen in the following image, a developer makes a change to Page A:

In both 1a and 1b in the diagram above the browser loads Page A (1) the requests the entryPageA.js file from the bundler (2)  and the bundler responds to the browser with the appropriate bundles (4). The difference between figures 1a and 1b lies in action (3) as the Webpack diagram compiles entry points for pages B and C while Metro does not as the developer-only modified Page A in the example. 

One of the largest frontend projects at Airbnb has 26,000 unique modules with the median number of modules per page being ~7.2 modules. The number of modules Airbnb ultimately has to process doubles to roughly 48,000 due to their use of server-side rendering. After putting Metro’s compile-on-demand model into action, approximately 70% is now taking place.

Multilayered Cache

Airbnb leverages Metro’s Multilayered Caching feature with persistent and non-persistent caches. Metro does provide more caching flexibility by allowing engineers to define the cache implementation, including mixing different types of cache layers.  

Airbnb ordered their caching layers by order of priority. If a result is not found in one cache layer, the next layer will be used until the result is found. Compared with the default Metro implementation without a cache, hitting a remote read-only cache resulted in a 56% faster server build in a project compiling 22,000 files. 

The third caching layer is a remote read-only cache rather than a read-write cache as writing to a remote cache incurs costly network calls especially on a slow network. This decision saved an additional 17% build time in development.

Webpack does have a caching layer though it does differ from what Metro offers.

Bundle Splitting

One of the technical challenges detailed in Airbnb’s blog post is Bundle Splitting. This is the process of splitting the bundles by dynamic import boundaries also known as code splitting. The out-of-the-box Metro solution produced giant ~ 5MiB bundles per entry point which were taxing on browser resources, network latency, and unable to HTTP cache.

In the image above, import(‘./file’) represents the dynamic import boundaries. The bundle on the left-hand side (3a) is broken down to three smaller bundles on the right (3b). The additional bundles are requested when the import(‘./file’) statements are executed.

Suppose fileA.js  changed, the entire bundle needs to be re-downloaded for the browser to pick up the change in fileA.js. With bundles split by dynamic import illustrated in Figure 3b, a change in fileA.js only results in the re-downloading of the fileA.js bundle. The rest of the bundles can reuse the browser cache.

In production, there is no development server and the bundles are prebuilt. Airbnb engineers took some inspiration from Webpack’s bundle splitting algorithm and implemented a similar mechanism to split the Metro dependency graphs. The resulting bundle size decreased by ~20% (1549 KB –> 1226 KB) on airbnb.com as compared to the development splitting by dynamic import boundaries.

Development bundles were optimized differently as it takes time to run the bundle splitting algorithm and the engineers didn’t want to waste time splitting bundle size in development. In the instance of development, page load performance was prioritized over minimizing bundle size.

The Metro and Webpack bundle size metrics are comparable.

In Conclusion

The biggest Airbnb frontend project compiling ~48,000 modules (including server and browser compilations) saw a drop in the average build time by ~55% from 30.5 minutes to 13.8 minutes. Airbnb Page Performance Scores improved around 1% for pages built with Metro which was a nice surprise as the goal was a neutral result. Overall, the implementation of Metro is widely successful. 

Metro has solved the bundling issues Airbnb was facing but the engineers also recognize that new technologies have emerged since their decision to move forward with Metro and that Metro isn’t a general-purpose JavaScript bundler. 

Success & Growth Look Different for Everyone

My wife loves plants and when I saw this quote I recalled a lot of what I see in our garden. Some plants grow outward first while other spend months growing roots before they are able to show any fruit.some plants grow outward first while other spend months growing roots before they are able to show any fruit or flowers or growth.

In the end both grow, but the process could not be more different.

It can be super easy to compare one persons growth to another, to see the one plant that already has fruit and say it is doing better than the other plant. Yet just below the surface the other plant is doing just as well, the one difference is that you cannot see it.

We have to remember everyone defines success and growth differently – and that’s more than okay, it’s necessary!

What do I mean that success looks differently to everyone and that it’s necessary? It means, if you’ve accomplished your purpose and worked diligently at whatever you do, you are successful.

For some of you this means being a full-time mom or dad. For others, it means your family made it through the week, and you spent time teaching your children life skills, like being kind. For some of you, it means you made our streets safer or you provided healthcare in an emergency or you served a customer well.

Success has many faces. Too often, we let comparison get in the way of celebrating our own successes. We spend our days looking at others and thinking, “If I did that, I’d be successful,” or, “Wow, I should be doing more with my life. Look at so and so.” Comparison only takes us backwards though. It chokes us and keeps us from seeing the individual gifts we bring to the world around us.

How do we move past comparing ourselves to others? Here are some practical things you can do:

1) Make sure you know your values. When you measure yourself against what you value, you have a solid, non-moving goal. If my values include helping others, then I can evaluate if I did that today. Did I help someone today? Then it was a successful day. Our values provide an impartial measurement tool for us.


2) When you are tempted to compare your success to someone else’s, evaluate the cost of their success. We usually only look at the benefits of success in other people’s lives and neglect the costs. For example, some may look at an air hostess and say, “You get to travel to really great places.”

And, yes, he/she do. However, if you were to evaluate the costs of their travel, you would learn that they often end up with a migraine from the pressure changes in the plane. That’s a cost. It impacts their off day home and leaves them ineffective for their family who has missed having them home. We don’t often advertise the costs associated with success, but I guarantee everyone has costs they pay for their particular success.


3) Remind yourself everyone has a purpose in life. Sometimes the purpose is glamorous, other times someone’s purpose may not be glamorous, but their purpose is essential. Think of the number of administrative assistants in the world who may not lead glamorous lives, but who make our worlds go around! Without them, we’d be nothing. We may not count that as success, but it’s more than success. It’s essential for others to accomplish their purposes.


Everyone has value. Everyone has purpose. Most often, it’s our perspective that’s off-base. This week as you are tempted to look at someone else’s success, keep these things in mind. Most importantly, evaluate your own success in light of your impact on those around you. After all, that’s what really matters.

Change Your Story

We often limit ourselves by deciding we can’t do something before we even try.  These limiting beliefs may lead us to ask ourselves, “Why bother?” or tell ourselves, “This is silly.” When we do this, we are effectively telling ourselves the answer is “no” before we even ask the question. When we do that, we’ve stopped our growth and our path to success.

This negative self-talk is a clear sign that you need to rewrite your story. Our story affects what we do, where we go and how we approach life. A powerful story leads to a life of opportunity – change your story, change your life. The first step in changing your story is to stop telling yourself disempowering ones.

How many times have you said something like this to yourself?

I have to be perfect… I’m too old… I’m just not that kind of person.

These are exactly the type of damaging thoughts that keep us from achieving our goals and, ultimately, our dreams. By addressing the following damaging thoughts head-on and treating ourselves with kindness instead of doubt, you can change your mindset and learn how to change yourself.

The stories we tell ourselves make up our identity and dictate what we believe we can and cannot do. Here are some common stories that you tell yourself that limit your opportunities for growth and indicate it’s time for you to rewrite your story:

“I have to be perfect.”

Perfection is the lowest standard anyone can have – it leaves no room for growth. While completing a task perfectly may feel good for a little while, it’s through our mistakes that we develop our greatest strengths and find life’s impactful lessons. If you have done something perfectly, you haven’t really learned anything – how to do this task better, for example, or what to avoid. By telling yourself you have to be perfect, you’re putting limits around your own capabilities. When you want to learn how to change your life around, you have to give up perfection.

Rather than striving for perfection, strive for a balanced life. Accept that you will make mistakes and when you do, use them as a starting point to realize your next level. Trying to be perfect stems from one’s fear of failure. Instead of being afraid to fail, pursue your passion no matter the outcome.

Take the opportunity to learn from your mistakes: find the cause of your problem and eliminate it. Don’t try to be perfect; just be an excellent example of a human.


“My life is harder than anyone else’s.”

Everyone is fighting their own battle. It’s how you choose to handle difficulty that determines how to change your life around.

Look at the success stories of Oprah and Tony Robbins, and the hardships they overcame to achieve a life of greatness. As Tony says, “Identify your problems, but give your power and energy to solutions.”

A hard life doesn’t prevent you from success unless you tell yourself it will. There are plenty of examples of those who overcame seemingly overwhelming obstacles to achieve greatness, and just as many examples of those born with all the advantages in the world who failed to have fulfilling lives. When it comes to rewriting your story, you must let go of the past.


“If I ignore it, it will go away.”

If you want to learn how to change yourself, you must see things as they really are. Reality always catches up with us. While we can sometimes pretend they aren’t there, our problems will always be waiting for us when we return. It’s only when we choose to face them head on that they truly go away.

Our goal is not to ignore the problems of life, but to put ourselves in better mental and emotional states to not only come up with solutions but really meet the challenges and take action. Take a good look at yourself and where you are in life and the choices you have made that have brought you to this point. This is not an opportunity to beat yourself up. Rather, it’s a chance to take inventory and understand what you need to change in order to rewrite your story.


“I’m too young, or I’m too old.”

Do you think you’re too old to learn how to change your life around?

Here’s the truth: Your age only limits you if you allow it. Create a vision and never let your environment, other people’s beliefs or the limits of what has been done in the past shape your decisions. Ignore conventional wisdom.

When you look at a possible lifespan of up to 120 years if you live right, trying to rewrite your story at age 60 suddenly seems very plausible. You can do whatever you desire at any age – as long as you believe it to be true and put in the work to make it a reality.


“I’m just not the happy type.”

By telling yourself that you aren’t “the happy type,” you’re making yourself unhappy. Happiness is a choice we make – it is a state we can become through our actions. The path to happiness is more than material items and superficial things. Rather, happiness is an all-encompassing way of being. When you change your thoughts, you learn how to change your life – that is, when you choose to be happy, your negatives shift to positives.


As achievers we all seek greatness, but is there something holding you back from your next level of success and fulfillment?

Stop Trying to Change People Who Dont Want to Change

Its hard to watch a friend or family member struggling with a problem or making bad decisions. You naturally want to help. You want to make the lives of your friends and family members easier and more joyful. You want to fix their problems and relieve their suffering.

Trying to keep a loved one out of harms way seems like a good idea, except that it doesnt work when they dont want your help.

Not everyone wants to change (or not in the way you think they should) and thats their prerogative. Despite your desire to help, you cant make people change and you cant fix their problems (even when you have great ideas and their best interest at heart!). You simply cant fix or solve other peoples problems and trying to do so often just makes things worse.

If you’re frequently frustrated that someone doesn’t take your advice or want your help, you’re tired of nagging, or you feel like you’re talking to a brick wall, you may be trying to help someone who doesn’t want to change.

Identify which part of the problem is in your control

Most people accept the notion that they cant control other people or solve their problems. But we get sucked into trying to change and fix because were confused about whose problem it is. Sometimes our desire to help, protect, and be the hero clouds our judgment. And sometimes we think we know whats best and foist our ideas upon others regardless of what they want.

We tend to think that problems that affect us are ours to solve. This false belief leads us down a futile path of trying to control things that arent in our control. For example, just because youre affected by your spouses unemployment or your teenagers smoking, doesnt mean these are problems you can solve. You cant get a job for your spouse nor can you make your child quit smoking. However, if your spouses unemployment has left you in debt and feeling anxious, stressed out, or angry, those are problems you can do something about.

And yet, some of us persist in trying to fix or change other people and their problems. This is classic codependent behavior. We abhor having things out of our control. It reminds us of bad things that have happened in the past. And we get anxious and afraid of the catastrophic things we anticipate happening if we dont step in and try to change things.

Accepting whats out of our control and that we cant solve other peoples problems doesnt mean were powerless. Quite the contrary; it allows us to put our energy into identifying what aspects of a problem we can solve and to change the things we can.

Trying to solve other peoples problems often makes things worse, not better

Not only is it impossible for us to solve other peoples problems, we can inadvertently cause a host of fresh problems when we try to help people who dont want to change (in the way we think they should).

To be honest, I often wish that I could solve other peoples problems. But it always ends badly when I try. I get bossy, give unwanted advice, and act like I have all the answers. Its definitely not something Im proud of and I imagine at least some of you can relate.

Sometimes, its downright presumptuous for us to assume that we know what someone else needs or wants. Our efforts to help may actually be conveying this harmful message: I know how to solve your problems better than you do. I dont trust your judgment or abilities. Youre incompetent or unmotivated.

Its not helpful to try to solve other peoples problems because:

  • Nagging and giving unwanted advice leads to more stress, conflict, and negatively impacts relationships
  • When we try to fix, change, or rescue, we assume that we know whats best. We take on an air of superiority and can act condescending
  • Making decisions for others takes away their autonomy and their opportunity to learn and grow
  • We become frustrated and resentful that our efforts to solve other peoples problems dont work and that they arent appreciated
  • We get distracted from solving our own problems. For some reason, fixing other people always seems easier than fixing ourselves!

Instead of doing things for other people, we need to allow them to live their own lives, make their own decisions and mistakes, and deal with the consequences of their choices. Not only does this free us up to focus on what we can control, it respects other peoples autonomy.

How to stop trying to fix, change, or solve other peoples problems

Before launching into fix-it mode, try asking yourself these questions:

  • Is this my issue or problem or is it someone elses problem thats affecting me?
  • Is this a problem I can fix or change?
  • Is changing this person or situation in my control?
  • How can I redefine the problem so that Im focusing on whats in my control?
  • Do I have any influence?
  • Did they ask for my help or ideas?
  • Am I forcing my solutions and ideas onto someone?
  • Am I helping or enabling? Whats the difference?
  • Why am I trying to solve this problem?
  • Is this actually an attempt to manage my own fears and anxiety about what may happen? And if so, how else can I deal with uncertainty and feeling out of control?

If youve been trying to fix or change people for years, it will take time and effort to change these patterns. In addition to being patient and compassionate with yourself along the way, try to focus on whats in your control and the problems that you can solve. Remember, if youre feeling particularly frustrated with your inability to change or solve a problem, you may be trying to solve someone elses problem.

.NET MAUI Reaches General Availability, Replacing Xamarin.Forms

Microsoft’s evolution of Xamarin.Forms, .NET Multi-platform App UI (.NET MAUI), has finally reached General Availability status, providing one framework for both mobile apps and, now, desktop apps.

Announced at the company’s big Build developer conference, the GA release is some six months late, as it was originally planned to debut with .NET 6 in November 2021 but “slipped the schedule.” So the dev team has been playing catch up with a series of previews and three Release Candidates, the latter just shipping a couple weeks ago. With this the conversion from Xamarin.Forms to .NET MAUI is basically complete. Xamarin support will continue through November 2023.

“.NET Multi-platform App UI (.NET MAUI), now generally available, is a new framework for building modern, multi-platform, natively compiled apps for iOS, Android, macOS and Windows using C# and XAML in a single codebase,” Microsoft said. “The framework solves the challenges developers face when building native apps across many operating systems. Instead of having to learn multiple technology stacks, .NET MAUI abstracts them into one common framework built on .NET 6.”

As a jack-of-all-trades tool (except for Linux and web), .NET MAUI uses native UI via app toolkits provided by each platform, and the dev team ships workloads to create applications that exclusively target Android, Android Wear, CarPlay, iOS, macOS, and tvOS directly using the native toolkits from .NET, and the supporting libraries AndroidX, Facebook, Firebase, Google Play Services and SkiaSharp, for examples.

What’s more, .NET MAUI can incorporate web components built with Microsoft’s Blazor framework for creating web apps primarily with C# instead of JavaScript. .NET MAUI features the BlazorWebView control, which permits rendering Razor components into an embedded Web View. By using .NET MAUI and Blazor together (Blazor Hybrid apps with .NET MAUI), developers can reuse one set of web UI components across mobile, desktop and web. As shown in the graphic below, .NET MAUI Blazor App is now a Visual Studio 2022 project type.

“Native apps look and feel like the operating system on which they belong by default and layouts are fully adapted to each device automatically, with no additional code,” Microsoft said this week. “APIs are available directly from C# to access over 60 platform features, including isolated storage, sensors, geolocation and camera. Visual Studio 2022 includes Hot Reload technology to make developers much more productive building .NET MAUI apps. Developers can also take advantage of the latest debugging, IntelliSense and testing features of Visual Studio to write better code faster.”

How To Train Your Brain To Become More Positive?

We face many challenges in our personal life as well as in our career. In fact, career is one aspect of life which constantly makes us uncertain and at times leads us to the negative loop. From the quest of choosing the right career to the competitive peers, from ever nudging relatives to an un-supportive family and what not! There is something that you can do about all your woes. That is, to train your brain to see good in everything.

Remember that ridiculously cheery, borderline creepy scene from Mary Poppins where the children (rightfully so) complain about having to clean up their room?

I was never a huge fan of the film — but I could always relate to the kids in that scene.

Why?

Cleaning sucks.

Doing things that you don’t like sucks.

But looking back, I have to admit… maybe Mary Poppins was on to something.

Right before breaking into song, she declares:

“In every job that must be done, there’s an element of fun. You find the fun, and SNAP, the job’s a game.”

We assume that by its very nature, a job isn’t meant to be fun. That’s why it’s called a JOB.

But what if a simple formula could snap you out of boredom, lethargy and negativity — and make you excited, happy and motivated?

The key? You have to train your mind to see the good in every situation. Even situations that initially seem negative.

Here are three ways to start training your mind to see the good in every situation:

#1: Realize that success takes time — and it’s totally OK to be bored in the process

Something weird happens in our brains when we’re bored with our goals.
First, we experience the irritating feeling of listlessness — which is uncomfortable in and of itself.

But that feeling of listlessness is usually followed by aggravation.

We’re bored with our lives. Then we get mad at ourselves for getting bored. Then we get we try to think of a way to get un-bored, and the only thing we can think of doing are the things that bored us in the first place.

Try this mental reframe: From now on, I want you to begin viewing boredom not as a sign of stagnation, but as a sign of consistent, steady progress.

As long as you’re doing the little things that you need to do every single day in order to succeed, then success is inevitable. It’s ok to be bored from Point A to Point B.

Just don’t stop.


#2: Create a system to start tracking your progress

Sometimes, the biggest reason why we fail to see the good in everyday situations is because we lose perspective on how far we’ve come. You’re missing the forest for the trees.

Remember coming back from summer vacation and seeing the people who’d grown six inches? You didn’t see them for months — so their growth was quite apparent. But to them, the growth probably didn’t feel noticeable.

Point being, you have to start taking notice of the little, day-to-day improvements that you make. Over time, this will allow you to see how far you’ve come, and it will give you a reference point for where you want to go.


#3: Remember that you can still make it — even when others discourage you

It’s hard to pursue your dreams when your family, friends and coworkers don’t believe in you. It feels good to have people that you care about support your vision.

But whenever someone tells you that you can’t do something, that a goal is “impossible” or downright laughs in your face, don’t get frustrated.

Instead, train your mind to see their disbelief as a challenge.

Instead of saying, “They’re probably right. I can’t do it” — train yourself to think, “Okay. Now, I’ll SHOW you what I can do.”

Every time someone disparages you in an opportunity to show them how strong your vision is.

Turn their negative energy into your rocket fuel and blast off.


By positive thinking I don’t mean that you shut your eyes towards reality and practicality but that you approach unpleasant situations in a more positive manner. You start searching the best in the worst. Don’t think that these things will have a magical effect overnight but yes you will certainly turn into an optimist with time and will come one step closer to happiness.

Measure of Your Character

Through our lives we encounter different types of people who are successful. Some we look up to and some who teach what we should not be. No matter how educated, talented, rich or cool you believe you are, how you treat people ultimately tells all. And this is exactly what came to my mind when I saw this pic when I was scrolling through my Instagram feed.  I think it’s a message we forget all too often, especially in our celebrity-worshiping, superiority-complex-having society. 

The media taught us from a very early age that beauty is measured by what’s on the outside, that those with money deserve power, that power demands respect, and that education is synonymous with intelligence.

Worst of all, we’re taught that those with any or all of the above are somehow better than us. That their lives matter more. 

There is one thing- and one thing alone- that determines the type of person you truly are: how you treat people.  All people. That starts by realizing that we’re all equal.

We need to let go of this idea that one person is somehow better than another just because they make more money, went to school longer, dress better, have a smaller waist or a more viral Instagram account. None of those things make you better than me or me better than you.

Judge a person not by how he treats you, but how he treats others. The former reflects what he wants you to think of him, the latter truly reflects who he is

Betty Jamie Chung

Let me tell you, money can’t buy a personality or brains. Four years of Ds can still earn you a degree. Outer beauty fades. Waistlines expand. In other words, none of those things are real and none of them tell you a single thing about a person’s true nature.

When you strip away the size of your bank account, following, or IQ, you’re left with the true measure of your worth- the size of your heart (metaphorically speaking, of course). If you ask me, I think a big heart beats a big bank account or brains any day!

I was raised to treat the janitor the same as I treat the CEO.

Janelle Monae

It’s easy to admire those with a certain title or job position but what we can’t tell from those things is who that person is. Although we may look up to someone for their achievements, true admiration comes when we see someone treat another person with respect and kindness even though they have no obligation to. 

It is easy to go through life only thinking of yourself and what your needs are, but when you extend compassion to others is when you truly contribute to the world. When you give the same respect to every person, you effect people more than you realize. The small acts of kindness you extent turn into a snowball of happiness through people passing it forward. 

I’m sure we have all experienced an interaction with someone that brightened our day. These come from true connections with people who show compassion towards us and can completely alter our attitude. Let’s all shine a light in other people’s lives by interacting with empathy and leading with character!

You Have EVERYTHING You Need

Have you ever stopped and wondered why you do the things that you do? Have you ever questioned why you spend so much time consuming content on the internet, television, or social media?

It’s easy to tell yourself the story that you won’t be happy or complete until you achieve x, y, and z. Or you need a, b and c to start on your dream. But what if I told you that you’re not lacking an answer. You don’t need more information or more resources or different people to support your goals.

Do you know how you can stop procrastinating?
Do you know how to stop wasting your time?

By realizing that you already have everything you need. It might sound like a simplistic way of looking at life, but there’s truth in it.

The reason we believe we need more stems from the idea that you yourself are not enough. You’re not enough as is so you have to collect accomplishments and material wealth to be seen as someone. We feel like there’s more to be done to become our best selves. You can work on self-improvement if you like, that’s a positive thing if it’s done right, but you have to first understand you have what you need and you’re enough as you are.

If you pull up a search on what it takes to be successful guess what you’ll find? The majority of the things listed are traits. They’re inside your mind, they’re part of your body. There’s always knowledge to consume, there’s always something to learn, but you have to stop underestimating yourself and start understanding that you have everything you need to succeed. It’s all within you waiting for you to tap into it.

For me, it took a long time to understand that the successful people I looked up to achieved what they did because of their internal motivations and their internal traits. They recognized that they had what they needed, they drew from a place of abundance, and they found that extra mile to run when everyone else gave up. With everyone around them looking for more support, more information, more experience, more physical resources, they relied on what they had and it was enough.

If I could wish for anything for you, it would be that you could understand that. That you’re enough and that you have everything you need.

There’s no pot of gold at the end of your rainbow, there’s no unicorn waiting for you to ride off into the sunset. None of that is real, but what is real is you and your abilities. The worst thing you can do is believe you need more than what you have because that, my friend, is simply an excuse to avoid your life’s work.

 You’re already enough, you already have enough, but you have to learn how to live that truth.

Appreciate

If you already have everything you need and you don’t know it, then the problem is you need to focus on appreciating this simple fact. Start building a habit of noticing what you have, being grateful for it, and stop taking everything for granted.


Respect

If you appreciate someone or something, then you more than likely treat it with respect. Respect the people around you, respect the things around you, and when you start the practice you’ll notice that it shows in your actions. It’s much easier to believe and recognize that you have everything you need when you respect the things you have and the people you meet.


Support

If you have enough why do you spend so much time worrying about it? Wouldn’t it make more sense to do for others? A lot of people in this world are suffering, is there something you can do to make a difference?

There’s a range of issues going on in the world and people are touched by all kinds of difficulties. What can you do to ease some of those ills? Of course, you can’t do it alone, but any contribution is a step in the right direction.


It’s difficult to remain present and appreciate life with everything going on in the world. You’re not immune to difficulty or pain, but that doesn’t mean you don’t already have everything you need. The more often you do the above three points, the quicker it will become second nature and you’ll recognize the profound miracle that is your life. You already have everything you need, all you need to do is see it.

Journey vs Destination

There’s nothing more natural than using path- and travel-related metaphors. We’ve all spoken of “long roads ahead”, “heading in the right direction”, or “taking a wrong turn.”

The destination is like a dot on the map, it’s the desired end-state of all our striving. If you’re trying to lose 20 pounds, then 20 pounds lighter is the destination. Thinking about the destination highlights the difference between where we are now and where we want to be: Knowing there is an ideal state and they are not there yet, that gap motivates people. It’s not just the beauty of our goal, it’s the pain of not yet having achieved it.

Journey metaphors, by contrast, draw a line from your current state to your future state and illuminate what it looks like. Thinking about the journey calls our attention to all the things we’ll need to do, the obstacles and milestones, the highs and lows along the way.

Big goals can be exciting, but they don’t come with directions. It’s easy to say “I’m going to get into great shape this year,” but that doesn’t tell us what to do tomorrow. Therefore, thinking about the journey is especially important right at the beginning.

Success is a journey, not a destination. The doing is often more important than the outcome.

Arthur Ashe

Focusing on the journey also helps us to map out the milestones and sub-goals that we’ll need to reach along the way. At the outset, focusing only on the final destination can be discouraging if we don’t have a clear path to get there. Setting out milestones gives us immediate direction, allows us to experience small successes along the way, and builds in opportunities to review whether our companions and equipment are still right for the next stage in the journey.


“Would you tell me, please, which way I ought to go from here?”
“That depends a good deal on where you want to get to,” said the Cat.
“I don’t much care where—” said Alice.
“Then it doesn’t matter which way you go,” said the Cat.
“—so long as I get SOMEWHERE,” Alice added as an explanation.
“Oh, you’re sure to do that,” said the Cat, “if you only walk long enough.”

–Lewis Carroll, Alice’s Adventures in Wonderland


When you’ve achieved a goal, take some time to reflect on how you got there. Think of the ups and downs on the way and link the behaviours that you used with the positive change that you experienced. To make this reflection more powerful document your progress along the way. Take photos if it’s a physical change. Journal and take notes along the way, the more personal the better. If you haven’t recorded your journey, it’s still worth doing. Close your eyes and think for a few minutes about what happened last month. What changed in the last month? These are the things we want to make a connection to using this journey mindset. Either way, the key is to find a sense of positive growth and link it to the behaviours that helped you achieve your goals.


Stay Strong

If movie soundtracks have taught us one thing, it’s that it can’t rain all the time and the sun will come out tomorrow. The hard part, though, is knowing how to stay strong until the storm passes. Life would be so much easier if it were all rainbows and sunshine every day, wouldn’t it? Sadly, that’s not reality. Hard times are an inescapable fact of human existence. Sometimes, life gets so hard that we don’t know how we’ll possibly manage to stay strong in the face of what’s happening. From dealing with global crises to personal tragedies, how do you find your inner strength?

You never know how strong you are, until being strong is the only choice you have

Bob Marley

Without adequate mental strength, life’s inevitable challenges will likely fill you with self-doubt and anxiety. Those uncomfortable feelings can lend way to negative thinking. And negative thinking will affect your behavior–which can inadvertently turn your catastrophic predictions into a self-fulfilling prophecy.

Staying strong in the midst of hardship requires you to manage your thoughts, feelings, and behavior. Paying attention to all three areas will help you emerge from your struggles even stronger than before. To remember how to stay strong during life’s toughest challenges, follow the ABC formula.

Accept reality.

Acceptance doesn’t mean agreement. Instead, it’s about acknowledging what is happening from a realistic standpoint. Digging in your heels and saying “I shouldn’t have to deal with this” only wastes your valuable time and energy. Accepting what is happening right now–regardless of whether you think it’s right–is the first step in deciding how to respond.

For example, one person stuck in a traffic jam says, “This isn’t fair! Why do these things always have to happen to me?” His thoughts cause him to feel angry, frustrated, and anxious. He starts banging his fists on the dashboard and screaming at other drivers.

Another driver who is stuck in the same traffic jam reminds himself, “There are millions of cars on the road every day. Traffic jams are bound to happen sometimes.” His point of view helps him stay calm and he listens to a podcast while he waits for cars to start moving again.

Accepting reality is about recognizing what’s within your control. When you can’t control the situation, focus on controlling yourself.


Behave productively.

Accepting reality helps you manage your thoughts and regulate your emotions–which are key to productive behavior. The choices you make when you’re faced with problems determine how quickly you’ll find a solution.

Even when you’re faced with a problem you can’t solve–like the loss of a loved one–you make choices about how to respond.

Unproductive behavior, like complaining or throwing a pity party, will keep you stuck. Those behaviors will rob of mental strength.

So it’s important to ask yourself, “What’s one thing I can do right now to help myself?” Whether productive behavior involves facing a fear, or doing something you really don’t want to do, take action.


Control upsetting thoughts.

Your mind can be your best asset or your biggest enemy. If you believe your negative thoughts, your self-limiting beliefs will prevent you from reaching your greatest potential.

Thinking “This will never work. I’m not good enough” or “I can’t stand one more minute of this” will derail you from reaching your goals. It’s important to recognize when your inner monologue becomes overly pessimistic. Remember that just because you think something, doesn’t make it true.

Talk to yourself as you’d talk to a trusted friend. When your thoughts become catastrophic or unhelpful, respond with a more realistic statement that confirms your ability to handle your struggles.


The hardest thing about finding your strength is that you only really discover it through tough times. Sure, you can build yourself up ahead of time and prepare to stay strong, but we can only find out if our strategies work when our strength is truly tested. Kind of like how you don’t know if your favorite tree will survive a hurricane until it actually does. So, yes, you can build yourself up beforehand, but remain flexible enough to adjust your strategies when the hurricane hits. Last but not least, remember, you can stay strong because you are strong.