<?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: Scott Shoemaker</title>
    <description>The latest articles on DEV Community by Scott Shoemaker (@scott_shoemaker_8d10ccbd2).</description>
    <link>https://dev.to/scott_shoemaker_8d10ccbd2</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%2F4013252%2Fad8d22f5-32d4-4a9e-9133-05c112ec6bee.png</url>
      <title>DEV Community: Scott Shoemaker</title>
      <link>https://dev.to/scott_shoemaker_8d10ccbd2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/scott_shoemaker_8d10ccbd2"/>
    <language>en</language>
    <item>
      <title>MedReach-AI: Kicking Off Sprint 3 and the "Brain" of Phase B</title>
      <dc:creator>Scott Shoemaker</dc:creator>
      <pubDate>Tue, 18 Aug 2026 11:01:22 +0000</pubDate>
      <link>https://dev.to/scott_shoemaker_8d10ccbd2/medreach-ai-kicking-off-sprint-3-and-the-brain-of-phase-b-23c5</link>
      <guid>https://dev.to/scott_shoemaker_8d10ccbd2/medreach-ai-kicking-off-sprint-3-and-the-brain-of-phase-b-23c5</guid>
      <description>&lt;p&gt;Hey everyone, Scott here. Collin and I are back with the latest engineering update for MedReach-AI.&lt;/p&gt;

&lt;p&gt;We just officially closed out Phase A of development. Over the last two weeks, we built a rock-solid foundation for our file ingestion pipelines, set up a heuristic engine that automatically maps healthcare columns, and locked down our export endpoints with strict HIPAA-compliant filters.&lt;/p&gt;

&lt;p&gt;With the plumbing working flawlessly, we are now shifting into Phase B: Data Intelligence. This is a massive two-week sprint where the workload essentially doubles, and we transition from simply moving data around to actively analyzing and sanitizing it.&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%2Fje4hebdyne2bker39fon.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%2Fje4hebdyne2bker39fon.png" alt=" " width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Sprint 3 Goal&lt;/strong&gt;&lt;br&gt;
To put it simply: we are building the brain. Our goal for Sprint 3 is to take raw, uploaded healthcare datasets and run them through automated PII/PHI scrubbing, real-time government registry validations, and machine learning anomaly detection before the user ever sees the final dashboard.&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%2Fseodc9u38jh6pyyf8oih.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%2Fseodc9u38jh6pyyf8oih.png" alt=" " width="799" height="329"&gt;&lt;/a&gt;&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%2Fez556tgrvvqvbrtv9n29.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%2Fez556tgrvvqvbrtv9n29.png" alt=" " width="799" height="139"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How We Are Tackling Phase B&lt;/strong&gt;&lt;br&gt;
Looking at our Jira board, we have broken this phase down into a few core pillars:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Machine Learning (The AI in MedReach-AI)&lt;/strong&gt;: This is the part I am most excited to dive into. We don't have months to train a massive neural network, so we are utilizing unsupervised machine learning via Scikit-Learn. By deploying IsolationForest and DBSCAN clustering algorithms, our backend will be able to mathematically evaluate a dataset on the fly and flag statistical outliers or corrupted records without relying on rigid, hard-coded rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security &amp;amp; Compliance&lt;/strong&gt;: We are integrating the Microsoft Presidio engine to actively detect and anonymize protected health information (PHI). We are also building ingestion engines for CMS Open Payments data to flag financial conflicts of interest (Sunshine Act compliance).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;External Validation&lt;/strong&gt;: We are building an asynchronous client to query the official CMS NPI Registry. This will validate provider credentials in real-time and enrich our database with verified classification statuses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dashboards &amp;amp; Deduplication&lt;/strong&gt;: While I handle the machine learning and deduplication algorithms on the backend, Collin is building out the interactive React tabs. These interfaces will allow compliance officers to visually review our AI’s flags, merge duplicate records, and download legally sound PDF audit trails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
It is a heavy workload, but our Phase A architecture is clean, and we are ready to execute. For the first week of this sprint, I am focusing entirely on getting that Scikit-Learn Isolation Forest up and running to start flagging our test data.&lt;/p&gt;

