The PL-400: Microsoft Power Platform Developer exam sits at an interesting crossroads. It's a developer certification — there's real C#, JavaScript, and TypeScript in scope — but its guiding philosophy is that you should reach for code last, not first. Pass it and you've proven you can extend the Power Platform responsibly: knowing when configuration is enough, and when a plug-in, a custom connector, or an Azure Function is the right tool. These are my field notes, reorganised around how the exam actually thinks.

Before you study anything, read the official skills measured document for PL-400 and take the free practice assessment on Microsoft Learn. Knowing the weighting of each area is half the battle — and as the old saying goes, work expands to fill the time you give it, so book the exam to focus your prep.

The five skill areas at a glance

PL-400 is organised into weighted domains. The single biggest one — extending the platform with code — is where most of your hands-on practice should go:

PL-400 skills measured (approximate weighting)
10-15%
Create a technical design

Architecture, auth strategy, and deciding whether out-of-the-box features can meet a requirement before any code is written.

10-15%
Build solutions

Environments, solutions, environment variables, layers, Pipelines, and ALM with source control.

10-15%
Power Apps improvements

Advanced canvas features, complex Power Fx, reusable component libraries, and performance tuning.

10-15%
Extend the UX

Client scripting against the Client API, command bar customisation, and building PCF code components.

30-35%
Extend the platform

The heavyweight: Dataverse plug-ins, custom APIs, custom connectors, Azure Functions, and cloud flows.

10-15%
Develop integrations

Publishing and consuming Dataverse events, and synchronising data with change tracking and upserts.

"Extend the platform" is roughly a third of the exam — weight your hands-on time accordingly.

Design first: authentication and authorization

A surprising amount of PL-400 is design judgement, and it starts with identity. Two words that sound alike but mean different things:

Configure before you code

This is the mantra the whole exam is built on: treat writing code as the exception, not the default. Many requirements are met entirely with platform features, and the exam loves to check that you know them — and their limits.

FeatureHow it behavesGood to remember
Calculated columns Computed on retrieve. Can use columns on the row and across many-to-one relationships.
Formula columns Computed on retrieve, powered by Power Fx. Wide range of Power Fx functions; limited support for currency columns.
Rollup columns Aggregated on a schedule (recalculated roughly hourly). Need a one-to-many relationship; max 100 per environment, 10 per table; supports hierarchies.
Business rules Declarative validation and logic on forms and server-side. Often remove the need for JavaScript on model-driven forms.

A key nuance the exam probes: client scripting reacts immediately as a user leaves a field, whereas calculated and formula columns only update on retrieve — so a freshly typed value won't reflect in a calculated column until the data is reloaded. And when a configured feature falls short, the fallbacks are themselves worth knowing: business rules, client script (JavaScript), real-time workflows, plug-ins, and Power Automate cloud flows can stand in for calculated/formula columns, while plug-ins and cloud flows can replace rollups. A cloud flow can even cascade changes down a one-to-many relationship — pushing a changed address from an account to all its contacts, for instance.

Where should the logic live?

The most exam-critical decision you'll make repeatedly: given a requirement, which extensibility point runs the logic? This comparison is the heart of it:

CapabilityPower Automate cloud flowDataverse plug-inClient scripting
Sync / asyncAsynchronousEitherSynchronous
External dataYes, via connectorsYes, via APIsYes, with limits
Maintained byMakersDevelopersDevelopers
Runs on demandYesNoNo
Execution stageAfterBefore / afterBefore / after
TriggersCreate, change, delete, on-demand, scheduledCreate, change, delete + many other messagesColumn change or form load/save

And when the work is heavier or longer-running, the choice widens to serverless. The trade-off between a plug-in and an Azure Function comes up often:

The plug-in execution pipeline

If you take one diagram into the exam, make it this one. A Dataverse plug-in is registered against a message (Create, Update, etc.) and runs at a particular stage. Pre/Post Images let you see the row's values before and after the operation:

Dataverse event execution pipeline
Message raisede.g. Update on Account
Pre-validation (stage 10)Outside the database transaction
Pre-operation (stage 20)In transaction, before the core write — tweak input values
Core platform operationThe row is written
Post-operation (stage 40)React to the saved row — use a Post Image
Response returnedSync plug-ins can block the operation by throwing

