<?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: Aldo Barbosa</title>
    <description>The latest articles on DEV Community by Aldo Barbosa (@aldobarbosa).</description>
    <link>https://dev.to/aldobarbosa</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%2F4094518%2F5c4adfec-8d41-4723-9287-da8a39253155.jpg</url>
      <title>DEV Community: Aldo Barbosa</title>
      <link>https://dev.to/aldobarbosa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aldobarbosa"/>
    <language>en</language>
    <item>
      <title>trying to figure out who decides how risky a client request actually is</title>
      <dc:creator>Aldo Barbosa</dc:creator>
      <pubDate>Mon, 07 Sep 2026 14:51:25 +0000</pubDate>
      <link>https://dev.to/aldobarbosa/trying-to-figure-out-who-decides-how-risky-a-client-request-actually-is-2h07</link>
      <guid>https://dev.to/aldobarbosa/trying-to-figure-out-who-decides-how-risky-a-client-request-actually-is-2h07</guid>
      <description>&lt;p&gt;got a lot of good pushback on my last post about the "milestone locked = billable" thing. someone in the comments reframed the whole problem as blast radius instead of size or hours, and it stuck with me. so i sat down to sketch out how i'd build that into the tool and immediately got stuck, before writing any code.&lt;/p&gt;

&lt;p&gt;sorting requests into buckets isn't the hard part. cosmetic stuff like copy or colors, just log it and move on. anything touching data, auth, or something already approved, that needs an actual review.&lt;/p&gt;

&lt;p&gt;what i can't figure out is who does the sorting.&lt;/p&gt;

&lt;p&gt;if it's me tagging every request that comes in, i'm back to manually triaging everything, which is the whole thing i was trying to get away from. if the client tags it themselves, every request turns into "just a small tweak" because nobody rates their own request as the risky one.&lt;/p&gt;

&lt;p&gt;only idea i've got so far is giving them a short list to pick from when they submit something, like visual tweak, content change, new behavior, something's broken, and letting that map to a risk level on my end instead of asking them to judge the risk directly. but even that breaks down fast, like a "visual tweak" that happens to touch a component used in three other places.&lt;/p&gt;

&lt;p&gt;haven't even gotten to the change budget idea some of you brought up last time either, wanted to sort this part out first.&lt;/p&gt;

&lt;p&gt;anyone dealt with this before, where the person doing the classifying has a reason to underplay how risky it is?&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How do you decide which client requests need a formal change process vs which don't?</title>
      <dc:creator>Aldo Barbosa</dc:creator>
      <pubDate>Thu, 03 Sep 2026 15:08:52 +0000</pubDate>
      <link>https://dev.to/aldobarbosa/how-do-you-decide-which-client-requests-need-a-formal-change-process-vs-which-dont-51a6</link>
      <guid>https://dev.to/aldobarbosa/how-do-you-decide-which-client-requests-need-a-formal-change-process-vs-which-dont-51a6</guid>
      <description>&lt;p&gt;for a while my approach to scope creep was pretty binary: milestone approved = locked, anything after = billable. that killed most of the "i never said it was final" arguments.&lt;/p&gt;

&lt;p&gt;but it created a new problem. treating every tiny request the same way as a big one started annoying clients. a client asking to change a button color got the same "that's a change request" response as someone asking to rework the auth flow, and that felt disproportionate, even to me.&lt;/p&gt;

&lt;p&gt;talked this through with someone in the comments on my last post, and they framed it in a way that stuck with me: the threshold isn't size or hours, it's blast radius.&lt;/p&gt;

&lt;p&gt;a two minute database change can carry more risk than a two hour UI tweak. cosmetic stuff (copy, colors, spacing) can just get logged and batched. anything touching data models, auth, integrations, or something already inside an approved milestone needs an actual impact pass, regardless of how small it looks on the surface.&lt;/p&gt;

&lt;p&gt;they also mentioned keeping a small "change budget" for minor stuff, once that's used up, the next request automatically becomes a formal change order instead of a favor.&lt;/p&gt;

&lt;p&gt;i haven't fully implemented this yet, still mostly running on the old binary version, but it's making me rethink where i draw the line.&lt;/p&gt;

&lt;p&gt;how do you all decide what's worth the formal process and what isn't? going by hours, going by what the change touches, or something else entirely?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>freelance</category>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>The biggest mistake i made with client contracts (and how i fixed scope creep)</title>
      <dc:creator>Aldo Barbosa</dc:creator>
      <pubDate>Mon, 31 Aug 2026 14:45:48 +0000</pubDate>
      <link>https://dev.to/aldobarbosa/3-simple-contract-rules-i-use-so-clients-stop-asking-for-free-reworks-3n88</link>
      <guid>https://dev.to/aldobarbosa/3-simple-contract-rules-i-use-so-clients-stop-asking-for-free-reworks-3n88</guid>
      <description>&lt;p&gt;on my first few freelance projects, my contract had one big flaw: it treated delivery as a single event at the very end.&lt;/p&gt;

