<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Devesh Pareek</title>
    <description>The latest articles on DEV Community by Devesh Pareek (@decipheringlogic).</description>
    <link>https://dev.to/decipheringlogic</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4108446%2Fd12d9b2a-13d0-40fe-b260-dac5470e0d29.png</url>
      <title>DEV Community: Devesh Pareek</title>
      <link>https://dev.to/decipheringlogic</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/decipheringlogic"/>
    <language>en</language>
    <item>
      <title>EU AI Act Compliance Checklist for Scale-Up CTOs</title>
      <dc:creator>Devesh Pareek</dc:creator>
      <pubDate>Thu, 08 Oct 2026 13:48:44 +0000</pubDate>
      <link>https://dev.to/decipheringlogic/eu-ai-act-compliance-checklist-for-scale-up-ctos-2d3m</link>
      <guid>https://dev.to/decipheringlogic/eu-ai-act-compliance-checklist-for-scale-up-ctos-2d3m</guid>
      <description>&lt;h1&gt;
  
  
  EU AI Act: The Engineering Decisions That Actually Matter Before You Ship
&lt;/h1&gt;

&lt;p&gt;Most of the EU AI Act coverage focuses on fines and timelines. This post focuses on the decisions that affect your architecture, your data pipelines, and your team's sprint planning right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with risk classification
&lt;/h2&gt;

&lt;p&gt;The Act uses four tiers: unacceptable, high, limited, and minimal. Where your system lands determines almost everything else. High-risk is not based on your intent — it is based on use case and domain. Hiring tools, credit scoring, medical device software, and critical infrastructure management all land in high-risk regardless of how the underlying model works.&lt;/p&gt;

&lt;p&gt;If your model's output feeds into a decision in one of those domains, start from the assumption of high-risk and work backwards. Classification is a written decision, not an internal assumption. Assign an owner and get legal sign-off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical documentation is an engineering problem
&lt;/h2&gt;

&lt;p&gt;For high-risk systems the Act requires a technical file with specific contents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System description and intended purpose&lt;/li&gt;
&lt;li&gt;Design logic and key design choices&lt;/li&gt;
&lt;li&gt;Training, validation, and testing data and methodology&lt;/li&gt;
&lt;li&gt;Accuracy, robustness, and cybersecurity metrics&lt;/li&gt;
&lt;li&gt;Risk management documentation&lt;/li&gt;
&lt;li&gt;Post-market monitoring plan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The documentation gap most teams have is in dataset provenance and the risk management log. If you are running MLflow or Weights and Biases, your experiment logs are the raw material. The missing piece is usually a dataset registry that records source, collection date, labeling methodology, and known limitations.&lt;/p&gt;

&lt;p&gt;Build the systems that generate this documentation from your existing tooling rather than writing it by hand. Hand-written compliance documents go stale immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Human-in-the-loop is an architecture decision
&lt;/h2&gt;

&lt;p&gt;The Act requires that humans can understand, monitor, and intervene in high-risk system outputs. That is a spec, not a policy. In practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automated actions with no review step are a compliance gap for high-risk classifications&lt;/li&gt;
&lt;li&gt;Outputs must be interpretable enough that a reviewer can understand why a decision was reached&lt;/li&gt;
&lt;li&gt;Every decision must be logged and traceable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building HITL as an afterthought means building a review queue nobody uses. Design the intervention surface and the escalation thresholds into your model serving layer before the first production release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data governance additions on top of GDPR
&lt;/h2&gt;

&lt;p&gt;The Act does not replace GDPR. For high-risk systems, training data must meet quality criteria — relevant, representative, free of significant errors. You need to be able to demonstrate this on request.&lt;/p&gt;

&lt;p&gt;Key questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do you have a dataset registry?&lt;/li&gt;
&lt;li&gt;Can you produce it for a regulator or enterprise buyer?&lt;/li&gt;
&lt;li&gt;If training data included EU personal data, do you have a documented lawful basis?&lt;/li&gt;
&lt;li&gt;What is your process if a training dataset needs to be pulled after deployment?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last question is the one most teams cannot answer cleanly. Retraining or retiring a model quickly when a data source is found to be problematic is an operational and architectural requirement, not just a legal one.&lt;/p&gt;

&lt;h2&gt;
  
  
  GPAI deployer obligations