&lt;p&gt;We will be back next week with a mid-sprint update to share how the anomaly models are performing!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MedReach-AI: Sprint 2 Progress &amp; Milestone 2.1 Update</title>
      <dc:creator>Scott Shoemaker</dc:creator>
      <pubDate>Fri, 14 Aug 2026 23:04:45 +0000</pubDate>
      <link>https://dev.to/scott_shoemaker_8d10ccbd2/medreach-ai-sprint-2-progress-milestone-21-update-621</link>
      <guid>https://dev.to/scott_shoemaker_8d10ccbd2/medreach-ai-sprint-2-progress-milestone-21-update-621</guid>
      <description>&lt;p&gt;That makes perfect sense. Since Phase A is a full two-week sprint (August 10th to August 24th), today (August 14th) marks the exact midpoint.&lt;/p&gt;

&lt;p&gt;Framing this as a midway check-in adds a lot of professionalism. It shows you aren't just scrambling week-to-week, but executing a well-planned, two-week architecture. Week 1 was about safely catching the data; Week 2 is about aggressively processing it.&lt;/p&gt;

&lt;p&gt;Here is the updated blog post reflecting the two-week Phase A narrative.&lt;/p&gt;

&lt;p&gt;MedReach-AI: Phase A (Mid-Sprint) Progress &amp;amp; Milestone 2.1 Update&lt;br&gt;
Welcome back to the MedReach-AI development log. I’m Scott Shoemaker, alongside my co-developer Collin. As we push through our software engineering capstone, we are excited to share our progress for the 2.1 Project Milestone.&lt;/p&gt;

&lt;p&gt;We are currently executing Phase A: Data Management, which is scoped as a comprehensive two-week sprint running from August 10th to August 24th. Today marks the midpoint of this sprint. For Week 1, our engineering focus was establishing the core file upload architecture on both the frontend interface and the backend API.&lt;/p&gt;

&lt;p&gt;Here is a breakdown of what we accomplished in the first half of Phase A, the roadblocks we cleared, and our roadmap for Week 2.&lt;/p&gt;

&lt;p&gt;Week 1 Backend: Securing the Data Pipeline&lt;br&gt;
On the backend, my primary responsibility for this first week was ensuring our FastAPI server could safely catch and store incoming data streams before we begin processing them. I completed two major tickets:&lt;/p&gt;

&lt;p&gt;MA-17: Firebase Storage Upload Endpoint (Completed): I engineered a tenant-scoped file upload endpoint. When a file is uploaded, the API successfully routes it to our local Firebase Storage emulator. It returns a 201 Created status with a generated UUID and the definitive storage path, guaranteeing strict data isolation between clinics.&lt;/p&gt;

&lt;p&gt;MA-22: Malformed Data &amp;amp; Schema Error Wrapper (Completed): To ensure bad data doesn't crash the server during Week 2's heavy processing, I implemented a validation wrapper using Python's csv module. If a clinic uploads a corrupted file, the server intercepts the unparseable delimiters or decoding errors and returns a structured 400 Bad Request. This payload identifies the exact line number of the error, keeping the application stable.&lt;/p&gt;

&lt;p&gt;Week 1 Frontend: Building the Interface&lt;br&gt;
On the frontend, Collin spent this week translating our Phase A wireframes into functional, interactive React components:&lt;/p&gt;

&lt;p&gt;MA-16: UI Drag-and-Drop File Upload Component (Completed): Users now have a clean, intuitive dropzone to pull their CSV files into the application.&lt;/p&gt;

&lt;p&gt;MA-20: UI Column Mapping Confirmation &amp;amp; Override Table (Completed): Collin built out the data table where users can visually review their uploaded data and manually override data types before final submission. The state management is wired up locally and prepped for backend integration.&lt;/p&gt;

&lt;p&gt;MA-15: UI Export Screen &amp;amp; File Download Controls (In Progress): The core layout for the data export screen is established. Finishing the button states and download triggers will carry over into early next week.&lt;/p&gt;

