<?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>Forem: Sophia Devy</title>
    <description>The latest articles on Forem by Sophia Devy (@sophia_devy).</description>
    <link>https://forem.com/sophia_devy</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3701000%2Fb23ba256-8a62-40ad-bea3-fa1721717f93.jpg</url>
      <title>Forem: Sophia Devy</title>
      <link>https://forem.com/sophia_devy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sophia_devy"/>
    <language>en</language>
    <item>
      <title>Spam, Breaches, Verification: Why Your Real Number Shouldn’t Be Public</title>
      <dc:creator>Sophia Devy</dc:creator>
      <pubDate>Wed, 11 Mar 2026 15:41:36 +0000</pubDate>
      <link>https://forem.com/sophia_devy/spam-breaches-verification-why-your-real-number-shouldnt-be-public-k13</link>
      <guid>https://forem.com/sophia_devy/spam-breaches-verification-why-your-real-number-shouldnt-be-public-k13</guid>
      <description>&lt;h2&gt;
  
  
  Why your personal number shouldn’t be your default online ID and what to look for instead.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Modern digital life requires sharing your number everywhere&lt;/strong&gt;&lt;br&gt;
Modern digital life asks for your phone number everywhere apps, marketplaces, social media, business websites, and verification systems. For freelancers and entrepreneurs, one personal number becomes your client line, support line, and login key. The more places it’s stored, the harder it is to protect personal phone number online and keep control of your online privacy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The risks of using your personal phone number online&lt;/strong&gt;&lt;br&gt;
Using one personal number everywhere creates a single point of exposure. Once it’s shared, it spreads.&lt;br&gt;
• Spam calls and marketing messages after “just one” signup.&lt;br&gt;
• Privacy exposure when your number is posted publicly or forwarded.&lt;br&gt;
• Data leaks that link your number to emails, profiles, and location signals.&lt;br&gt;
• Security pressure around privacy for online verification and SMS-based flows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Real-world scenarios where people struggle with phone number privacy&lt;/strong&gt;&lt;br&gt;
Common situations where people get burned:&lt;br&gt;
• Freelancers: clients call after hours because they found your personal line.&lt;br&gt;
• Online sellers: buyers message nonstop, and your number gets reused elsewhere.&lt;br&gt;
• Entrepreneurs: work and family collide on the same lock screen.&lt;br&gt;
• Remote teams: international communication needs different numbers and time zones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Why traditional phone numbers are no longer enough&lt;/strong&gt;&lt;br&gt;
Traditional numbers weren’t built for managing multiple phone numbers by purpose. You can’t easily create a separate business phone number for each project or campaign. And once your number is tied to many logins, changing it is painful so spam and exposure stick.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Virtual private numbers as a modern communication solution&lt;/strong&gt;&lt;br&gt;
Virtual phone numbers solve the flexibility problem. A virtual private number can be used for one context (clients, listings, signups) while your real number stays private. It’s a practical upgrade for digital communication privacy especially if you run multiple accounts or platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Benefits of using virtual numbers&lt;/strong&gt;&lt;br&gt;
Benefits of virtual numbers:&lt;br&gt;
• Reduce exposure by limiting where your real number is stored.&lt;br&gt;
• Keep boundaries by separating work and personal communication.&lt;br&gt;
• Manage multiple accounts and platforms without mixing identities.&lt;br&gt;
• Support international communication flexibility without extra devices.&lt;br&gt;
• Cut spam by retiring numbers that get noisy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Features to Look for in a Virtual Phone Number Solution&lt;/strong&gt;&lt;br&gt;
When comparing options, prioritize practical controls over hype:&lt;br&gt;
• Privacy protection: clear controls over retention and sharing.&lt;br&gt;
• Ease of management: add, pause, and rotate numbers quickly.&lt;br&gt;
• Multiple numbers: organize by purpose (work, listings, verification).&lt;br&gt;
• International support: regions you actually operate in.&lt;br&gt;
• Security features: account protection and verification safeguards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Discussion&lt;/strong&gt;&lt;br&gt;
How do you handle phone number privacy today? Do you use a separate business phone number, or does everything still route to one device? And if you’ve tried virtual private numbers, what worked and what didn’t?&lt;/p&gt;