&lt;/h2&gt;

&lt;p&gt;If you are building on a foundation model rather than training your own, you cannot outsource compliance to your model provider. Their GPAI compliance covers their obligations. Your application-level risk classification, any fine-tuning you apply, and the transparency requirements of your deployed system are still yours.&lt;/p&gt;

&lt;p&gt;Get the technical documentation from your model provider. If they cannot provide it, treat it as a vendor risk issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do in the next 30 days
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Produce a written risk classification for each AI system you are shipping or planning to ship this quarter. One page per system, legal sign-off required.&lt;/li&gt;
&lt;li&gt;Run a gap analysis against the high-risk technical file requirements for any system that lands in that tier.&lt;/li&gt;
&lt;li&gt;Make the HITL architecture call before the next sprint for any high-risk system, not as a later iteration.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are small decisions in terms of time. They have large downstream effects on your architecture and your vendor contracts.&lt;/p&gt;




&lt;p&gt;Originally published at decipheringlogic.com&lt;/p&gt;

</description>
      <category>startup</category>
      <category>productdevelopment</category>
      <category>mvp</category>
    </item>
    <item>
      <title>Building a Restaurant Loyalty App That Talks to Your POS</title>
      <dc:creator>Devesh Pareek</dc:creator>
      <pubDate>Thu, 01 Oct 2026 06:01:09 +0000</pubDate>
      <link>https://dev.to/decipheringlogic/building-a-restaurant-loyalty-app-that-talks-to-your-pos-4d4b</link>
      <guid>https://dev.to/decipheringlogic/building-a-restaurant-loyalty-app-that-talks-to-your-pos-4d4b</guid>
      <description>&lt;h1&gt;
  
  
  Building a Restaurant Loyalty App That Talks to Your POS: The Integration Decisions That Actually Matter
&lt;/h1&gt;

&lt;p&gt;The loyalty logic in a restaurant app is not complicated. Points accrue on purchase, rewards redeem at a threshold, referrals credit when a new guest completes a qualifying visit. You can model that domain in an afternoon.&lt;/p&gt;

&lt;p&gt;The POS integration is a different problem entirely. It's where most restaurant-tech builds stall — not in the planning phase, but in week four of development when the team discovers that the POS only exposes data via hourly batch exports, or that bidirectional redemption requires a vendor partnership agreement nobody had applied for.&lt;/p&gt;

&lt;p&gt;This post covers the technical decisions that need to be made before a line of code is written.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the POS surface area
&lt;/h2&gt;

&lt;p&gt;Before you design anything, know exactly what your POS exposes and how.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud-native platforms&lt;/strong&gt; (Toast, Square, Lightspeed, etc.) typically offer REST APIs with OAuth, sandbox environments, and reasonable documentation. Integration scope is predictable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-premise or legacy systems&lt;/strong&gt; may expose data only through a local database, a proprietary SDK, or scheduled CSV exports. Middleware is often required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Franchise-managed platforms&lt;/strong&gt; sometimes gate API access behind a developer or partner program. This takes time to apply for and isn't guaranteed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first technical spike in any POS integration project should be: authenticate against the sandbox, pull a transaction record, confirm the data model. If you can't do that in a day, you've found a constraint worth escalating before architecture decisions are made.&lt;/p&gt;

&lt;h2&gt;
  
  
  Map each data flow explicitly
&lt;/h2&gt;

&lt;p&gt;There are at least four distinct flows in a loyalty-plus-POS system, and they have different latency requirements and failure modes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flow&lt;/th&gt;
&lt;th&gt;Direction&lt;/th&gt;
&lt;th&gt;Latency&lt;/th&gt;
&lt;th&gt;Failure impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Transaction events&lt;/td&gt;
&lt;td&gt;POS → loyalty&lt;/td&gt;
&lt;td&gt;Near real-time or per-session&lt;/td&gt;
&lt;td&gt;Points not awarded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reward redemption&lt;/td&gt;
&lt;td&gt;Loyalty → POS&lt;/td&gt;
&lt;td&gt;Real-time at checkout&lt;/td&gt;
&lt;td&gt;Double redemption or failure at register&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Menu/item data&lt;/td&gt;
&lt;td&gt;POS → loyalty&lt;/td&gt;
&lt;td&gt;Daily sync usually sufficient&lt;/td&gt;
&lt;td&gt;Stale data in app&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer identity&lt;/td&gt;
&lt;td&gt;Bidirectional&lt;/td&gt;
&lt;td&gt;At transaction time&lt;/td&gt;
&lt;td&gt;Misattributed points&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Redemption is the most operationally sensitive. If the loyalty app times out during a checkout and the POS can't confirm the discount, the cashier is stuck. That failure mode needs a defined fallback — manual override code, offline redemption queue, or graceful degradation — before you're in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  The identity problem
&lt;/h2&gt;

