<?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: Mike Guskov</title>
    <description>The latest articles on DEV Community by Mike Guskov (@yellow_wow).</description>
    <link>https://dev.to/yellow_wow</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%2F4227088%2F394b3c1b-1c21-468c-9dc0-937cd60d24ac.png</url>
      <title>DEV Community: Mike Guskov</title>
      <link>https://dev.to/yellow_wow</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yellow_wow"/>
    <language>en</language>
    <item>
      <title>Trying to break into the clinical trials space</title>
      <dc:creator>Mike Guskov</dc:creator>
      <pubDate>Thu, 05 Nov 2026 07:21:51 +0000</pubDate>
      <link>https://dev.to/yellow_wow/trying-to-break-into-the-clinical-trials-space-1jm1</link>
      <guid>https://dev.to/yellow_wow/trying-to-break-into-the-clinical-trials-space-1jm1</guid>
      <description>&lt;p&gt;Imagine someone has just been given a serious diagnosis. One of their options might be a clinical trial: a new drug or treatment regimen that isn't yet available in routine care. There's no shortage of places to look. The largest open registry, ClinicalTrials.gov, is free and lists more than 600,000 studies from all over the world.&lt;/p&gt;

&lt;p&gt;So what's the problem? It's not that there's too little data. Quite the opposite: there's too much of it, and it's written for specialists. To figure out whether a trial is right for you, you have to read the inclusion and exclusion criteria and match them against your diagnosis, stage, previous treatment and a dozen other things. For someone without medical training, that means hours of comparing walls of text, and still a real chance of getting it wrong.&lt;/p&gt;

&lt;p&gt;We decided to make exactly this part easier, and that's how Cintarra was born. This article covers how we got here, what we found on the market, how we built the product, what it cost, and whether it was worth the effort at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where the project came from
&lt;/h3&gt;

&lt;p&gt;A confession to start with: the idea isn't ours. More precisely, the niche was suggested to us by a doctor who works in clinical research.&lt;/p&gt;

&lt;p&gt;We started with no budget and no experience in medical products. What we had was an idea, the drive to see it through, and free evenings and weekends. Oh, and ten years of designing interfaces of every level of complexity for every kind of audience.&lt;/p&gt;




&lt;h2&gt;
  
  
  Discovery
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Target audiences and what they need
&lt;/h3&gt;

&lt;p&gt;I can't say exactly when our first brainstorming call took place, and it doesn't really matter. What matters is that on that call we settled on the audiences to focus on, and agreed we needed to study them more closely to understand what to offer.&lt;/p&gt;

&lt;p&gt;We ended up with four groups: patients (the main one), healthy volunteers, physician-investigators and sponsors. For each, we built a persona and a customer journey map (CJM). Then we walked each persona through four stages, from diagnosis to taking part in a trial, and mapped out actions, goals, emotions, pain points and touchpoints at every stage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fau3ss4g84b0jlinr0mgz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fau3ss4g84b0jlinr0mgz.png" alt="Persona and СJM" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The most useful takeaway from the CJM: the emotional curve hits its lowest point in the first two stages (diagnosis and finding a trial), exactly where a person is left alone with the registry. Later, trial coordinators and site doctors get involved, and things get easier. So help is needed right at the start: finding trials and understanding whether you qualify before you ever call a trial site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Competitors
&lt;/h3&gt;

&lt;p&gt;When we started our competitor analysis (late 2025), the list looked like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;ClinicalTrials.gov.&lt;/strong&gt;
The primary source and, essentially, our main competitor. Free, the most complete, updated daily. But it's a registry, not an assistant: there are filters, but the inclusion and exclusion criteria are a solid block of text for specialists, and matching them to your own situation is entirely on you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ancora.ai.&lt;/strong&gt;
Trial matching for cancer patients: you answer questions about your diagnosis and treatment and get a list of suitable trials. Free for patients, but focused primarily on oncology.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trialing.org.&lt;/strong&gt;
Built for doctors, not patients: search by condition, biomarkers and trial ID, plus patient referrals to partner hospitals. Free for doctors; pharma companies and CROs pay. According to its website, it covers about 4,000 trials in 26 countries.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The bottom line: you get either a complete but raw registry, or convenient tools that are limited to one therapeutic area or built for doctors. Among the services we looked at, none helped a patient with any diagnosis check themselves against the criteria and understand the result. That's the gap we decided to aim for.&lt;/p&gt;

&lt;h3&gt;
  
  
  What we decided to build
&lt;/h3&gt;