</description>
      <category>security</category>
      <category>freelance</category>
      <category>privacy</category>
      <category>startup</category>
    </item>
    <item>
      <title>I Thought AI Made Me Faster. My Metrics Disagreed.</title>
      <dc:creator>Sophia Devy</dc:creator>
      <pubDate>Wed, 04 Mar 2026 17:53:32 +0000</pubDate>
      <link>https://forem.com/sophia_devy/i-thought-ai-made-me-faster-my-metrics-disagreed-3ejc</link>
      <guid>https://forem.com/sophia_devy/i-thought-ai-made-me-faster-my-metrics-disagreed-3ejc</guid>
      <description>&lt;p&gt;Friday, 4:47 PM.&lt;/p&gt;

&lt;p&gt;A PR lands in the repo with a clean summary, tidy diff, and an AI review comment that might as well read:&lt;br&gt;
“Ship it.”&lt;/p&gt;

&lt;p&gt;I skim. I nod. I merge.&lt;/p&gt;

&lt;p&gt;Monday, 10:12 AM.&lt;/p&gt;

&lt;p&gt;A teammate pings: “Why are we making three API calls per page view now?”&lt;br&gt;
It worked. Tests passed. It looked correct.&lt;br&gt;
It also quietly doubled latency and introduced a failure mode that only showed up under real traffic.&lt;/p&gt;

&lt;p&gt;That’s when I stopped asking:&lt;br&gt;
&lt;strong&gt;“Does AI make me faster?”&lt;/strong&gt;&lt;br&gt;
…and started asking the only question that matters:&lt;br&gt;
&lt;strong&gt;“Does AI reduce time from idea → safely in production?”&lt;/strong&gt;&lt;br&gt;
Because “faster” is easy to feel.&lt;br&gt;
“Productive” is something you have to measure.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;The AI productivity mirage (and the hidden tax)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AI makes code appear instantly, so your brain says: we’re flying.&lt;br&gt;
But in real codebases, the work often shifts from writing → &lt;strong&gt;verifying&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That verification tax looks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rereading more carefully because you don’t fully trust the output&lt;/li&gt;
&lt;li&gt;extra prompts to “make it match our patterns”&lt;/li&gt;
&lt;li&gt;more test runs because something feels off&lt;/li&gt;
&lt;li&gt;cleanup commits because the diff is bigger than it needed to be&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So yes, you typed less.&lt;br&gt;
But you didn’t necessarily ship sooner.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;What I measure now (so I stop lying to myself)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you only measure “how quickly I produced code,” AI wins every time.&lt;br&gt;
Shipping isn’t typing. Shipping is finishing.&lt;/p&gt;

&lt;p&gt;Here’s the tiny metrics set that tells the truth:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lead time&lt;/strong&gt;: ticket start → deployed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rework time&lt;/strong&gt;: time spent fixing AI output after the “first draft”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Defect escape rate&lt;/strong&gt;: bugs found after merge (especially within 7 days)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review burden&lt;/strong&gt;: how many human minutes it took to verify the change&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One hard lesson:&lt;br&gt;
AI can make one dev feel faster by making everyone else slower.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;AI agents in code review: useful, but don’t give them authority&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I used to treat AI review like a senior engineer.&lt;br&gt;
That was my mistake.&lt;/p&gt;

&lt;p&gt;Think of a review agent as a junior dev with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;infinite confidence&lt;/li&gt;
&lt;li&gt;great pattern-matching&lt;/li&gt;
&lt;li&gt;occasional invented assumptions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where review agents shine&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pointing out missing null checks / edge cases&lt;/li&gt;
&lt;li&gt;spotting inconsistent patterns&lt;/li&gt;
&lt;li&gt;suggesting tests you forgot&lt;/li&gt;
&lt;li&gt;surfacing obvious security foot-guns&lt;/li&gt;
&lt;li&gt;summarizing the diff (this alone saves time)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where they’re dangerous&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;deep domain logic (“is this billing rule correct?”)&lt;/li&gt;
&lt;li&gt;performance reality (N+1s, caching, query behavior)&lt;/li&gt;
&lt;li&gt;security boundaries (authz, tokens, tenant isolation)&lt;/li&gt;
&lt;li&gt;architecture (“does this belong here?”)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My rule now:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agents don’t approve PRs. Agents do chores.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;“Vibe coding” is fine. Shipping vibe code is not.&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Vibe coding is great for exploration: “move fast, let the model fill gaps.”&lt;/p&gt;