&lt;p&gt;Your loyalty app knows the customer. Your POS knows the transaction. They don't automatically agree on who made the purchase.&lt;/p&gt;

&lt;p&gt;Common matching approaches:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phone-number lookup at register&lt;/strong&gt; — low technical complexity, high dependency on cashier discipline. Expect a non-trivial miss rate in practice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;QR code from loyalty app&lt;/strong&gt; — works well in counter-service contexts, adds a step to the checkout flow. Reliable when customers use it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Card-on-file linkage&lt;/strong&gt; — cleanest UX, depends on payment processor support (not just POS support). Not universally available.&lt;/p&gt;

&lt;p&gt;Whichever method you choose, design your attribution logic around its realistic failure rate. If 15-20% of transactions won't be attributed, your points balance display, dispute handling, and campaign logic need to account for that gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Offline behavior
&lt;/h2&gt;

&lt;p&gt;Restaurant environments lose connectivity. Food trucks, basements, festival stalls — these are real deployment contexts. Your integration needs an explicit position on what happens when the POS can't reach your loyalty backend.&lt;/p&gt;

&lt;p&gt;The standard approach is local transaction queuing on the POS with sync-on-reconnect. Points are awarded on sync, not in real time. This is acceptable for most use cases but breaks time-sensitive promotions and real-time redemption validation.&lt;/p&gt;

&lt;p&gt;For multi-unit or franchise deployments, offline behavior needs to be consistent across locations. Inconsistency at this level becomes a support and trust problem at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  The data model consequences of multi-location rules
&lt;/h2&gt;

&lt;p&gt;If a customer earns points at location A and redeems at location B, your data model needs to represent that clearly. If referrals can cross locations, you need a transaction-level location attribute on every event.&lt;/p&gt;

&lt;p&gt;These seem like business rules. They are — but they have schema-level consequences. Adding cross-location attribution to a data model that wasn't designed for it is a migration, not a feature flag.&lt;/p&gt;

&lt;p&gt;Get the business rules documented before the schema is designed. That's the constraint.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a pre-build integration spec should contain
&lt;/h2&gt;

&lt;p&gt;Before development starts, you want a document that covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;POS platform, API version, authentication method, sandbox access status&lt;/li&gt;
&lt;li&gt;Each data flow: direction, trigger, latency requirement, failure fallback&lt;/li&gt;
&lt;li&gt;Identity-matching method and expected attribution rate&lt;/li&gt;
&lt;li&gt;Offline behavior per integration point&lt;/li&gt;
&lt;li&gt;Multi-location data ownership and cross-location loyalty rules&lt;/li&gt;
&lt;li&gt;Redemption UX at the register and how it maps to POS API capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without this, the development team makes these decisions in code, under time pressure. Those decisions are expensive to reverse.&lt;/p&gt;

&lt;h2&gt;
  
  
  On the build itself
&lt;/h2&gt;

&lt;p&gt;The Grill Masters Pro Shop loyalty and referral system — a product we shipped — is an example of a build where POS integration was scoped before prototyping started, not discovered during development. The upfront questions about which POS, which data flows, and how redemption would work at the register shaped the architecture from the start.&lt;/p&gt;

&lt;p&gt;That scoping work is not glamorous. It's also the difference between a build that ships and one that stalls.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at decipheringlogic.com&lt;/em&gt;&lt;/p&gt;

