skip to content

Framework Architecture

How an automation codebase holds up as it grows: module dependency direction, session lifetime, configuration resolution and run evidence. Interviewers use it to tell engineering from scripting.

on this pageshow

explore

questions

page 2 of 2

A new harness runtime runs beside the old one while cases migrate — what must be true for both to stay green?

level: seniorimportance: should knowfreq 42%

basics

~20 s

Both runtimes must call one shared implementation of the business actions and report into a single result store. Only the entry point differs. Copy the behaviour instead of sharing it and the two halves drift apart silently.

open as a page

A protocol detail has leaked into a shared business action's signature in a layered automation suite — what does that cost when the adapter beneath it is replaced?

level: seniorimportance: should knowfreq 44%

basics

~20 s

A leaked detail in an action's signature — a raw response, an element identifier — puts the transport into every caller. Replacing the adapter then changes the signature and every case using it, so the boundary protected nothing.

open as a page

When a pipeline runs your suite, which failures should stop the stage and which should only be reported beside a passing one?

level: seniorimportance: should knowfreq 46%

basics

~20 s

Failures that say the change is unsafe block the stage. Failures already triaged and accepted, and checks advisory by design, are reported without blocking. Put the split in a written classification the suite applies, not in a per-run argument.

open as a page

Why must a case's identity in a result model be stable across runs rather than its display name or its position?

level: seniorimportance: should knowfreq 45%

basics

~20 s

History is joined on identity. If a case is identified by its display name or its position in a file, rewording a sentence or inserting a case above it destroys the past outcomes and creates a brand-new case carrying none.

open as a page

Why should an automated suite record a pass on a second attempt as a distinct outcome rather than a plain pass?

level: seniorimportance: should knowfreq 46%

basics

~20 s

A pass that needed a second attempt is evidence that a case is unstable. Merging it into a plain pass destroys the only proof that instability exists, so the suite keeps reporting green while its reliability quietly decays.

open as a page

A case fails only when the suite runs with several test workers, yet passes alone — how do you find the shared harness state?

level: seniorimportance: should knowfreq 52%

basics

~20 s

Treat worker count as a variable you control: reproduce at two workers, shrink to the smallest failing pair, then run the case beside a copy of itself. Then hunt the writer, not the reader that reported red.

open as a page

What evidence would convince you that rewriting an automation harness beats continuing to migrate it?

level: principalimportance: should knowfreq 34%

basics

~20 s

A measured burndown that will not finish before the reason for moving expires, a blocking constraint structural in the old design rather than incidental, and a plan that keeps the cases' behaviour. Dislike is not evidence.

open as a page

How do you cut the modules of an automation suite two teams change independently — one shared action library, or per-team modules over a common adapter layer?

level: principalimportance: should knowfreq 38%

basics

~20 s

It is a coupling-versus-duplication call. Share business actions only when both teams mean the same thing by a flow and need changes to land together. Otherwise give each team its own actions over a shared adapter layer.

open as a page

One long-lived deployed target serves every case and cannot be duplicated per test worker — how do you set the suite's isolation model?

level: principalimportance: should knowfreq 40%

basics

~20 s

Choose between two models: hand each worker its own slice of a scope the product already models, or run a wide pool of self-contained cases beside a small exclusive lane holding named locks. What the product scopes decides which.

open as a page

A suite's blocking pipeline invocation has a ten-minute budget but takes thirty-five; how do you restructure what each invocation promises?

level: principalimportance: should knowfreq 40%

basics

~20 s

First attribute the thirty-five minutes between fixed invocation cost and per-case cost. Then split one entry point into several with declared budgets and blocking rules, and make each enforce its own deadline rather than being killed.

open as a page

When would you model a suite's results in a bespoke schema rather than an interchange shape existing tools already read?

level: principalimportance: should knowfreq 38%

basics

~20 s

Choose by who reads it. An interchange shape everything already parses buys integration you never maintain and costs expressiveness; a bespoke model expresses your statuses and attempt history exactly and costs you every reader you must now write and keep writing.

open as a page

When a deployed target lacks a feature a case exercises, why should the case skip there rather than fail?

level: middleimportance: nice to knowfreq 34%

basics

~20 s

A failure means the product is wrong; a skip means the check did not apply here. Marking a case that needs an absent feature as skipped keeps the failure list meaningful, while a red result trains everyone to ignore red.

open as a page

