Comparison

Upgrade Radar vs Hiring an agency

80% of the Hiring an agency cells below carry a cited source — a dossier reference, a content snapshot and a capture date. The rest say "not verified": never invented, never blank. Full sourcing: the comparisons index.

FeatureUpgrade RadarHiring an agency
Compatibility check methodEvery plugin in your composer.lock checked against one target Shopware version in one report — 37-rule composer-semantics engine, Compatible / Conflict / Unknown with the excluding constraint quotedAn agency developer reads each plugin's composer.json / shopware/* constraint by hand, then runs `composer update --dry-run` — per plugin, per shop, per window. Same declared-constraint answer, done by a person. (ref: manual-check-method-001, snap: 372cb1e1, 2026-08-17)
Cost of the workHosted check free; the CLI is a one-time purchase you keep — no hourly bill, no retainer, no per-shop chargeCertified Shopware agencies in Germany bill EUR 100-180/h net in 2026 (Silver at the low end, Platinum at the high end); an hour of that buys the manual read of roughly one shop's plugins. (ref: agency-cost-001, snap: 12cedb97, 2026-08-17)
Typical scale per upgradeReads every plugin in the lock in one run — the same sweep an agency does plugin-by-plugin by handA Shopware agency admitted the manual test is 20-50 plugins after every core update, and that the effort is routinely underestimated when planning the window. (ref: agency-scale-001, snap: 10ae91dd, 2026-07-04)
RecurrenceRuns again on every new shop and every new window at no extra cost — the report is yours, re-runnable any timeThe manual check recurs after every core update — an episodic, roughly annual need (6.7 shipped 2025, 6.8 planned for 2027) that an agency bills hourly each time. (ref: agency-scale-001, snap: e05e94eb, 2026-07-04)
Undeclared-constraint handlingPlugins with no evaluable shopware/* constraint are reported as unknown, never assumed fine — so your manual-check list is named, not hiddennot verified

Check a real shop

Run your composer.lock through the checker — it reads declared constraints the same honest way this page does.