</description>
      <category>startup</category>
      <category>productdevelopment</category>
      <category>mvp</category>
    </item>
    <item>
      <title>What Does a Clickable Prototype Actually Cost in 2026?</title>
      <dc:creator>Devesh Pareek</dc:creator>
      <pubDate>Thu, 24 Sep 2026 13:15:18 +0000</pubDate>
      <link>https://dev.to/decipheringlogic/what-does-a-clickable-prototype-actually-cost-in-2026-18nc</link>
      <guid>https://dev.to/decipheringlogic/what-does-a-clickable-prototype-actually-cost-in-2026-18nc</guid>
      <description>&lt;h1&gt;
  
  
  What Actually Drives App Prototype Cost in 2026?
&lt;/h1&gt;

&lt;p&gt;Most quotes non-technical founders receive for a "prototype" are actually quotes for a working product. The distinction matters because the cost difference is significant and the decision of which one you need is usually not technical — it is about what stage you are at.&lt;/p&gt;

&lt;p&gt;This post is aimed at developers and technical leads who advise founders, or who are themselves building something on the side. Understanding how prototype cost breaks down helps you scope better and set expectations earlier.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three variables that drive cost
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Scope&lt;/strong&gt; is the dominant factor. A prototype covering a single user flow — onboarding through one primary action — might take 40-60 hours of design time in a tool like Figma. A second user role roughly doubles that. A third flow with branching states doubles it again. Founders often describe four flows in a single paragraph without realizing it, and the scope estimate they receive reflects all four.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fidelity&lt;/strong&gt; is the second variable. Low-fidelity wireframes (grey boxes, placeholder copy) are faster to produce and better for early concept testing because users focus on flow rather than visual detail. High-fidelity prototypes (real brand, real copy, realistic interactions) cost $3,000-$5,000 more but are generally what you want for investor meetings or usability testing where visual credibility matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integrations&lt;/strong&gt; are where people get caught. A Figma prototype simulates data — there is no real API call. But some founders specifically need a live payment flow, a real calendar integration, or an actual EHR data pull to validate something specific. That requires code. A coded prototype with real integrations costs 3-5x more than a design prototype and takes longer to build. It is sometimes the right call, but most founders at the idea stage do not need it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a prototype quote should include
&lt;/h2&gt;

&lt;p&gt;A few things to check when reading a prototype estimate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Screen count&lt;/strong&gt;: "as needed" is not a scope. Get a number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revision rounds&lt;/strong&gt;: time-capped or unlimited? Unlimited on a fixed-price engagement means the cost is hidden somewhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build plan&lt;/strong&gt;: a Figma file without technical documentation leaves the founder with no way to get a reliable engineering quote. The build plan — stack recommendations, integration requirements, rough cost range — should be included or explicitly priced.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coded vs. design prototype&lt;/strong&gt;: make sure the quote matches what was actually asked for. These are different products.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why the build plan matters as much as the prototype
&lt;/h2&gt;

&lt;p&gt;A clickable prototype answers the question: does this feel right to users and investors? A build plan answers the question: what would it actually take to build this? Without both, a founder either has something pretty with no engineering path, or a rough cost estimate with no way to communicate the product.&lt;/p&gt;

&lt;p&gt;The gap between prototype and build is where a lot of early-stage projects stall. Developers get handed a Figma file and a vague description. They make assumptions. Those assumptions cost money to unwind later.&lt;/p&gt;

&lt;p&gt;A build plan that covers the data model at a high level, the external integrations required, the non-obvious technical decisions (auth, offline support, multi-tenancy), and a sequenced feature roadmap for v1 gives an engineering team something to actually work from.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rough cost ranges for 2026
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Typical range&lt;/th&gt;
&lt;th&gt;Timeline&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Low-fidelity wireframes, single flow&lt;/td&gt;
&lt;td&gt;$1,500 - $3,000&lt;/td&gt;
&lt;td&gt;1 week&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High-fidelity prototype, single flow&lt;/td&gt;
&lt;td&gt;$4,000 - $7,000&lt;/td&gt;
&lt;td&gt;2 weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High-fidelity prototype, two user roles&lt;/td&gt;
&lt;td&gt;$7,000 - $12,000&lt;/td&gt;
&lt;td&gt;2-3 weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prototype + build plan&lt;/td&gt;
&lt;td&gt;$5,000 - $10,000&lt;/td&gt;
&lt;td&gt;2 weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coded prototype with real integrations&lt;/td&gt;
&lt;td&gt;$15,000 - $30,000&lt;/td&gt;
&lt;td&gt;4-8 weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These ranges assume a competent product design team working against a reasonably clear brief. Offshore rates in some markets will be lower; US-based boutique agencies will be higher.&lt;/p&gt;