&lt;p&gt;Roadblocks &amp;amp; Technical Challenges&lt;br&gt;
No sprint is without its hurdles. On the backend, setting up the storage emulator for MA-17 resulted in a massive port conflict. Localhost ports 8080 and 8000 were clashing with background processes, crashing our startup sequences. I resolved this by remapping the Firestore emulator to port 8081 and updating our configurations, successfully clearing the network blockage.&lt;/p&gt;

&lt;p&gt;On the frontend, ensuring the local React state perfectly matches the expected backend JSON payloads took some extra coordination. Because of this, MA-15 required a bit more time and will bridge the gap into Week 2 to ensure the data formatting is perfectly aligned.&lt;/p&gt;

&lt;p&gt;The Roadmap: Week 2 of Phase A&lt;br&gt;
With the file ingestion infrastructure stabilized in Week 1, the second half of this sprint is entirely dedicated to active data processing and endpoint integration.&lt;/p&gt;

&lt;p&gt;Scott's Backend Tasks (Week 2):&lt;/p&gt;

&lt;p&gt;MA-21: Pandas Chunked CSV Ingestion Engine: Standard of Completion: The engine must successfully process a 100,000-row CSV file without exceeding 512 megabytes of server RAM. I will utilize the Pandas chunksize parameter and tracemalloc to strictly monitor and prove our memory footprint.&lt;/p&gt;

&lt;p&gt;MA-19: Heuristic Column Type Detection: Standard of Completion: The backend must automatically evaluate the sample data and infer column types (like emails and phone numbers) using regex, returning a mapped schema dictionary.&lt;/p&gt;

&lt;p&gt;MA-18: Clean CRM-Compatible CSV Export Pipeline: Standard of Completion: The API successfully returns a sanitized dataset formatted for standard CRM ingestion.&lt;/p&gt;

&lt;p&gt;Collin's Frontend Tasks (Week 2):&lt;/p&gt;

&lt;p&gt;Complete MA-15: Standard of Completion: A fully functional download interface that triggers the browser's native file save dialog with the scrubbed data.&lt;/p&gt;

&lt;p&gt;Endpoint Integration: Wiring the completed Phase A frontend React components directly to the active FastAPI endpoints to establish end-to-end functionality.&lt;/p&gt;

&lt;p&gt;We are in a great position at the midway point of Phase A. Our repositories are stable, our data validation is bulletproof, and our interface is coming to life. Check back at the end of the sprint as we fire up the data-scrubbing engine!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sprint 1: Standing Up the MedReach-AI Backend (and Taming Emulators)</title>
      <dc:creator>Scott Shoemaker</dc:creator>
      <pubDate>Fri, 07 Aug 2026 01:27:21 +0000</pubDate>
      <link>https://dev.to/scott_shoemaker_8d10ccbd2/sprint-1-standing-up-the-medreach-ai-backend-and-taming-emulators-589c</link>
      <guid>https://dev.to/scott_shoemaker_8d10ccbd2/sprint-1-standing-up-the-medreach-ai-backend-and-taming-emulators-589c</guid>
      <description>&lt;p&gt;Kicking off a brand-new project is always a fun mix of grand architecture planning and immediately running into weird setup bugs. This week, we officially started the MedReach-AI capstone project, and my main focus was getting our Python and FastAPI backend repository scaffolded and ready to go.&lt;/p&gt;

&lt;p&gt;Overall, the basic server setup was a breeze, but hooking up our local dev tools and establishing the Git workflow threw a couple of curveballs my way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem: Firebase Emulators vs. Strict Security&lt;/strong&gt;&lt;br&gt;
I set up the Firebase Emulator Suite for our Firestore database so we can develop locally without worrying about cloud costs. Usually, when you connect the Firebase Admin SDK to a local emulator, you just pass a dummy credential dictionary with a fake private key (like "private_key": "mock-key"). But when I spun up the Uvicorn server to test it out, the app immediately crashed.&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%2Fhp7elddq4gf5qixgxv4c.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%2Fhp7elddq4gf5qixgxv4c.png" alt=" " width="800" height="66"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It turns out the underlying Python cryptography package recently got a security upgrade. It now strictly validates the math behind RSA keys before the app is even allowed to start. Since my "mock-key" obviously wasn't a valid RSA structure, it threw a ValueError: Unable to load PEM file and stopped the server dead in its tracks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Fix: Demo Projects to the Rescue&lt;/strong&gt;&lt;br&gt;
Instead of wasting time trying to generate a mathematically valid fake RSA key—which kind of defeats the purpose of a quick local setup—I realized I could bypass the certificate requirement entirely.&lt;/p&gt;