&lt;p&gt;what always happened:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;client would say "looks good" on staging in week 2&lt;/li&gt;
&lt;li&gt;in week 5, right before launch, they'd ask to redo the entire homepage layout&lt;/li&gt;
&lt;li&gt;when i mentioned extra cost, they'd argue: &lt;em&gt;"but the project isn't launched yet, so this is just part of it"&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;i lost so many weekends doing free reworks because of that loop.&lt;/p&gt;

&lt;p&gt;now i do two simple things differently:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;every milestone is an isolated delivery.&lt;/strong&gt; once stage 1 (e.g. design/auth) is approved, that code is locked. any changes after that are billed as an add-on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;no verbal or slack sign-offs.&lt;/strong&gt; i send a private link via &lt;a href="https://velloxis.aldolima.dev.br" rel="noopener noreferrer"&gt;Velloxis&lt;/a&gt; where they click to approve before i start writing code for the next stage.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;it completely killed the &lt;em&gt;"i never said it was final"&lt;/em&gt; argument.&lt;/p&gt;

&lt;p&gt;how do you guys handle clients who try to redesign early features right before launch?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>freelance</category>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>Update: Why non-technical clients hate client portals (and what actually worked)</title>
      <dc:creator>Aldo Barbosa</dc:creator>
      <pubDate>Fri, 28 Aug 2026 14:40:38 +0000</pubDate>
      <link>https://dev.to/aldobarbosa/update-why-non-technical-clients-hate-client-portals-and-what-actually-worked-i2h</link>
      <guid>https://dev.to/aldobarbosa/update-why-non-technical-clients-hate-client-portals-and-what-actually-worked-i2h</guid>
      <description>&lt;p&gt;A few days ago I posted here about a simple tool I put together to handle client milestone sign-offs.&lt;/p&gt;

&lt;p&gt;Reading through the comments and chatting with other devs, one thing kept coming up over and over:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The second you force a client to create an account, the system is dead.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why standard client portals fail
&lt;/h3&gt;

&lt;p&gt;Most portals are built by devs for devs. We're totally fine logging in, dealing with 2FA, checking kanban boards, and organizing tickets.&lt;/p&gt;

&lt;p&gt;Non-technical clients don't care. If they have to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open an invite email&lt;/li&gt;
&lt;li&gt;Set a password&lt;/li&gt;
&lt;li&gt;Remember their login 2 weeks later&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;...they just won't do it. They'll abandon the board and go right back to texting you on WhatsApp or DMing on Slack asking for "quick status updates".&lt;/p&gt;

&lt;h3&gt;
  
  
  What actually worked for my client projects
&lt;/h3&gt;

&lt;p&gt;To stop the endless DM chaos, I stripped out everything that causes friction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single magic link:&lt;/strong&gt; Client gets one private URL for the project. No password, no signup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual milestone breakdown:&lt;/strong&gt; They see the exact deliverables for that specific stage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One-click sign-off:&lt;/strong&gt; They click to approve before I start the next phase, which locks it with a timestamped audit log.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since putting this into &lt;a href="https://velloxis.aldolima.dev.br" rel="noopener noreferrer"&gt;Velloxis&lt;/a&gt;, client compliance went to basically 100% simply because there's zero barrier to entry.&lt;/p&gt;

&lt;p&gt;If you do client work, do you still use dashboards with logins, or have you moved to frictionless links/docs?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>freelance</category>
      <category>productivity</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Built a simple client sign-off portal to stop endless unpaid revisions</title>
      <dc:creator>Aldo Barbosa</dc:creator>
      <pubDate>Tue, 25 Aug 2026 16:53:10 +0000</pubDate>
      <link>https://dev.to/aldobarbosa/built-a-simple-client-sign-off-portal-to-stop-endless-unpaid-revisions-kpf</link>
      <guid>https://dev.to/aldobarbosa/built-a-simple-client-sign-off-portal-to-stop-endless-unpaid-revisions-kpf</guid>
      <description>&lt;p&gt;anyone who freelances knows the pain: you finish a website build, send it over, and suddenly the client remembers 10 "small tweaks" that end up taking another week of unpaid work.&lt;/p&gt;

&lt;p&gt;i tried using trello, jira, and notion to get them to sign off on stages, but non-tech clients never bother creating accounts. they just ignore the invite and text you on whatsapp anyway.&lt;/p&gt;

&lt;p&gt;got tired of arguing about scope, so i put together a lightweight tool called &lt;strong&gt;&lt;a href="https://velloxis.aldolima.dev.br/" rel="noopener noreferrer"&gt;Velloxis&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;the idea is stupidly simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you send the client a private link (no login, no password, no signup for them).&lt;/li&gt;
&lt;li&gt;they see what’s done for that milestone.&lt;/li&gt;
&lt;li&gt;they click a button to approve it before you start the next phase.&lt;/li&gt;
&lt;li&gt;it logs a timestamped sign-off.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;now if they come back later asking to redo something they already approved, there is a clear record and it makes charging for extra hours way less awkward.&lt;/p&gt;

&lt;p&gt;curious how other devs here handle milestone sign-offs with stubborn clients?&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