&lt;h2&gt;
  
  
  A note on timeline
&lt;/h2&gt;

&lt;p&gt;Two weeks is realistic for a single-flow, high-fidelity prototype. Three weeks for two user roles. If a quote says six weeks for a prototype, ask what is filling the time. Sometimes that reflects a team structure where design and feedback cycles are stretched across calendar time rather than compressed. Sometimes it is just padding.&lt;/p&gt;

&lt;p&gt;Compressing a prototype to 14 days forces scope decisions early. That is uncomfortable but useful — it surfaces the question of what is actually in v1 before anyone starts building.&lt;/p&gt;

&lt;h2&gt;
  
  
  The practical takeaway for developers advising founders
&lt;/h2&gt;

&lt;p&gt;When a founder you know says they received an $80,000 quote for their app idea, ask whether anyone scoped it as a prototype first. The answer is usually no. The agency answered the question they were given.&lt;/p&gt;

&lt;p&gt;A prototype engagement that produces a high-fidelity interactive demo and a build plan costs a fraction of a full build and gives both the founder and the future engineering team what they actually need to make a good decision about what to build next.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at decipheringlogic.com&lt;/em&gt;&lt;/p&gt;

</description>
      <category>startup</category>
      <category>productdevelopment</category>
      <category>mvp</category>
    </item>
    <item>
      <title>Building a candidate Readiness Score for a healthcare staffing marketplace</title>
      <dc:creator>Devesh Pareek</dc:creator>
      <pubDate>Wed, 16 Sep 2026 11:42:07 +0000</pubDate>
      <link>https://dev.to/decipheringlogic/building-a-candidate-readiness-score-for-a-healthcare-staffing-marketplace-5ac2</link>
      <guid>https://dev.to/decipheringlogic/building-a-candidate-readiness-score-for-a-healthcare-staffing-marketplace-5ac2</guid>
      <description>&lt;p&gt;Wanderly is a travel healthcare staffing marketplace: 663,000+ registered candidates, 500+ agencies. Recruiters there had one recurring question: of the thousands of candidates in my list, who do I call first?&lt;/p&gt;

&lt;p&gt;We built a Readiness Score to answer it. This is the version-one model, the reasoning behind its shape, and what we deliberately left out.&lt;/p&gt;

&lt;p&gt;## Three signals, not eight&lt;/p&gt;

&lt;p&gt;The full design had eight signals: recency, job views, clicks, applications, email and SMS engagement, an opt-out penalty, campaign participation, profile completeness. It was a good model. We shipped three:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Campaign engagement, 50%&lt;/li&gt;
&lt;li&gt;Application activity, 30%&lt;/li&gt;
&lt;li&gt;Profile completeness, 20%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fewer signals meant the score was explainable to a recruiter in one sentence, and it meant we could validate the model against sixty days of real pilot data before adding anything.&lt;/p&gt;

&lt;p&gt;## Recency decay&lt;/p&gt;

&lt;p&gt;Campaign engagement is decayed by recency: activity in the last 30 days counts at 1.0x, 31 to 90 days at 0.7x, 91 to 180 days at 0.4x, and nothing beyond the configured window. A reply from last week and a reply from five months ago are not the same signal.&lt;/p&gt;

&lt;p&gt;## Hard overrides&lt;/p&gt;

&lt;p&gt;Some things are switches, not inputs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Opt-out (a STOP reply): score forced to 0 and the candidate is removed from every campaign audience, regardless of any other signal.&lt;/li&gt;
&lt;li&gt;Twelve months of total inactivity: score capped at 25.&lt;/li&gt;
&lt;li&gt;New candidate with no history: scored on profile completeness only, shown with a New badge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compliance sits outside the model. A weighted penalty can be outvoted by other signals; a hard override cannot.&lt;/p&gt;

&lt;p&gt;## Tiers&lt;/p&gt;

&lt;p&gt;Hot 70 to 100. Warm 40 to 69. Cold 20 to 39. Inactive 0 to 19. Minimum campaign-eligible score: 20. Weights are locked for v1; admins configure the time windows and the tier thresholds.&lt;/p&gt;