&lt;p&gt;Firebase actually has a built-in way to handle this. By stripping out the dummy credential and initializing the app with a "demo" project ID, the SDK knows it's strictly in an offline testing environment.&lt;/p&gt;

&lt;p&gt;Python&lt;br&gt;
Tell the SDK to connect to the local emulator&lt;br&gt;
os.environ["FIRESTORE_EMULATOR_HOST"] = "127.0.0.1:8080"&lt;br&gt;
Initialize using a demo project ID instead of a certificate&lt;br&gt;
if not firebase_admin._apps:&lt;br&gt;
    firebase_admin.initialize_app(options={&lt;br&gt;
        'projectId': 'demo-medreachai'&lt;br&gt;
    })&lt;/p&gt;

&lt;p&gt;That completely fixed the crash. My /api/health endpoint was instantly able to query the local Firestore database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem: Git Remote Collisions&lt;/strong&gt;&lt;br&gt;
Next up, I needed to push this clean, working baseline (complete with Black and Flake8 formatting) up to our backend-dev branch on GitHub. Simple enough, right? Nope. Git immediately rejected the push.&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%2F7jn4zs1zt6sio5gdr4eu.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%2F7jn4zs1zt6sio5gdr4eu.png" alt=" " width="798" height="57"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Because the repository was originally created on GitHub's website before I scaffolded the local files, it had an auto-generated template commit (like a default README) that my computer didn't have. Git’s safety features kicked in to stop me from accidentally wiping out that remote work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Fix: A Good Old-Fashioned Force Push&lt;/strong&gt;&lt;br&gt;
Usually, running git pull --allow-unrelated-histories is the move here to merge the two timelines. But since my local environment was specifically built to be the absolute "source of truth" for the backend, I didn't want to merge in random GitHub template files.&lt;/p&gt;

&lt;p&gt;I went with a force push to overwrite the remote branch and establish my local folder as the true baseline:&lt;/p&gt;

&lt;p&gt;git push -u origin backend-dev --force&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrapping Up Sprint 1&lt;/strong&gt;&lt;br&gt;
With Git sorted out and Firebase playing nice with the emulator, the MedReach-AI backend is officially up and running. Our Uvicorn server is live, the interactive Swagger UI is generating our docs automatically, and our linters are keeping the code clean.&lt;/p&gt;

&lt;p&gt;The foundation is set, and next week we finally get to dive into feature development!&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%2F5ygv92vellajuxp9hidi.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%2F5ygv92vellajuxp9hidi.png" alt=" " width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sprint One: Slicing the Monolith and Standing Up the Phase A Backend</title>
      <dc:creator>Scott Shoemaker</dc:creator>
      <pubDate>Sat, 25 Jul 2026 08:32:44 +0000</pubDate>
      <link>https://dev.to/scott_shoemaker_8d10ccbd2/sprint-one-slicing-the-monolith-and-standing-up-the-phase-a-backend-gcg</link>
      <guid>https://dev.to/scott_shoemaker_8d10ccbd2/sprint-one-slicing-the-monolith-and-standing-up-the-phase-a-backend-gcg</guid>
      <description>&lt;p&gt;Welcome back to the dev log. Last week, Collin and I officially pivoted MedReach AI into a "Data Intelligence First" platform, locking in our enterprise architecture and securing our multi-tenant data models. This week, the planning phase ended. Sprint 1 officially kicked off, marking our transition into active software engineering.&lt;/p&gt;