&lt;p&gt;Based on all of the above, we put together a core feature set. Although, to be honest, "hypotheses" is a better word for them:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Search by condition and location.&lt;/strong&gt;
Type your condition in plain language rather than an exact medical term, and immediately see the distance to the trial site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Medical card.&lt;/strong&gt;
Describe your diagnosis, stage, previous treatment and biomarkers once and reuse it for every trial, instead of filling in the same thing on every questionnaire.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Match percentage.&lt;/strong&gt;
Show how well a trial fits, and keep two different situations apart: an explicit conflict with the criteria versus simply missing information about the patient. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy application.&lt;/strong&gt;
Help pick a suitable location and contact, and generate a message template.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New trial alerts.&lt;/strong&gt;
If nothing fits right now, people shouldn't have to check the registry every day themselves.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We couldn't validate these hypotheses before launch: paying $15 per interview sounds lovely, just not on our shoestring budget. So we went the other way around: launch an MVP first and test it on real users.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;The stack: React, TypeScript and Vite on the front end, Node.js with Express on the back end, MongoDB, hosted on Google Cloud Run. The stack itself is less interesting than how the product's design changed every time we hit a wall on speed or cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  Our own copy of the registry
&lt;/h3&gt;

&lt;p&gt;The first thing we did was stop hitting ClinicalTrials.gov on every search. We now keep our own copy of the registry in MongoDB, but not all of it: only trials that are recruiting now or will start soon.&lt;/p&gt;

&lt;p&gt;We don't store everything, only what search and Match need: conditions, keywords, MeSH terms, eligibility criteria and trial locations. The full trial record is fetched from the registry only when someone opens it, and cached for a few hours. That keeps the database lean, and search runs on our own data without depending on an external API.&lt;/p&gt;

&lt;p&gt;As a bonus, syncing taught us to spot changes: a trial has reopened recruitment, or a new site has been added. That came in handy later for alerts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Match without a neural network
&lt;/h3&gt;

&lt;p&gt;Our most important decision: the match percentage is calculated by deterministic rules, not by a model. The same data always produces the same result, and that result can be explained.&lt;br&gt;
The medical card is compared with a trial across nine categories: diagnosis, age, sex, stage, location, current treatment, contraindications, biomarkers and exclusion criteria. A few principles we consider key:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An explicit conflict and missing data are different things.&lt;/strong&gt; If age or sex clearly doesn't fit, or an exclusion criterion is triggered, Match is zero. But if the card simply lacks the information, the category stays "not verified": it earns no points, but it doesn't count as a match either.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No high score without a confirmed diagnosis.&lt;/strong&gt; If the diagnosis isn't confirmed, Match is capped at 49%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The percentage is not the probability of getting into the trial.&lt;/strong&gt; It's a weighted estimate of how many criteria we were able to confirm. The final decision always rests with the trial site, and we say so explicitly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Match is calculated for the top 100 candidates in the results, which are then re-sorted by it. Everything below stays in the default order. It's a trade-off between accuracy and database load.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where we did need AI
&lt;/h3&gt;

&lt;p&gt;We didn't get by entirely without a neural network; we just gave it the job it does better than rules: understanding people. In every case it's an inexpensive OpenAI model, called only where it's needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Search plan.&lt;/strong&gt; A plain-language query ("KRAS-mutant lung cancer, Spain") is turned into a structured plan: the condition in English, a MeSH term, filters. One call per search, and the result is cached.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filling in the card.&lt;/strong&gt; You can describe your situation in text or upload a PDF of your medical records, and the model sorts it into the card's fields. Before processing, we ask for consent and strip direct identifiers from the PDF.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diagnosis translation.&lt;/strong&gt; If a diagnosis isn't written in English and isn't in our verified dictionary, the model translates it once, when the card is saved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That said, a model's translation only helps find trials; it never confirms a diagnosis match. Only the verified dictionary can do that. For now it covers a handful of conditions, such as non-small cell lung cancer, triple-negative breast cancer and asthma, and it will keep growing.&lt;/p&gt;

&lt;p&gt;The weekly trial digest skips AI altogether: the search plan is built locally from the card, and only trials with a Match of 50% or higher make the cut.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reference data and APIs: where we saved money
&lt;/h3&gt;

&lt;p&gt;Autocomplete was a story of its own. We didn't want to pay for every letter someone types into the "condition" field, so we went looking for free sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;NLM Clinical Tables:&lt;/strong&gt; a free API from the US National Library of Medicine. We use it for condition and gene suggestions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Photon&lt;/strong&gt;, built on OpenStreetMap data: city and country suggestions, also free.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Maps:&lt;/strong&gt; we kept it only for geocoding and the map of trial sites on the trial page. We originally wanted to pull in clinic reviews and ratings too, but dropped the idea because of the price.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Design and front end
&lt;/h2&gt;

&lt;p&gt;A quick reminder: I'm a designer, not a developer. So design and front end are the parts I handle with the most love and care. I'll also admit up front that I wanted to push the pixels myself, but naturally, Claude took over part of the work to speed things up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nothing groundbreaking, but still
&lt;/h3&gt;

&lt;p&gt;In Figma, everything is built on variables: colors, typography, radii and spacing. On top of them sits a component library with variants: buttons, inputs, chips, badges and so on. In total, that's more than 30 components and around 530 variants.&lt;/p&gt;