&lt;p&gt;## What the recruiter sees&lt;/p&gt;

&lt;p&gt;The number, a colour, and a breakdown: Campaign engagement 42/50, Application activity 24/30, Profile 18/20, based on the last 6 months. Opted-out candidates are flagged, not hidden.&lt;/p&gt;

&lt;p&gt;## What we left for v2&lt;/p&gt;

&lt;p&gt;Behavioural events (job views, time on job detail, pay comparisons, saves), agency-specific weights, and a second scoring mode for agencies that use the marketplace without the campaign product. All of it waits on real data from v1.&lt;/p&gt;

&lt;p&gt;Originally published at decipheringlogic.com&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>vectordatabase</category>
    </item>
    <item>
      <title>Wanderly case study</title>
      <dc:creator>Devesh Pareek</dc:creator>
      <pubDate>Wed, 16 Sep 2026 10:18:02 +0000</pubDate>
      <link>https://dev.to/decipheringlogic/wanderly-case-study-3b74</link>
      <guid>https://dev.to/decipheringlogic/wanderly-case-study-3b74</guid>
      <description>&lt;h1&gt;
  
  
  Building a candidate Readiness Score for a healthcare staffing marketplace
&lt;/h1&gt;

&lt;p&gt;Wanderly is a travel healthcare staffing marketplace: 663,000+ registered candidates, 500+ agencies. Recruiters there had one recurring question: of the thousands of candidates in my list, who do I call first?&lt;/p&gt;

&lt;p&gt;We built a Readiness Score to answer it. This is the version-one model, the reasoning behind its shape, and what we deliberately left out.&lt;/p&gt;

&lt;p&gt;## Three signals, not eight&lt;/p&gt;

&lt;p&gt;The full design had eight signals: recency, job views, clicks, applications, email and SMS engagement, an opt-out penalty, campaign participation, profile completeness. It was a good model. We shipped three:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Campaign engagement, 50%&lt;/li&gt;
&lt;li&gt;Application activity, 30%&lt;/li&gt;
&lt;li&gt;Profile completeness, 20%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fewer signals meant the score was explainable to a recruiter in one sentence, and it meant we could validate the model against sixty days of real pilot data before adding anything.&lt;/p&gt;

&lt;p&gt;## Recency decay&lt;/p&gt;

&lt;p&gt;Campaign engagement is decayed by recency: activity in the last 30 days counts at 1.0x, 31 to 90 days at 0.7x, 91 to 180 days at 0.4x, and nothing beyond the configured window. A reply from last week and a reply from five months ago are not the same signal.&lt;/p&gt;

&lt;p&gt;## Hard overrides&lt;/p&gt;

&lt;p&gt;Some things are switches, not inputs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Opt-out (a STOP reply): score forced to 0 and the candidate is removed from every campaign audience, regardless of any other signal.&lt;/li&gt;
&lt;li&gt;Twelve months of total inactivity: score capped at 25.&lt;/li&gt;
&lt;li&gt;New candidate with no history: scored on profile completeness only, shown with a New badge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compliance sits outside the model. A weighted penalty can be outvoted by other signals; a hard override cannot.&lt;/p&gt;

&lt;p&gt;## Tiers&lt;/p&gt;

&lt;p&gt;Hot 70 to 100. Warm 40 to 69. Cold 20 to 39. Inactive 0 to 19. Minimum campaign-eligible score: 20. Weights are locked for v1; admins configure the time windows and the tier thresholds.&lt;/p&gt;

&lt;p&gt;## What the recruiter sees&lt;/p&gt;

&lt;p&gt;The number, a colour, and a breakdown: Campaign engagement 42/50, Application activity 24/30, Profile 18/20, based on the last 6 months. Opted-out candidates are flagged, not hidden.&lt;/p&gt;

&lt;p&gt;## What we left for v2&lt;/p&gt;

&lt;p&gt;Behavioural events (job views, time on job detail, pay comparisons, saves), agency-specific weights, and a second scoring mode for agencies that use the marketplace without the campaign product. All of it waits on real data from v1.&lt;/p&gt;

&lt;p&gt;Originally published at decipheringlogic.com&lt;/p&gt;

</description>
      <category>startup</category>
      <category>productdevelopment</category>
      <category>mvp</category>
    </item>
  </channel>
</rss>
