What Power Apps Components Can Learn from Your Favorite Café

A good component is like your favorite coffee shop.

You place your order.

The barista prepares your drink.

When it's ready, they call your name and hand it over — just the way you expected.

And the best part? If you order the same drink tomorrow, it'll taste the same.

In this article, you'll learn:

  1. What a component is—in plain terms

  2. How inputs, outputs, and events relate to our coffee shop

  3. Three simple rules for building scalable components in power apps

  4. A real-world example of password matching

What is a Component?

A component is a building block — one small part of something bigger.

A LEGO brick is a component. Stack enough together, and you get a spaceship.

Or take your car: it's made up of smaller components, such as the engine, wheels, and doors.

Each part has a specific purpose, and when assembled, they form something useful.

The whole is often much greater than the parts.

In programming, it's no different. A component is a reusable piece of code. Alone, it might render a button or a label. Together with other elements, it helps build entire applications.

A website is just a collection of smaller building blocks called components.

How inputs, outputs, and events relate to our coffee shop

Just like LEGO bricks or car parts, components often take inputs and produce outputs.

  • Inputs flow into the component—instructions from the outside

  • Outputs from out of the component— data or signals sent back to whoever's listening

This relationship is often referred to as a parent-child arrangement.

  • The parent is the screen or component that "hosts" another component inside of it.

  • The child is the reusable component that is placed inside the parent— like a coffee shop inside a larger shopping center.

The parent gives the child its settings (inputs).

The child does its job and lets the parent know when something happens in the form of outputs and events.

The Coffee Shop (Child Component) in Plain Terms

  • Exists within a parent— the shopping center

  • Inputs = Your order (e.g., "Oat milk latte, no foam)

  • Logic = The barista behind the counter

  • Event = "Order for Sam!" — a signal that something has happened.

  • Output = Your drink

That's the model: a clean component takes instructions, performs its job, and notifies you when it's done.

But what does that actually look like in Power Apps?

Let’s walk through three simple rules that will help you design components that are easy to reuse, easy to test, and hard to break.

Three simple rules for building scalable components in Power Apps

Rule #1: Take the Order and Follow the Recipe

A well-designed component is like a well-run coffee franchise— it should function the same way, regardless of its location.

It doesn't matter what's happening at the restaurant next door.

It doesn't matter if it's the morning rush or a quiet afternoon.

And it definitely doesn't matter which location you visit — you expect your usual drink to come out… well, as usual.

Good components don't reach into the parent screen to grab what they need.

They don't rely on global variables.

And they don't make assumptions.

If a component needs information — like a title, color, or mode — that's handled through explicit inputs.

If the parent needs information back, that is handled through explicit outputs.

Coffee should taste the same no matter what location you choose.

Rule #2: Make the Same Order the Same Way Every Time

When you order a #5, you always expect the same drink.

It doesn't matter if there's a new barista behind the counter or they've upgraded the espresso machine — your oat milk latte should taste the same.

Your components should behave similarly.

In Power Apps, if a component receives an input like Title = "Are you sure?", that same title should appear the same way every time — without surprises.

It shouldn't sometimes include an emoji.

Or occasionally add extra punctuation.

While the parent provides the settings (inputs) to the component, how the component uses them to produce the output is up to the component.

These are called implementation details. And the parent component shouldn't have to care.

You ordered a drink with a tablespoon of sugar.

You don't care if they used a tablespoon or three teaspoons — as long as the drink tastes right.

That's precisely what makes a component testable, reusable, and predictable.

Rule #3: Announce When It's Ready

Imagine the barista finishes your drink… and then leaves it on the counter.

No name on the drink. No name called. No order number announced. No signal at all.

You sit there wondering what's taking so long — while your drink is slowly getting cold.

That's what happens when a component forgets to raise an event.

In Power Apps, when something meaningful happens — such as a button click or a value selection — the component should notify its parent.

To do this, the child component raises an event — such as OnSubmit, OnItemSelected, or OnChange — to notify the parent that something important has just occurred.

  • A button was clicked.

  • A choice was made.

  • A step was completed.

The component raised its hand and said, "Hey — something's ready."

The parent can then listen and react to these events.

Events are how the child component tells the parent component important information.

A Real-World Example: Password Matching

It's time to apply these concepts with a real world example. Let's say you're building a form with two fields:

  1. Password

  2. Verify Password

Here is a suboptimal way to build it:

  • You have two separate input components.

  • Each has a static label: "Password" and "Verify Password".

  • The second component checks a global variable to get the value of the first input.

  • It uses that global value to decide whether to show a message like: "Passwords do not match"

The problem?

This component isn't isolated — it's reaching outside itself to gather what it needs. It only works because of the specific screen it's on. Move it somewhere else, and it breaks.

A Better Approach: Reusable and Self-Contained

Let's improve this by building a single, reusable input component that works for both password fields.

Here is how it works. This component:

  • Accepts a LabelText input, like "Password" or "Verify Password," and displays it above the text input.

  • Accepts a HintText input, like "Passwords must match" or "Must include 1 special character", and displays it below the field.

  • Exposes a Value output—the current text input value.

  • Raises an OnChange event whenever the user types something new.

Now, you can drop this component in any form: One for the password and one for the confirmation field.

And, on the parent screen, you can handle the matching logic:

  • Listen for OnChange from either input.

  • Compare their Value outputs.

  • Update the HintText of the second input accordingly.

Summary

A well-built component is like a well-run coffee shop — or, better yet, a coffee shop franchise.

It waits for your order (input), prepares your drink behind the counter (logic), calls your name when it's ready (event), and hands you exactly what you expected (output).

It doesn't guess, and it doesn't fall apart if you open a new location.

By focusing on clear inputs, consistent outputs, and intentional events, you'll create components that are easy to reuse, easy to reason about, and ready to scale.

If you want a practical look at canvas apps components, check out this article.

Found this helpful? I work at the intersection of low-code and pro-code development, focusing on building performant apps and helping you reclaim your time through thoughtful automation. Explore more right here at scriptedbytes.com

0
Subscribe to my newsletter

Read articles from Brandon Wozniewicz directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Brandon Wozniewicz
Brandon Wozniewicz

Power Platform Developer and Data Analyst helping teams refactor workflows, automate with intention, and build smarter systems.