&lt;p&gt;However, as we moved to pull our Phase A (Data Management MVP) tasks from the backlog, we immediately encountered a classic software development trap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem: The "8-Point Ticket" Trap&lt;/strong&gt;&lt;br&gt;
As the Scrum Master for this project, my goal is to protect our team’s velocity and prevent burnout. While planning Sprint 1, I noticed several of our backend architectural tickets—such as integrating Microsoft Presidio for PII scrubbing and building our async CMS NPI Registry validation pipeline—were estimated at 8 Story Points.&lt;/p&gt;

&lt;p&gt;In Agile development, especially for a two-man capstone team balancing outside lives and careers, an 8-point ticket is functionally a monolith. It represents too much ambiguity. If a single ticket takes 20+ hours to complete, it risks sitting in the "In Progress" column for the entire sprint. If I hit a bug on day two, my velocity flatlines, and worse, I become a bottleneck for my frontend partner who is waiting on that API contract.&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%2Fnohlzbeh0gkyriq05rc9.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%2Fnohlzbeh0gkyriq05rc9.png" alt=" " width="800" height="560"&gt;&lt;/a&gt;&lt;em&gt;Caption: Breaking down our Phase A backlog into highly granular, sprint-ready deliverables.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Solution: The 4-Point Hard Cap&lt;/strong&gt;&lt;br&gt;
To solve this, I enforced a strict Agile capacity rule for our board: No single task can exceed 4 Story Points.&lt;/p&gt;

&lt;p&gt;We mapped our estimation scale directly to our weekly capacity, where 1 point equals roughly 4 to 5 hours of engineering work. By capping tickets at 4 points, we ensure that the absolute maximum size of any task represents one week of part-time capacity (approx. 20 hours).&lt;/p&gt;

&lt;p&gt;I spent the first part of this week slicing our backend monoliths into testable, bite-sized components. For example, instead of one massive ticket for "NPI Validation," we now have separate 2- and 3-point tickets for the base REST connection, the async batching queue, and the local caching layer. This granularity guarantees that even if we hit a roadblock, we can still merge smaller victories and keep the burndown chart moving.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execution: Architecting the Phase A Backend&lt;/strong&gt;&lt;br&gt;
With our sprint scope cleanly defined, I swapped my Scrum Master hat for my Backend Architect hat. My primary technical focus this week was our most critical MVP blocker: &lt;strong&gt;Security and Ingestion&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;JWT Middleware &amp;amp; Multi-Tenant Isolation&lt;/strong&gt;: Before parsing a single CSV, we had to ensure our data boundaries were airtight. I mapped out and configured the Firebase Authentication middleware to intercept API requests and validate custom Role-Based Access Control (RBAC) claims. This ensures that an Editor in Company A can never access, query, or mutate data belonging to Company B at the database level.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Chunked Ingestion Pipeline&lt;/strong&gt;: I also began scaffolding the pandas chunked CSV reader. Because enterprise healthcare datasets can be massive, this async ingestion engine is designed to parse large files without maxing out our server's memory, passing the data smoothly to our heuristic column detection logic.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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%2Fr77ig6y1f5f1qe0blerw.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%2Fr77ig6y1f5f1qe0blerw.png" alt=" " width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Caption: The MedReach AI Multi-Tenant Isolation &amp;amp; Role-Based Access Control architecture, defining strict database-level boundaries and the permission matrix for our Phase A MVP.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
By slicing our tasks down and securing the gateway, we have created a safe, isolated sandbox to begin heavy data manipulation. Next week, I will be deep-diving into the Microsoft Presidio integration to automate our PII/PHI redaction engine.&lt;/p&gt;