&lt;p&gt;There are mockups for every flow: home, search results, trial page, account and medical cards, settings, sign-in, favorites, info pages, 404/503 errors and emails. Each flow comes in three breakpoints (1440 px and up, 1024–1439 px and 320–1023 px), with every edge case we could think of.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3rjdnrguhuvjyn13ikz4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3rjdnrguhuvjyn13ikz4.png" alt="Adding a medical card" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The front end follows the same system: tokens were carried over to code one-to-one, and all components live in Storybook. Almost all of the project's code, both front end and back end, was written by Claude and GPT. To keep that from turning into chaos, the repository has rules for AI agents: how the project is structured, what to check, and what not to touch. Every change goes through the linter, server tests and browser scenarios on synthetic data. Anything involving medical data, Match rules or authentication is treated as a high-risk area and checked separately.&lt;/p&gt;




&lt;h2&gt;
  
  
  Costs
&lt;/h2&gt;

&lt;p&gt;If you haven't noticed yet, saving money is the thread running through this whole story. Here's everything we pay for each month, including the tools we use to build the product.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;What for&lt;/th&gt;
&lt;th&gt;Now&amp;nbsp;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Google Cloud Run and Cloud Scheduler&lt;/td&gt;
&lt;td&gt;server, registry sync, weekly digest&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MongoDB Atlas, Flex tier&lt;/td&gt;
&lt;td&gt;registry copy, users, medical cards&lt;/td&gt;
&lt;td&gt;$8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI, gpt-4o-mini&lt;/td&gt;
&lt;td&gt;search plan, filling in cards, diagnosis translation&lt;/td&gt;
&lt;td&gt;$1–5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Maps&lt;/td&gt;
&lt;td&gt;geocoding and the trial site map&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prelude&lt;/td&gt;
&lt;td&gt;phone number verification&lt;/td&gt;
&lt;td&gt;$1–3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare Workers Paid&lt;/td&gt;
&lt;td&gt;sending emails&lt;/td&gt;
&lt;td&gt;$5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain&lt;/td&gt;
&lt;td&gt;you get the idea&lt;/td&gt;
&lt;td&gt;$2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PostHog&lt;/td&gt;
&lt;td&gt;product analytics&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ClinicalTrials.gov API, NLM Clinical Tables, Photon&lt;/td&gt;
&lt;td&gt;data and autocomplete&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude, 2 subscriptions&lt;/td&gt;
&lt;td&gt;development&lt;/td&gt;
&lt;td&gt;$40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Figma, 1 seat&lt;/td&gt;
&lt;td&gt;design&lt;/td&gt;
&lt;td&gt;$16&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Total:&lt;/strong&gt; about $80 a month right now. At 1,000 users, about $120–145.&lt;/p&gt;

&lt;p&gt;Unsurprisingly, tools are currently our biggest expense. But here's the funny part: at 1,000 users, the biggest line item isn't tools, servers or even the model. It's phone verification.&lt;/p&gt;




&lt;h2&gt;
  
  
  MVP, testing and plans
&lt;/h2&gt;

&lt;p&gt;The MVP is live and fully working. It already has the entire core feature set we planned for launch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmic1l4cxtsr956bxwopq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmic1l4cxtsr956bxwopq.png" alt="Cintarra in production" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  First tests
&lt;/h3&gt;

&lt;p&gt;We've launched unmoderated usability testing. It's still running, but the first insights are already in.&lt;/p&gt;

&lt;p&gt;One example: the handy features need to be front and center from the very first screen. Medical cards, Match and easy applications are all there, but someone who came "just to browse" can miss them and leave thinking it's just another catalog. Onboarding was already on our roadmap, and now real users have confirmed we need it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Plans
&lt;/h3&gt;

&lt;p&gt;Our plans follow the same personas from discovery, just one at a time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Onboarding.&lt;/strong&gt; Show right away how we differ from a regular registry search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volunteer dashboard.&lt;/strong&gt; Healthy volunteers are a separate audience with their own needs, and they deserve their own flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The business side, plus dashboards for pharma and doctors.&lt;/strong&gt; It only makes sense to approach them once we have a user base: without patients, we have nothing to offer researchers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Takeaways?
&lt;/h3&gt;

&lt;p&gt;Honestly, all I really wanted in this article was to plug our service. Fine, I'll share a couple of thoughts after all this work. I'll keep it short.&lt;/p&gt;

&lt;p&gt;In my humble opinion, we've built a really solid product that tackles our main audience's pain points. It's stable, it looks good, and there's a roadmap. What more could you want? Monetization! But that's a whole other story, maybe for a future article.&lt;/p&gt;

&lt;p&gt;And most importantly, cheesy as it may sound: if this makes it even a little faster for people in need to find a trial that suits them better, that's mission accomplished.&lt;/p&gt;

&lt;p&gt;You can judge whether we pulled it off here: &lt;a href="//cintarra.com"&gt;cintarra.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>startup</category>
      <category>ai</category>
      <category>healthcare</category>
    </item>
  </channel>
</rss>