Register on the right stage: change inputs in pre-operation; act on the saved record in post-operation.

Other "extend the platform" essentials: develop plug-ins against the execution context, talk to data through the Organization service, register everything with the Plug-in Registration Tool, and expose reusable server logic as a custom API message. For outbound work, you can publish Dataverse events to webhooks, Azure Service Bus, or Azure Event Hubs — Service Bus is asynchronous and queueable, while a webhook is an HTTP call that depends on the endpoint being available and can run synchronously.

PCF: the Power Apps component framework

PCF lets developers build reusable, rich UI controls in HTML, CSS, and TypeScript, package them as solutions, and drop them into model-driven apps, canvas apps, and Power Pages. There are three component types — a field control (one column on a form), a dataset control (a custom grid/subgrid), and a control that surfaces content from external services.

The exam expects you to know the component lifecycle methods cold:

MethodWhen it runs & what it's for
initInitialises the component; kick off remote calls here. Note: dataset values aren't available yet — use updateView for those.
updateViewCalled whenever a value in the component's property bag changes.
getOutputsOptional. Called before new data is received; use it to manage bound properties.
destroyRuns when the component leaves the DOM. Clean up and release memory here.
Security gotcha: PCF controls are app-agnostic, so when one uses the Web API (or runs in a canvas app via the Dataverse connector, or on a Power Pages site), grant access with least-privilege custom security roles — don't reach for System Administrator. Power Pages additionally needs Web roles and table permissions. Always weigh the privilege type (Create/Read/Update/Delete/Append/Append To/Assign/Share) and whether organization-level depth is really required.

Solutions and ALM

Solutions are the containers that move your work between environments — the backbone of application lifecycle management. The classic path runs Dev → Test → Production:

Solutions move customisations along the ALM path
Development

Unmanaged solution; author and edit

Test

Managed solution; validate in isolation

Production

Managed solution; deploy to users

Unmanaged while you build; managed everywhere downstream.

The distinction matters on the exam: unmanaged solutions are for development and moving work between dev environments; managed solutions are for distributing to non-dev environments. A few more points that come up:

Automating the pipeline

You're expected to know the spectrum of automation tooling and when each fits:

Dataverse, the data backbone

Underneath all of this is Dataverse — an API-first, secure, low-code data platform. Know the three table types: standard (create and edit rows), activity (track time-bound interactions like emails, phone calls, and tasks — and remember all activities share one set of security privileges), and virtual (surface external data as Dataverse tables without copying it). Server-side logic and validation come from business rules, business process flows (model-driven only), classic workflows, and code.

Integrations and the platform APIs

Finally, you interact with Dataverse two main ways, and the exam wants you to pick correctly:

For data synchronisation, lean on change tracking to pull only what's changed, alternate keys to reference rows by a natural business key, and the UpsertRequest message to insert-or-update in one call. When you build custom connectors, you'll create an OpenAPI definition, implement authentication, optionally wrap an Azure service or Function, and use policy templates to reshape runtime behaviour. And across all API work, design for retry policies, concurrency, bulk operations, and OAuth.

For choosing between Azure integration services, anchor on intent: Logic Apps to orchestrate workflows across many services, Service Bus for enterprise messaging, API Management to publish APIs, Event Grid for managed publish-subscribe event routing, and Event Hubs for high-volume real-time ingestion.

The takeaway

PL-400 rewards a particular instinct: reach for configuration first, understand exactly where the platform's declarative features stop, and only then choose the right code-based extension — a business rule, a cloud flow, a plug-in on the correct pipeline stage, a PCF control, or an Azure Function. Pair that judgement with solid ALM hygiene (solutions, environment variables, layers, source control) and a working knowledge of the Web API versus the Organization service, and the heavyweight "extend the platform" domain stops being intimidating. Study the scenarios, get hands-on in a developer environment, and let the configure-before-code mindset guide every answer.

DS

Dhaval Shah

Cloud Solution Architect — 18+ years across SharePoint, Microsoft 365, and Azure AI.