&lt;p&gt;Until next time, keep your sprints short and your endpoints secure!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>agile</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Sprint One: Why We Pivoted MedReach AI to "Data Intelligence First" and Killed the Paid API</title>
      <dc:creator>Scott Shoemaker</dc:creator>
      <pubDate>Sun, 19 Jul 2026 15:19:19 +0000</pubDate>
      <link>https://dev.to/scott_shoemaker_8d10ccbd2/sprint-one-why-we-pivoted-medreach-ai-to-data-intelligence-first-and-killed-the-paid-api-44b0</link>
      <guid>https://dev.to/scott_shoemaker_8d10ccbd2/sprint-one-why-we-pivoted-medreach-ai-to-data-intelligence-first-and-killed-the-paid-api-44b0</guid>
      <description>&lt;p&gt;Welcome back to the dev log! If you read my Sprint Zero post, you know my capstone partner, Collin, and I set out to build a full-stack AI platform using an asynchronous, horizontally split workflow. As we transitioned from initial scoping into Month 2 of our build, our concept matured into MedReach AI—a specialized B2B healthcare SaaS platform designed for mid-size pharmaceutical and medical device companies.&lt;/p&gt;

&lt;p&gt;However, as we dove into our software architecture review this week, we hit a massive strategic crossroads that forced us to completely refactor our engineering roadmap and Jira backlog.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem: The Insecure "Marketing Automation" Trap&lt;/strong&gt;&lt;br&gt;
Originally, we visualized MedReach AI as an AI-driven marketing campaign generator that happened to clean Healthcare Professional (HCP) databases. But after evaluating industry pain points, we realized we were solving the wrong problem first.&lt;br&gt;&lt;br&gt;
In the pharmaceutical and medical device sectors, marketing teams don't struggle to generate email copy; they struggle with dirty, unvalidated, and legally hazardous data. Up to 30% of standard HCP databases are riddled with outdated contacts, retired physicians, and unvalidated National Provider Identifier (NPI) numbers. Running automated campaigns on bad data doesn't just waste budget—it creates massive legal exposure under federal regulations like the Physician Payments Sunshine Act and FDA off-label promotion guidelines.&lt;br&gt;&lt;br&gt;
Furthermore, enterprise platforms that actually solve this (like Veeva or IQVIA) cost upwards of $500,000 annually, pricing out two- to three-person marketing teams.  From an engineering perspective, treating data cleaning as a simple preprocessing step for a marketing tool was a recipe for disaster. It meant we were treating security, multi-tenant data isolation, and role-based access control (RBAC) as secondary features. In healthcare SaaS, if you bolt on security at the end, your platform is inherently broken.  &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%2Fztj3st1ei5eijjy6u8xd.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%2Fztj3st1ei5eijjy6u8xd.png" alt=" " width="799" height="538"&gt;&lt;/a&gt;&lt;em&gt;Caption: Restructuring our Jira backlog into three distinct functional milestones: Data Management, Data Intelligence, and Visualization &amp;amp; Export.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Solution: A "Data Intelligence First" Architecture&lt;/strong&gt;&lt;br&gt;
To fix this, Collin and I leaned heavily into our Agile framework and initiated a comprehensive architecture pivot. We repositioned MedReach AI entirely around Data Intelligence, treating campaign generation simply as one of several downstream outputs of a clean, standardized dataset.&lt;br&gt;&lt;br&gt;
To execute this without losing sprint velocity, we made three critical architectural decisions this week:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Shifting RBAC and Security to the MVP Blocker&lt;/strong&gt;&lt;br&gt;
We completely reorganized our 54-task Jira backlog into three new phased milestones: &lt;strong&gt;Phase A (Data Management MVP), Phase B (Data Intelligence Alpha), and Phase C (Visualization &amp;amp; Export Beta)&lt;/strong&gt;.&lt;br&gt;
Crucially, we pulled our Firebase Authentication JWT middleware, Firestore database-level multi-tenant security rules, and full-stack RBAC (Admin, Editor, Viewer roles) out of future sprints and pushed them directly into Phase A. Why? Because no file upload or cleaning pipeline should ever be tested without strict tenant isolation already enforcing database boundaries. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Killing the Paid API (Why Local Open-Source Wins)&lt;/strong&gt;&lt;br&gt;
In an era where every startup simply wraps the OpenAI or Anthropic API, we made a deliberate engineering choice: &lt;strong&gt;we are using zero paid external LLM APIs.&lt;/strong&gt;&lt;br&gt;
Instead, our FastAPI backend orchestrates self-hosted &lt;strong&gt;Meta Llama 3 8B&lt;/strong&gt; and &lt;strong&gt;Mistral 7B&lt;/strong&gt; models running locally on an on-premise Ollama runtime. In healthcare, clients are legally and commercially terrified of transmitting Protected Health Information (PHI) or proprietary HCP lists to third-party AI vendors. By keeping 100% of our AI inference inside our own platform infrastructure, we eliminate per-call API costs at scale and turn data privacy into our primary B2B selling point.  &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%2Fzwrnhx0owni2pz2t3dp7.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%2Fzwrnhx0owni2pz2t3dp7.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;em&gt;Caption: MedReach AI's system architecture, highlighting our self-hosted AI runtime and isolated Firestore multi-tenant data layer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Layering the Tech Stack for Asynchronous Speed&lt;/strong&gt;&lt;br&gt;
By stabilizing our Phase A core this week, Collin and I can safely maintain our horizontal split. While Collin builds out the React 18 / Tailwind CSS drag-and-drop upload zones and natural language query interfaces on the frontend, I am building the backend Python pipelines. I'm currently integrating Microsoft Presidio for automated PII/PHI detection, scikit-learn for Isolation Forest anomaly detection, and asynchronous HTTP clients to validate provider records against the public CMS NPI Registry in real time.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What This Means for My Journey&lt;/strong&gt;&lt;br&gt;
As someone aspiring to step into an AI Solutions Program Director or Product Manager role, this week was a masterclass in product framing and technical risk management. It reaffirmed a core lesson: good software architecture isn't just about writing clean code; it's about aligning your database schemas and sprint backlogs with the actual commercial and regulatory realities of your industry.&lt;br&gt;
With our roadmap refactored, our Jira board aligned with our design documentation, and our security gates locked in place, we are ready to build the core cleaning engine.&lt;br&gt;
Next stop: getting our pandas chunked CSV ingestion pipeline and Presidio anonymizers communicating smoothly. Stay tuned for Sprint 2!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>healthcare</category>
      <category>fastapi</category>
      <category>career</category>
    </item>
    <item>
      <title>Architecting MedReach AI: Solving Data Rot and Regulatory Bottlenecks in Pharma Marketing</title>
      <dc:creator>Scott Shoemaker</dc:creator>
      <pubDate>Sun, 12 Jul 2026 16:17:13 +0000</pubDate>
      <link>https://dev.to/scott_shoemaker_8d10ccbd2/architecting-medreach-ai-solving-data-rot-and-regulatory-bottlenecks-in-pharma-marketing-6na</link>
      <guid>https://dev.to/scott_shoemaker_8d10ccbd2/architecting-medreach-ai-solving-data-rot-and-regulatory-bottlenecks-in-pharma-marketing-6na</guid>
      <description>&lt;p&gt;As we kick off Month 1 of our AI Software Development Capstone, I am thrilled to officially introduce the project I will be co-developing over the next five months: MedReach AI.&lt;br&gt;&lt;br&gt;
