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 pageshowhide
explore
- Codebase Structure16 questions
- Module Boundaries5 questions
- Base Class Inheritance4 questions
- Extension Points3 questions
- Evolving the Harness4 questions
- Execution Runtime15 questions
- Driver Session Lifecycle4 questions
- Thread-Safe Harness State4 questions
- Parallel Isolation Model4 questions
- Retry Placement3 questions
- External Inputs12 questions
- Configuration Precedence4 questions
- Environment Resolution4 questions
- Test Data Seams4 questions
- Run Evidence12 questions
- Failure Artefacts4 questions
- Result Model4 questions
- Pipeline Entry Contract4 questions
- AI & Data Scientistrole
- AI Engineerrole
- Backend Developerrole
- Data Engineerrole
- Frontend Developerrole
- Full Stack Developerrole
- Game Developerrole
- Java Backend Developerrole
- Java SDETrole
- Kotlin Backend Developerrole
- MLOps Engineerrole
- Machine Learning Engineerrole
- QA Engineerrole
- Software Architectrole
- iOS Developerrole
questions
page 2 of 2A new harness runtime runs beside the old one while cases migrate — what must be true for both to stay green?
basics
~20 sBoth 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.
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?
basics
~20 sA 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.
When a pipeline runs your suite, which failures should stop the stage and which should only be reported beside a passing one?
basics
~20 sFailures 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.
Why must a case's identity in a result model be stable across runs rather than its display name or its position?
basics
~20 sHistory 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.
Why should an automated suite record a pass on a second attempt as a distinct outcome rather than a plain pass?
basics
~20 sA 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.
What evidence would convince you that rewriting an automation harness beats continuing to migrate it?
basics
~20 sA 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.
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?
basics
~20 sIt 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.
A suite's blocking pipeline invocation has a ten-minute budget but takes thirty-five; how do you restructure what each invocation promises?
basics
~20 sFirst 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.
When would you model a suite's results in a bespoke schema rather than an interchange shape existing tools already read?
basics
~20 sChoose 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.
When a deployed target lacks a feature a case exercises, why should the case skip there rather than fail?
basics
~20 sA 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.
When is a mechanical rewrite across every automated case unsafe, compared with editing each case by hand?
basics
~20 sMechanical 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.
What does a team lose when its suite's run steps live only in the pipeline definition?
basics
~10 sReproducibility. 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.
Where in a run's results should a failing case's evidence be attached so a reader finds it without reopening the run?
basics
~20 sAttach 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.
When is a shared base class still the right reuse mechanism in an automation harness, rather than a defect?
basics
~20 sInheritance 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.
Why does reading a configuration setting fresh at each point of use, rather than once at startup, make a run hard to reproduce?
basics
~20 sNothing 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.
What should a provisioning call hand back so an automated case can prove which records it created?
basics
~20 sA 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.
How does a suite that leaks driver sessions show itself before the run host runs out of resources?
basics
~20 sRun 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.
What compatibility promise does a suite's extension point make to the code that plugs into it?
basics
~20 sPublishing 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.
How does a suite decide which evidence to capture on every case and which only on failure?
basics
~20 sSplit 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.
How do you recognise and break up a shared utility module that every part of an automation suite imports?
basics
~20 sRecognise 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.
Why is a suite that passes only when run serially a defect rather than a configuration choice?
basics
~20 sRunning 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.
In an automated suite, what does a retry budget for the whole run protect that a per-case retry cap does not?
basics
~20 sA 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.
showing 31–55 of 55