&lt;p&gt;It becomes risky when you treat “looks good” as “is good.”&lt;/p&gt;

&lt;p&gt;Here are the guardrails that let me ship fast without shipping chaos:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1) Keep diffs painfully small&lt;/strong&gt;&lt;br&gt;
If the AI needs 800 lines to solve it, you don’t understand the problem yet.&lt;/p&gt;

&lt;p&gt;Small diffs force clarity. Clarity prevents surprise architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) Require tests that would fail without the change&lt;/strong&gt;&lt;br&gt;
AI loves happy-path tests that only validate its own assumptions.&lt;/p&gt;

&lt;p&gt;Minimum bar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;at least one test that fails before the change&lt;/li&gt;
&lt;li&gt;at least one edge-case test&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3) Force invariants into words&lt;/strong&gt;&lt;br&gt;
Not “what did you do?”  &lt;strong&gt;what must always remain true?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“authz must be checked server-side”&lt;/li&gt;
&lt;li&gt;“billing events must be idempotent”&lt;/li&gt;
&lt;li&gt;“cache keys must include tenant id”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you can’t state invariants clearly, you’re not ready to merge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4) Use feature flags when uncertainty exists&lt;/strong&gt;&lt;br&gt;
Flags are honesty. They buy you learning time without burning trust.&lt;/p&gt;



&lt;p&gt;Copy/paste prompts I actually use&lt;br&gt;
Prompt: “Strict review, no approvals”&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are a strict code reviewer. Do NOT approve this PR.

Review the diff and output:
1) Correctness risks (edge cases, undefined behavior)
2) Security risks (authz, secrets, injections, data exposure)
3) Performance risks (N+1, caching, queries)
4) Maintainability (complexity, naming, structure)
5) Test gaps (what should exist but doesn’t)

Rules:
- If unsure, say "UNCERTAIN" and why.
- Reference specific files/functions.
- Suggest minimal fixes and minimal tests.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prompt: “Smallest possible diff”&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Make the smallest possible change to implement the requirement.

Output:
- Unified diff patch only (no commentary).
- Include/modify tests so the change is covered.

Constraints:
- Preserve existing architecture.
- No new dependencies.
- Prefer existing utilities/patterns.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These two prompts did more for my workflow than any “agent autopilot.”&lt;/p&gt;




&lt;h2&gt;
  
  
  *&lt;em&gt;The merge checklist *&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;Before I merge AI-assisted code, I ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can I explain the change without “reading the code aloud”?&lt;/li&gt;
&lt;li&gt;What invariant does this rely on?&lt;/li&gt;
&lt;li&gt;What happens on bad input / retries / timeouts?&lt;/li&gt;
&lt;li&gt;Is there a test that would fail if the change didn’t exist?&lt;/li&gt;
&lt;li&gt;Did we widen permissions or expose data?&lt;/li&gt;
&lt;li&gt;What’s the rollback story?&lt;/li&gt;
&lt;li&gt;Would I be happy owning this code in 6 months?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If any answer is “not sure,” it’s not ready.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The point isn’t “AI everywhere”&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The point is &lt;strong&gt;predictable shipping&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;AI is incredible at drafts, scaffolds, summaries, and catching the obvious.&lt;br&gt;
But the moment you give it trust by default, you’re not moving fast.&lt;/p&gt;

&lt;p&gt;You’re just moving uncertainty into production.&lt;/p&gt;

&lt;p&gt;And production has a way of collecting interest.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Now Whay You Say&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Where has AI genuinely reduced end-to-end shipping time for you?&lt;/li&gt;
&lt;li&gt;What’s your “never let AI touch this” zone (auth, billing, infra…)?&lt;/li&gt;
&lt;li&gt;If you use review agents: what’s the one prompt/checklist that made them useful?&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>codereview</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