In my role as the Project/Scrum Master and Backend Architect, I am pairing up with my teammate, Collin Miner, who will be spearheading the frontend UI/UX and client-side architecture. Together, we are building a multi-tenant SaaS platform designed to completely overhaul how pharmaceutical and medical device companies handle outreach, segmentation, and compliance.       But before diving into our tech stack, we have to look at why this industry is in desperate need of a modern, lightweight solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem: Data Rot and the "Two-Person Marketing Team" Dilemma&lt;/strong&gt;&lt;br&gt;
Mid-size pharmaceutical and medical device companies face a massive operational bottleneck: their marketing teams run off Healthcare Professional (HCP) databases that are constantly decaying. Industry data shows that physician contact information degrades rapidly—doctors relocate, change specialties, retire, or move across state lines where different data privacy laws apply.&lt;br&gt;&lt;br&gt;
When a two- or three-person marketing department attempts to run a campaign using unvalidated spreadsheets, three critical failures occur:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Wasted Budget &amp;amp; Poor Targeting&lt;/strong&gt;: Campaigns are sent to outdated contacts or duplicate records, sinking ROI.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulatory &amp;amp; Compliance Risks&lt;/strong&gt;: In the pharma world, sending unverified communications can lead to severe penalties under federal regulations like HIPAA, the Physician Payments Sunshine Act, and strict FDA guidelines regarding off-label promotion.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource Drain&lt;/strong&gt;: Small teams end up spending 80% of their time manually scrubbing CSVs and cross-referencing government registries instead of actually designing marketing campaigns. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;While enterprise-grade data hygiene tools exist, they cost hundreds of thousands of dollars annually and require dedicated technical implementation teams—completely pricing out mid-sized organizations.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sprint Zero: Architecting an Asynchronous Workflow for a Two-Man Dev Team</title>
      <dc:creator>Scott Shoemaker</dc:creator>
      <pubDate>Sun, 05 Jul 2026 18:55:51 +0000</pubDate>
      <link>https://dev.to/scott_shoemaker_8d10ccbd2/sprint-zero-architecting-an-asynchronous-workflow-for-a-two-man-dev-team-1oh</link>
      <guid>https://dev.to/scott_shoemaker_8d10ccbd2/sprint-zero-architecting-an-asynchronous-workflow-for-a-two-man-dev-team-1oh</guid>
      <description>&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%2Frpe9w17g1z09s0emcf5z.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%2Frpe9w17g1z09s0emcf5z.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;br&gt;