When is a mechanical rewrite across every automated case unsafe, compared with editing each case by hand?

level: middleimportance: nice to knowfreq 24%

basics

~20 s

Mechanical rewrites are safe when the change is purely syntactic and every call site means the same thing. They turn unsafe the moment a site needs judgement: a value to choose, or an intent the old code expressed badly.

open as a page

What does a team lose when its suite's run steps live only in the pipeline definition?

level: middleimportance: nice to knowfreq 27%

basics

~10 s

Reproducibility. Steps that exist only in the pipeline definition cannot be run locally, so every change to them costs a push-and-wait cycle, and what a developer runs slowly diverges from what the gate runs.

open as a page

Where in a run's results should a failing case's evidence be attached so a reader finds it without reopening the run?

level: middleimportance: nice to knowfreq 25%

basics

~20 s

Attach evidence to the smallest node that owns it — the failing case, and where the model has them, the specific attempt and step. Evidence parked at run level makes a reader search for which case it belongs to.

open as a page

When is a shared base class still the right reuse mechanism in an automation harness, rather than a defect?

level: seniorimportance: nice to knowfreq 24%

basics

~20 s

Inheritance earns its place when the work is invariant across every descendant, takes no value the case chooses, and no case could ever want it off — failure capture and result reporting qualify. Once an opt-out is thinkable, compose instead.

open as a page

Why does reading a configuration setting fresh at each point of use, rather than once at startup, make a run hard to reproduce?

level: seniorimportance: nice to knowfreq 26%

basics

~20 s

Nothing pins the value. Reads spread across a run see different answers if a layer changes underneath them, no moment exists at which the full input set could be recorded, and parallel cases can act on different values.

open as a page

What should a provisioning call hand back so an automated case can prove which records it created?

level: seniorimportance: nice to knowfreq 24%

basics

~20 s

A handle rather than a bare identifier: the record asked for, the identities of everything created alongside it, and a tag naming the case and run that asked. That tag is what makes ownership answerable after the run has ended.

open as a page

How does a suite that leaks driver sessions show itself before the run host runs out of resources?

level: seniorimportance: nice to knowfreq 24%

basics

~20 s

Run duration climbs within a single run, host resource use rises and never falls back between cases, orphan processes survive the run, and late cases fail with resource errors that name the machine rather than the feature.

open as a page

What compatibility promise does a suite's extension point make to the code that plugs into it?

level: seniorimportance: nice to knowfreq 24%

basics

~20 s

Publishing an extension point freezes what the framework passes in, what it accepts back, when it calls and how often, and what a thrown error does. Widening any of those forces every dependant to change at once.

open as a page

How does a suite decide which evidence to capture on every case and which only on failure?

level: seniorimportance: nice to knowfreq 28%

basics

~20 s

Split by cost. Evidence that is cheap to produce and expensive only to keep — the step log, durations, identifiers — is produced always into a bounded buffer and written only on failure. Evidence expensive to produce is gated behind a failure.

open as a page

How do you recognise and break up a shared utility module that every part of an automation suite imports?

level: seniorimportance: nice to knowfreq 30%

basics

~20 s

Recognise it by its symptoms: a name that names no subject, imports from every layer, and nothing that can be extracted. Break it up by freezing it and moving out one cohesive group at a time.

open as a page

Why is a suite that passes only when run serially a defect rather than a configuration choice?

level: seniorimportance: nice to knowfreq 20%

basics

~20 s

Running with one worker changes no code: it removes the only thing exercising the coupling, not the coupling itself. The constraint stays unnamed, its cost grows with every case, and it may hide interference real users will meet.

open as a page

In an automated suite, what does a retry budget for the whole run protect that a per-case retry cap does not?

level: seniorimportance: nice to knowfreq 20%

basics

~20 s

A per-case cap bounds one case's attempts and nothing bounds how many cases retry. A run-level budget caps total re-execution across the suite, so a suite-wide breakage reports red quickly instead of paying the full cap on every case.

open as a page

Giving each parallel test worker its own current-case context fixes cross-talk; what does a helper that reads that context implicitly still cost you?

level: seniorimportance: nice to knowfreq 28%

basics

~20 s

Scoping removes the mix-up, not the hidden dependency. A helper that reaches for an ambient current-case value has an input its signature does not declare, cannot be reasoned about locally, and misbehaves wherever no case is in scope.

open as a page

showing 31–55 of 55