Hello World! I’m Scott M. Shoemaker, a Computer Science student with a concentration in Artificial Intelligence, based in Webster, New York. This post marks the official beginning of my Capstone project. However, before a single line of code is written, I had to tackle one of the most critical challenges of software development: project architecture and team management.&lt;br&gt;
The Problem: Scope Creep and Development Bottlenecks&lt;br&gt;
My Capstone team recently pivoted to a two-man structure. My partner, Collin, and I are tasked with building a full-stack GovTech AI application—incorporating React, Python, FastAPI, and PostgreSQL—in just five months. The primary problem we faced this week was logistical: how do two developers, who are also balancing outside careers and lives, build a complex application without constantly blocking each other's progress or causing massive code-merge conflicts?&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%2Fq20cvmy1yrbbue777qsb.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%2Fq20cvmy1yrbbue777qsb.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;br&gt;
The Solution: Asynchronous Sprints and API Contracts&lt;br&gt;
To solve this, I leaned on my Agile Project Management and Scrum Master certifications to design a workflow that protects our velocity. Instead of a traditional, intertwined development cycle, I structured our execution plan around a strict asynchronous workflow managed via 2-week sprints.&lt;/p&gt;

&lt;p&gt;Our solution utilizes a "horizontal split." I am acting as the Backend Architect and Scrum Master, while Collin owns the Frontend UI/UX. To prevent bottlenecks, the strategy we implemented this week was to define strict API Data Contracts early. By agreeing on the exact JSON format my backend will eventually send, the frontend can be built out using dummy data next month. Meanwhile, I can construct the database and tune the Gemini API in complete isolation. We will not integrate the two halves until Month 3. This isolated sprint strategy mitigates our highest risk and removes development friction.&lt;/p&gt;

&lt;p&gt;My Journey and Goals&lt;br&gt;
My journey into computer science has always been driven by a desire to turn chaotic, complex systems into structured, working logic. Beyond this Capstone, my ultimate goal is to step into a role as an AI Solutions Program Director or Product Manager, ideally within the GovTech or AgTech sectors. I want to build practical software that bridges the gap between high-level AI capabilities and real-world utility, translating dense, bureaucratic systems into highly accessible tools.&lt;/p&gt;

&lt;p&gt;I’ll be documenting the technical hurdles, AI prompt tuning, and backend breakthroughs of this 5-month journey right here. Stay tuned for Sprint 1!&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
      <category>ai</category>
      <category>agile</category>
    </item>
  </channel>
</rss>
