<?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: Kevin Kan</title>
    <description>The latest articles on DEV Community by Kevin Kan (@kansm).</description>
    <link>https://dev.to/kansm</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%2F2480019%2F0164d4e5-0ccb-4b21-af80-0ec7b9d6a6bd.png</url>
      <title>DEV Community: Kevin Kan</title>
      <link>https://dev.to/kansm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kansm"/>
    <language>en</language>
    <item>
      <title>The Hour Between Dog and Wolf, and the Hour Between People and AI</title>
      <dc:creator>Kevin Kan</dc:creator>
      <pubDate>Mon, 03 Aug 2026 05:01:38 +0000</pubDate>
      <link>https://dev.to/kansm/the-hour-between-dog-and-wolf-and-the-hour-between-people-and-ai-4ioc</link>
      <guid>https://dev.to/kansm/the-hour-between-dog-and-wolf-and-the-hour-between-people-and-ai-4ioc</guid>
      <description>&lt;p&gt;There is a French phrase for it. L'heure entre chien et loup, the hour between dog and wolf. It is that stretch after the sun goes down, when the light has gone soft and a shape coming toward you over the far hill could be your own dog heading home or a wolf that has been watching you. You cannot quite tell. The light is vague enough that, for a little while, the thing you love and the thing you fear wear the same outline.&lt;/p&gt;

&lt;p&gt;I find myself thinking about it a lot these days. Only what has gone vague for me is not the light. It seems to be the line between people and AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  An age that doubts the polish and trusts the flaws
&lt;/h2&gt;

&lt;p&gt;The other day an email came in. Smooth sentences, tidy paragraphs, a polite greeting. And the first thing I felt was not gladness. It was doubt. "Wait, did a person actually write this?" Then another message showed up with a typo in it and a sentence that wobbled a little, and oddly enough, I felt relieved. "Ah. A human."&lt;/p&gt;

&lt;p&gt;Somewhere along the line we started doubting the polish and trusting the flaws. We used to prove we were human by squinting at warped letters and typing them back. Right. CAPTCHA. That is what I mean. Now a typo and a bit of hesitation are the proof instead. It is a strange time to be alive.&lt;/p&gt;

&lt;p&gt;Comments, reviews, voices, video, all of it the same. The more convincing it looks, the more suspicious I get. The clumsier it is, the more I relax. If the shape on the hill stands a little too straight, part of me starts to wonder if it is the wolf. That is the dusk we are standing in.&lt;/p&gt;

&lt;h2&gt;
  
  
  A developer's dusk
&lt;/h2&gt;

&lt;p&gt;I am a developer. At the end of the day, when the glow of the screen is the only light left in the room, I am standing in that dusk too. When you are running several projects alongside AI, there comes a point where you honestly cannot remember whether you wrote this commit or the model did, whether you polished this line of copy or it handed it to you. Even though you were holding the thing in your own two hands a minute ago.&lt;/p&gt;

&lt;p&gt;The strange part is that in the areas I know well, I can still make out the shape. In development, even in the half light, I can more or less tell. That one is a dog, that one is a wolf. But the moment I step into the areas I do not know, marketing, promotion, the dog and the wolf look exactly alike. Both of them seem plausible, and I cannot say which one is coming to help me and which one is quietly nudging me off the path.&lt;/p&gt;

&lt;p&gt;So the thing that lets you tell them apart is not really the eyes. It is how well you know whatever is walking toward you. The more I know, the thinner the dusk gets. The less I know, the deeper it closes in.&lt;/p&gt;

&lt;h2&gt;
  
  
  What matters more than dog or wolf
&lt;/h2&gt;

&lt;p&gt;So lately I have been asking a slightly different question. Maybe getting it right, dog or wolf, is not the point after all. The dusk is going to turn into night or into morning either way. What actually matters is how you make it across that uncertain stretch.&lt;/p&gt;

&lt;p&gt;My own approach is to keep the lamp lit. I do not just take whatever the AI hands me. I give it only as much as I can actually understand, and whatever I give it, I check with my own eyes. When I cannot tell whether the shape is a dog or a wolf, the only move left is to walk a little closer and hold the light up to it. It looks slow. But in the dusk, I have come to think it is the fastest way through.&lt;/p&gt;

&lt;p&gt;And now and then I catch myself thinking this. The one who decides whether the thing coming toward me is a dog or a wolf is, in the end, me. The very same shape turns into a dog if I plant my feet and hold up a lamp, and into a wolf if I turn my back and run. How we choose to meet AI is probably not so different.&lt;/p&gt;

&lt;h2&gt;
  
  
  To close
&lt;/h2&gt;

&lt;p&gt;I will be honest with you. Somewhere in the middle of reading this, you probably had the thought too. "Hold on, did a person write this?" That little doubt, I think, is exactly what tells us which hour we are living in.&lt;/p&gt;

&lt;p&gt;Go on, take a guess.&lt;/p&gt;

&lt;p&gt;The hour between dog and wolf is only ever brief. The hour between people and AI will pass as well, one of these days. But for as long as we are crossing it, I would rather keep my eyes open a little wider than shut them.&lt;/p&gt;

&lt;p&gt;How are you making it across this dusk?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
      <category>writing</category>
      <category>career</category>
    </item>
    <item>
      <title>I Was About to Spend Money on Ads. So I Made an AI Agent Test My Product for 29 Hours.</title>
      <dc:creator>Kevin Kan</dc:creator>
      <pubDate>Sat, 01 Aug 2026 07:54:42 +0000</pubDate>
      <link>https://dev.to/kansm/i-was-about-to-spend-money-on-ads-so-i-made-an-ai-agent-test-my-product-for-29-hours-mhc</link>
      <guid>https://dev.to/kansm/i-was-about-to-spend-money-on-ads-so-i-made-an-ai-agent-test-my-product-for-29-hours-mhc</guid>
      <description>&lt;p&gt;&lt;strong&gt;872 million tokens processed — 97.63% of them cached inputs. 5,222 tool calls. 88 issues closed. Zero critical bugs, and several high-severity ones, in a product I had been QA-ing the whole time I built it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A note before we start.&lt;/strong&gt; There's nothing exotic in this setup — no Hermes harness, no custom framework. Just Codex and a long prompt. I'm sure a properly configured Hermes run would measure all of this far more rigorously. I just don't think many people have gotten there yet, and I wanted to show what's already reachable without it.&lt;/p&gt;




&lt;p&gt;This didn't start as an experiment. It started as nerves.&lt;/p&gt;

&lt;p&gt;I was getting ready to run paid ads. Once you start buying traffic, every broken screen costs money — you're paying to deliver strangers to your worst bug. And I had a specific fear: my product runs in multiple languages, and I am not equally fluent in all of them. If something quietly breaks in one locale, I might not notice for weeks. The ads wouldn't stop running. They'd just keep working perfectly, delivering people to something broken.&lt;/p&gt;

&lt;p&gt;So instead of clicking around for an afternoon and calling it good, I handed the whole thing to Codex and told it not to stop until it ran out of things to break.&lt;/p&gt;

&lt;p&gt;It ran for just under 30 hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  The instructions
&lt;/h2&gt;

&lt;p&gt;The prompt mattered more than I expected, so here it is, cleaned up. Most of the specificity in it exists because vague instructions produce vague testing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Objective&lt;/strong&gt; I'm about to start paid advertising. Before I pay to send strangers to this product, find what they'll hit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ground rules&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Depth&lt;/strong&gt; — the happy path is the starting line, not the finish: repeat and double-click and fire concurrent requests; interrupt mid-flow with a refresh, a navigation, a sign-out, a return; switch language mid-session and check that state survives; kill a step deliberately and verify both recovery and usage accounting; mobile, tablet, desktop; keyboard-only, focus, labels, contrast; and check privacy boundaries — can any account see anything it shouldn't?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For every issue&lt;/strong&gt; Record: what a user would see, exact reproduction steps, root cause in the code, severity (Critical / High / Medium / Low), the fix, the regression test that now covers it, verification after deploy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Process:&lt;/strong&gt; Read docs/ first. Fix as you go in small, traceable commits. Deploy to main and re-verify in the live environment. A fix isn't done until it has been checked in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt; A separate report per language, plus one consolidated severity-ranked summary.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Rule 4 and rule 5 are there because of what happened during the run. I'll get to that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The loop
&lt;/h2&gt;

&lt;p&gt;Deliberately boring:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observe, Reproduce, Investigate, Fix, Test, Verify, Repeat.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The rule that made the difference was refusing to trust a single pass. A screen working once proves almost nothing. So every flow got revisited after refreshes, sign-outs, restarts, language switches, repeated requests, deliberate failures, and finally, after deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total elapsed time&lt;/td&gt;
&lt;td&gt;29h 45m 49s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recorded agent work time&lt;/td&gt;
&lt;td&gt;24h 57m 59s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Major work turns&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total tool calls&lt;/td&gt;
&lt;td&gt;5,222&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser-control calls&lt;/td&gt;
&lt;td&gt;2,408&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shell / Git / test / deploy calls&lt;/td&gt;
&lt;td&gt;2,570&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitoring and wait calls&lt;/td&gt;
&lt;td&gt;134&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Images inspected&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PDF analyses&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Issues recorded and addressed&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total commits&lt;/td&gt;
&lt;td&gt;126&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Targeted fix commits&lt;/td&gt;
&lt;td&gt;111&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automated web checks passed&lt;/td&gt;
&lt;td&gt;829&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automated hook checks passed&lt;/td&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Type checking, linting, builds, and the final test suites all passed before I called it finished. And "finished" didn't mean the last commit, it meant deployed, re-checked in the live environment, and synced back to main.&lt;/p&gt;

&lt;h2&gt;
  
  
  Yes, it processed 872 million tokens
&lt;/h2&gt;

&lt;p&gt;Here's the headline number, and here's the asterisk, right next to it where it belongs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Token type&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total processed tokens&lt;/td&gt;
&lt;td&gt;872,027,184&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input tokens&lt;/td&gt;
&lt;td&gt;870,333,094&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cached input tokens&lt;/td&gt;
&lt;td&gt;849,674,240&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Non-cached input tokens&lt;/td&gt;
&lt;td&gt;20,658,854&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output tokens&lt;/td&gt;
&lt;td&gt;1,694,090&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning tokens&lt;/td&gt;
&lt;td&gt;512,615&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Non-cached input + output&lt;/td&gt;
&lt;td&gt;22,352,944&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;872 million&lt;/strong&gt; is a genuinely fun number to say out loud. It is also 97.63% cached input.&lt;/p&gt;

&lt;p&gt;That's what a long-running session looks like from the inside: the same codebase, the same reports, the same accumulated conversation, re-processed on every turn. The cumulative counter faithfully counts all of it. It does not mean 872 million &lt;em&gt;new&lt;/em&gt; tokens were introduced or billed as fresh usage.&lt;/p&gt;

&lt;p&gt;If you want the number that describes actual new context and generated work, it's roughly &lt;strong&gt;22.35 million&lt;/strong&gt;, non-cached input plus output.&lt;/p&gt;

&lt;p&gt;I'm publishing both, because a large AI usage figure only means something when the caching structure sits beside it. Total volume without the ratio isn't measurement, it's marketing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where I had to step in
&lt;/h2&gt;

&lt;p&gt;Two days is long enough that I checked in on it periodically, not reviewing every commit, just watching screens go by and asking myself whether what I was seeing looked right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The first catch was mine.&lt;/strong&gt; In every language but one, a particular record displayed correctly. In that one language, it didn't. The agent had looked at that screen, registered it as acceptable, and moved on. I flagged it manually. Once pointed at directly, it was diagnosed and fixed quickly. The fix was never the hard part. Noticing was.&lt;/p&gt;

&lt;p&gt;That's the exact failure mode you should expect from an agent working alone: it is very good at "does this throw an error," and much weaker at "does this look wrong compared to the eleven other times I saw something similar." Rule 4 in the prompt above exists because of this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The second catch came after the run was already declared complete.&lt;/strong&gt; Going back through the results myself, I found a PostHog event that wasn't firing correctly, the one that records a completed payment.&lt;/p&gt;

&lt;p&gt;Think about what that means in context. I was doing all of this to prepare for an ad campaign. The number I would have used to judge whether the ads were working was broken. No screen looked wrong. No test failed. Nothing threw. It would simply have been quietly incorrect forever, on the single metric that mattered most for the thing I was about to spend money on.&lt;/p&gt;

&lt;p&gt;That's rule 5. Verify past the screen. A green checkmark that didn't emit its event is not a pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually changed
&lt;/h2&gt;

&lt;p&gt;88 tracked issues, 111 targeted fix commits. The mismatch is the interesting part: one observed problem usually needed several independent changes. A single inconsistency could touch persisted data, restored UI state, translated output, failure recovery, &lt;em&gt;and&lt;/em&gt; test coverage. Rather than folding that into a few fat commits, everything was split into small, traceable units.&lt;/p&gt;

&lt;p&gt;The fixes clustered into a few themes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More reliable state restoration when returning to a workflow&lt;/li&gt;
&lt;li&gt;More consistent handling of repeated or concurrent actions&lt;/li&gt;
&lt;li&gt;Better recovery when an operation dies partway through&lt;/li&gt;
&lt;li&gt;Stronger file and document boundary handling&lt;/li&gt;
&lt;li&gt;Fewer layout breaks across languages and screen sizes&lt;/li&gt;
&lt;li&gt;Clearer protection against unintended internal-data exposure&lt;/li&gt;
&lt;li&gt;New automated tests on paths that previously had none&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The volume of changed code isn't the point. The point is that every fix traces back to an observed behavior, a reproducible case, and a verification step.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that actually bothered me
&lt;/h2&gt;

&lt;p&gt;No critical bugs. Good.&lt;/p&gt;

&lt;p&gt;But there were high-severity ones. Plural. In a product where I had been running QA continuously &lt;em&gt;while&lt;/em&gt; building it.&lt;/p&gt;

&lt;p&gt;That's the finding I keep coming back to, and it's more useful than any of the numbers above. I hadn't been careless. I'd been checking as I went. And a hard 30-hour pass still surfaced multiple high-severity problems that ordinary development QA had walked straight past.&lt;/p&gt;

&lt;p&gt;Then the stress campaign itself finished, and I found two more things by looking with my own eyes.&lt;/p&gt;

&lt;p&gt;There's a popular idea right now that AI just handles this, that you point a good model at a codebase and quality is a solved problem. This run is strong evidence for how far agents have come, and it's equally strong evidence against that idea. Development-time QA missed things. A 29-hour adversarial campaign caught most of them and still missed the ones a human caught by paying attention. So the honest conclusion isn't "now it's clean." The honest conclusion is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There are almost certainly still latent bugs in there.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'll run this again. Right now I believe there is nothing high-severity left. &lt;em&gt;Believe&lt;/em&gt;, not &lt;em&gt;know&lt;/em&gt;. That distinction is the entire point of writing this up.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd tell someone doing this
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Continuity is the capability, not intelligence.&lt;/strong&gt; A one-off prompt fixes a visible bug. An agent that stays with the product discovers how that bug behaves once you add retries, localization, generated files, and a user who wanders back three steps later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Browser access and code access are far stronger together.&lt;/strong&gt; Browser automation tells you something failed. Source access tells you what might fail. Only both together let it see the symptom, trace the implementation, apply the fix, and walk the same journey again to confirm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A fix without a regression test isn't finished.&lt;/strong&gt; The screen looking better is not evidence. Where practical, every corrected behavior got a test so a future change can't quietly undo it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forbid "probably fine" explicitly.&lt;/strong&gt; Agents skip small anomalies for the same reason tired humans do, nothing was on fire. Write the rule into the prompt: an inconsistency across languages is a finding, not a mood.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verify beyond the UI, especially analytics.&lt;/strong&gt; Events, emails, generated files, and stored state are where silent failures live. These are exactly the bugs that survive a successful test run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stay in the loop.&lt;/strong&gt; The agent extended my reach enormously. It did not take over ownership. Both times something important slipped through, the thing that caught it was a person looking at the screen and thinking &lt;em&gt;hmm, that's odd.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The question worth changing
&lt;/h2&gt;

&lt;p&gt;The most useful outcome here wasn't any single fix. It was watching an agent hold an entire product-stabilization cycle, navigating, inspecting evidence, editing code, running tests, managing changes, waiting on external processes, and coming back to verify, for 30 straight hours.&lt;/p&gt;

&lt;p&gt;Which means we've been asking coding agents a slightly small question. Not only:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can you build this feature?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But also:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can you keep testing this product, investigate what breaks, fix the root causes, prove the fixes hold, and keep going until the validation criteria are met?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's a completely different job description. And right now it may be the most practical one we have, as long as somebody is still watching.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://blog.kanapp.net/posts/i-was-about-to-spend-money-on-ads-so-i-made-an-ai-agent-test-my-product-for-29-hours" rel="noopener noreferrer"&gt;Kanapp Notes&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>buildinpublic</category>
      <category>devops</category>
    </item>
    <item>
      <title>Found an AI that actually DEPLOYS your code (not just writes it)</title>
      <dc:creator>Kevin Kan</dc:creator>
      <pubDate>Mon, 16 Jun 2025 12:23:42 +0000</pubDate>
      <link>https://dev.to/kansm/found-an-ai-that-actually-deploys-your-code-not-just-writes-it-3ig1</link>
      <guid>https://dev.to/kansm/found-an-ai-that-actually-deploys-your-code-not-just-writes-it-3ig1</guid>
      <description>&lt;h1&gt;
  
  
  🚀 Found an AI that actually DEPLOYS your code (not just writes it)
&lt;/h1&gt;

&lt;p&gt;Just tested Manus AI and I'm genuinely shocked. Unlike ChatGPT/Claude that give you code to copy-paste, this thing actually:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Writes the code&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Sets up the environment&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Installs dependencies&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Tests everything&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;DEPLOYS to a live URL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No manual setup, no "it works on my machine" issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes it fundamentally different?
&lt;/h2&gt;

&lt;p&gt;I've been testing Manus AI, and it's fundamentally different from what we're used to.&lt;/p&gt;

&lt;p&gt;Most AI tools today follow the same pattern: you ask for code, they provide snippets, you implement. Manus flips this entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here's what happened when I asked it to build a TODO app:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ It created a complete React + TypeScript + Tailwind application&lt;br&gt;&lt;br&gt;
→ Set up the entire development environment&lt;br&gt;&lt;br&gt;
→ Handled all package installations and dependencies&lt;br&gt;&lt;br&gt;
→ Debugged errors autonomously&lt;br&gt;&lt;br&gt;
→ Deployed to a live, accessible URL  &lt;/p&gt;

&lt;p&gt;This isn't just code generation. &lt;strong&gt;It's end-to-end execution.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The technical architecture is fascinating 🔥
&lt;/h2&gt;

&lt;p&gt;Multiple specialized AI agents collaborate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Planning Agent:&lt;/strong&gt; Strategic task breakdown&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development Agent:&lt;/strong&gt; Code implementation
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing Agent:&lt;/strong&gt; Quality assurance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment Agent:&lt;/strong&gt; Production release&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What impressed me most was &lt;strong&gt;watching it troubleshoot in real-time&lt;/strong&gt;. When a dependency failed, it automatically explored alternatives until finding a working solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key differentiators I observed:
&lt;/h2&gt;

&lt;p&gt;✓ &lt;strong&gt;VM sandbox execution environment&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✓ &lt;strong&gt;Multi-agent collaborative workflow&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✓ &lt;strong&gt;Autonomous error resolution&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✓ &lt;strong&gt;Complete deployment pipeline&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✓ &lt;strong&gt;86.5% GAIA benchmark performance&lt;/strong&gt; (industry-leading)&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger picture
&lt;/h2&gt;

&lt;p&gt;The implications for development productivity are significant. We're moving from &lt;strong&gt;"AI-assisted coding"&lt;/strong&gt; to &lt;strong&gt;"AI-executed development."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This represents a paradigm shift from advisory AI to executory AI. For teams looking to accelerate development cycles, it's worth evaluation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations worth noting:
&lt;/h2&gt;

&lt;p&gt;⚠️ Credit-based pricing model&lt;br&gt;&lt;br&gt;
⚠️ Developed by Chinese team (consider your compliance requirements)&lt;br&gt;&lt;br&gt;
⚠️ May face challenges with highly complex enterprise architectures&lt;br&gt;&lt;br&gt;
⚠️ Temporary deployment URLs have session limitations&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;The question isn't whether AI will replace developers, but how quickly it will transform our workflows.&lt;/p&gt;

&lt;p&gt;If you're tired of AI giving you code that "should work" but doesn't, this is worth trying. It's like having a junior dev who actually finishes the job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full technical analysis and benchmarks in my detailed review:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
🔗 &lt;a href="https://medium.com/@kansm/manus-ai-from-code-to-deployment-in-one-shot-36d757a816c0" rel="noopener noreferrer"&gt;https://medium.com/@kansm/manus-ai-from-code-to-deployment-in-one-shot-36d757a816c0&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What's your experience with execution-focused AI tools?&lt;/strong&gt; Anyone else tried this? Curious about experiences with more complex projects.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: Not sponsored, just genuinely impressed by the execution-first approach&lt;/em&gt;&lt;/p&gt;

</description>
      <category>nocode</category>
      <category>lowcode</category>
      <category>ai</category>
      <category>mcp</category>
    </item>
    <item>
      <title>My Journey Through Google AI Study Jam 2025: A Two-Month Deep Dive</title>
      <dc:creator>Kevin Kan</dc:creator>
      <pubDate>Tue, 27 May 2025 03:53:30 +0000</pubDate>
      <link>https://dev.to/kansm/my-journey-through-google-ai-study-jam-2025-a-two-month-deep-dive-34e1</link>
      <guid>https://dev.to/kansm/my-journey-through-google-ai-study-jam-2025-a-two-month-deep-dive-34e1</guid>
      <description>&lt;p&gt;I wanted to share my experience participating in Google AI Study Jam 2025 over the past two months and provide some insights for those considering it.&lt;/p&gt;

&lt;p&gt;To be honest, I'd heard about Study Jams before but always dismissed them as something for job seekers or beginners — nothing too serious. But then I discovered that completing certain missions would earn you Google swag as completion rewards. And well… I'm a sucker for developer swag and open source merchandise 😅&lt;/p&gt;

&lt;p&gt;Plus, I'd been primarily using Google's APIs for AI work, so this seemed like a great opportunity to explore Google Cloud's AI services for free. So here I am, documenting my Google Study Jam journey over these two months.&lt;/p&gt;

&lt;p&gt;Google Study Jams are typically organized by local Google Developer Groups (GDG) communities worldwide throughout the year, so timing and availability may vary by region.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏷 What is Google Study Jam?
&lt;/h2&gt;

&lt;p&gt;Google Study Jam is Google's online learning program designed for developers and IT professionals. It offers courses and hands-on labs covering Google Cloud Platform (GCP), artificial intelligence (AI), machine learning (ML), Kubernetes, and various other tech domains.&lt;/p&gt;

&lt;p&gt;Participants watch online lectures, complete hands-on assignments, and learn cloud technologies through self-paced study. Upon completion, you earn digital badges and can receive completion swag.&lt;/p&gt;

&lt;p&gt;Essentially, you study independently during the designated period through video tutorials and hands-on labs. There's a leaderboard where you can see other participants' progress, but it's fundamentally self-directed learning where you earn badges as you go.&lt;/p&gt;

&lt;p&gt;Sounds simple enough, right? That's what I thought initially. But stick with me — I think you'll find some compelling aspects by the end of this review.&lt;/p&gt;

&lt;p&gt;(It seems like 2025 has significantly expanded AI-related content due to the current AI boom.)&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Key Features
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Hands-on Learning Focus&lt;/strong&gt;: The program uses Qwiklabs through the Google Cloud Skills Boost platform, allowing you to work in actual GCP environments. Think of it as comprehensive tutorials. Content includes videos, hands-on labs, quizzes, and documentation. More challenging courses require completing both practical labs and challenge labs.&lt;/p&gt;

&lt;p&gt;Each learning path includes videos, documentation, hands-on labs, and quizzes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free Credits&lt;/strong&gt;: Participants receive free credits for the normally paid Qwiklabs platform, letting you experience various labs without cost concerns. Initial tutorial completion grants around 209 credits to get you started.&lt;/p&gt;

&lt;p&gt;You use these credits to take the courses and labs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diverse Learning Topics&lt;/strong&gt;: You can explore virtually everything available in Google Cloud — AI (Vertex AI, Gemini), machine learning (ML), Kubernetes, Terraform for infrastructure, and more. Each course contains multiple labs, with completion times ranging from 1 hour for shorter courses to 7–9 hours for comprehensive ones. Currently, there are 1,295 courses available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Digital Badges and Swag&lt;/strong&gt;: Complete specific labs within the timeframe to earn digital badges. Meet the completion criteria (missions) to receive Google merchandise like t-shirts, stickers, backpacks, etc.&lt;/p&gt;

&lt;p&gt;The skill badges also integrate with Credly, so you can showcase them for networking or portfolio purposes at platforms like &lt;a href="https://www.credly.com" rel="noopener noreferrer"&gt;https://www.credly.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Credly is a digital badge platform that visualizes qualifications, certifications, and training completions as verifiable online credentials.&lt;/p&gt;

&lt;p&gt;For more details, check the official site: &lt;a href="https://events.withgoogle.com/cloud-studyjam/" rel="noopener noreferrer"&gt;https://events.withgoogle.com/cloud-studyjam/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Study Jams typically run once per year.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏷 Who Should Participate?
&lt;/h2&gt;

&lt;p&gt;There are no participation requirements — just fill out the application form when it opens and wait for the email confirmation. Then participate during the designated period by completing the coursework.&lt;/p&gt;

&lt;p&gt;This year, approximately 3,500 people participated according to the organizers, giving you a sense of the program's scale.&lt;/p&gt;

&lt;p&gt;So who would benefit most from this? (This is my personal assessment, so take it with a grain of salt.)&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Helpful Prerequisites
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Basic Linux Commands&lt;/strong&gt;: Most GCP labs use Cloud Shell or Compute Engine VMs. While most commands are provided, knowing vi or nano editors is helpful. Other Linux knowledge makes things smoother but isn't mandatory — though you might struggle more with troubleshooting without it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Python&lt;/strong&gt;: AI-related learning involves heavy Jupyter notebook usage, so understanding Python basics and Jupyter operations is beneficial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Integration and General Development Knowledge&lt;/strong&gt;: Beginners are welcome, but having some background significantly reduces learning time.&lt;/p&gt;

&lt;p&gt;These aren't requirements — just things that make the experience smoother. You can still dive in without them, though I'd say the difficulty level makes it more suitable for junior developers and above, or IT professionals.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Target Audience Analysis
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;IT Professionals / Junior+ Developers ⭐⭐⭐⭐⭐&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The ideal demographic. Basic development knowledge accelerates learning, and you can immediately apply the experience to real work. It gives you the opportunity to work with advanced technologies you wouldn't normally get to touch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Students / Non-IT Personnel ⭐⭐⭐&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Challenging but worthwhile if you're willing to push through the difficulty. Being free, it's worth attempting just for the broadened perspective. You'll get hands-on experience with cutting-edge technologies you've only heard about. (However, Challenge Labs might be particularly tough to complete.)&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Learning Process Characteristics
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Basic Learning Process&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All courses provide step-by-step instructions for every command and process. Early stages are quite manageable since everything is laid out clearly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge Labs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These test what you've learned so far, and they're genuinely challenging. Challenge Labs provide only scenarios and minimal information — you must solve problems independently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Language Support&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Some courses support multiple languages, but English works better with fewer issues. Several courses don't complete properly in non-English versions, and translations can be confusing enough that reading the original English is clearer. I recommend proceeding in English.&lt;/p&gt;




&lt;p&gt;This post is getting quite long, so I couldn't include everything here. If you're curious about more details like real work applications, specific technologies I explored, tips and tricks, or my final results, please visit my blog for the complete review!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: Started skeptical about a "beginner program," ended up spending 4-6 hours daily learning enterprise-grade ML/AI tech I'd never afford otherwise. Earned 53 badges, hit Diamond League #1, and genuinely expanded my technical perspective. Worth it if you're in tech!&lt;/p&gt;




&lt;h3&gt;
  
  
  Complete blog post available at: [&lt;a href="https://medium.com/@kansm/google-ai-study-jam-2025-my-two-month-journey-e1e94a270271" rel="noopener noreferrer"&gt;https://medium.com/@kansm/google-ai-study-jam-2025-my-two-month-journey-e1e94a270271&lt;/a&gt;]
&lt;/h3&gt;

</description>
      <category>google</category>
      <category>googlecloud</category>
      <category>studyjam</category>
      <category>vertexai</category>
    </item>
    <item>
      <title>Experience with Fellou: The World’s First Agentic Browser</title>
      <dc:creator>Kevin Kan</dc:creator>
      <pubDate>Mon, 12 May 2025 02:49:30 +0000</pubDate>
      <link>https://dev.to/kansm/experience-with-fellou-the-worlds-first-agentic-browser-3lbn</link>
      <guid>https://dev.to/kansm/experience-with-fellou-the-worlds-first-agentic-browser-3lbn</guid>
      <description>&lt;p&gt;Recently, a new concept called "AI browser" has emerged on the tech scene. Intrigued by the somewhat exaggerated claim that "you no longer need a traditional browser," I decided to test this new technology and share my experience.&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.amazonaws.com%2Fuploads%2Farticles%2Fkpberpieiiskhterfvur.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.amazonaws.com%2Fuploads%2Farticles%2Fkpberpieiiskhterfvur.png" alt=" " width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The official name of this tool is Fellou, and you can find the official website at &lt;a href="https://fellou.ai/" rel="noopener noreferrer"&gt;https://fellou.ai/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;On their website, Fellou introduces itself as "The World's First Agentic Browser."&lt;/p&gt;

&lt;p&gt;It appears that they are preparing for a full-scale service launch, and currently, an invitation code is required to access the platform.&lt;/p&gt;

&lt;h1&gt;
  
  
  🏷 Key Features of Fellou AI
&lt;/h1&gt;

&lt;h1&gt;
  
  
  ✅ Website Q&amp;amp;A
&lt;/h1&gt;

&lt;p&gt;Fellou analyzes the content of web pages that users have open and answers questions about them. Examples include webpage summarization, specific information extraction, translation, and more.&lt;/p&gt;

&lt;h1&gt;
  
  
  ✅ Workflow Execution
&lt;/h1&gt;

&lt;p&gt;It automatically performs complex tasks in the browser. Examples include composing emails, creating social media posts, making online purchases, and more.&lt;/p&gt;

&lt;h1&gt;
  
  
  ✅ Deep Search
&lt;/h1&gt;

&lt;p&gt;Fellou searches for and summarizes information on specific topics from across the internet. Examples include researching the latest technology trends, searching for academic papers, and more.&lt;/p&gt;

&lt;h1&gt;
  
  
  ✅ Report Editing
&lt;/h1&gt;

&lt;p&gt;Users can modify existing reports or create new ones. Examples include translating reports into different languages or enhancing content.&lt;/p&gt;

&lt;h1&gt;
  
  
  ✅ Multi-tasking Support
&lt;/h1&gt;

&lt;p&gt;Fellou provides functionality to execute multiple tasks simultaneously.&lt;/p&gt;

&lt;p&gt;When I asked Fellou about its capabilities, it confirmed these features. From my direct experience, the primary functions are workflow execution, deep search, and report creation. Let's examine each of these features in more detail.&lt;/p&gt;

&lt;h1&gt;
  
  
  🏷 In-depth Feature Analysis
&lt;/h1&gt;

&lt;h1&gt;
  
  
  ✅ Website Q&amp;amp;A
&lt;/h1&gt;

&lt;p&gt;With Fellou's Website Q&amp;amp;A feature, you can open a website in a tab and ask questions about it in a side panel. Fellou then analyzes the site to provide summaries and answers to your questions.&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.amazonaws.com%2Fuploads%2Farticles%2Fi0uekue6lwarx05b1273.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.amazonaws.com%2Fuploads%2Farticles%2Fi0uekue6lwarx05b1273.png" alt=" " width="799" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While this functionality exists in other AI tools, Fellou's advantage lies in allowing users to view the website while simultaneously asking questions or requesting analysis. It's comparable to having an AI assistant embedded in code editors that lets you ask questions while viewing code.&lt;/p&gt;

&lt;h1&gt;
  
  
  ✅ Workflow Execution
&lt;/h1&gt;

&lt;p&gt;This appears to be Fellou's main feature. I tested it by creating a repository on GitHub.&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.amazonaws.com%2Fuploads%2Farticles%2Fmlwmhcg43i97ncqoy3kb.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.amazonaws.com%2Fuploads%2Farticles%2Fmlwmhcg43i97ncqoy3kb.png" alt=" " width="800" height="792"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The process involves configuring tasks step by step and then waiting for execution. When you press "run," each task is executed sequentially.&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.amazonaws.com%2Fuploads%2Farticles%2Fkc03yw133tkybvtnxqno.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.amazonaws.com%2Fuploads%2Farticles%2Fkc03yw133tkybvtnxqno.png" alt=" " width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Upon execution, Fellou automatically locates GitHub and navigates to the login page. After entering account information and clicking "completed," it continues with the tasks.&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.amazonaws.com%2Fuploads%2Farticles%2F0lirg4w4mbtugxhydlib.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.amazonaws.com%2Fuploads%2Farticles%2F0lirg4w4mbtugxhydlib.png" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During this process, Fellou automatically analyzes and identifies selectors. It examines the DOM structure of the loaded webpage to automatically determine appropriate selectors.&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.amazonaws.com%2Fuploads%2Farticles%2Fd5ff8ccsdsl6e9yiwz7p.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.amazonaws.com%2Fuploads%2Farticles%2Fd5ff8ccsdsl6e9yiwz7p.png" alt=" " width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It then navigates to the creation page and automatically completes the input form. I had requested a repository named "fellou-test-project" set to private status. Since GitHub is a well-known platform, Fellou accurately found the input forms and completed them appropriately.&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.amazonaws.com%2Fuploads%2Farticles%2Fewqyzotw93gcd5k9onwo.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.amazonaws.com%2Fuploads%2Farticles%2Fewqyzotw93gcd5k9onwo.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, it clicks the "create repository" button to generate the repository. I did not intervene at any point in this process.&lt;/p&gt;

&lt;p&gt;The repository was created flawlessly on the first attempt, which was somewhat surprising.&lt;/p&gt;

&lt;p&gt;The process took approximately 2–3 minutes, likely due to the time needed for analysis and task processing.&lt;/p&gt;

&lt;h1&gt;
  
  
  ✅ Deep Search &amp;amp; Report Creation
&lt;/h1&gt;

&lt;p&gt;When performing a deep search, Fellou simultaneously opens multiple subwindows, extracting or summarizing information from each. It collects and processes information from multiple sources simultaneously, typically compiling this information into a report.&lt;/p&gt;

&lt;p&gt;For report creation, Fellou generates actual code to construct a webpage for browser display.&lt;/p&gt;

&lt;p&gt;The reports produced are remarkably detailed and comprehensive — far more extensive than what typical AI tools could generate given token limits. The content is thorough and high-quality.&lt;/p&gt;

&lt;p&gt;Examples of generated reports include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GUI Agents: A Comprehensive Research Summary&lt;/strong&gt;: &lt;a href="https://chat.fellou.ai/report/d871e5ef-7909-4874-91a2-58a04ec59e18" rel="noopener noreferrer"&gt;https://chat.fellou.ai/report/d871e5ef-7909-4874-91a2-58a04ec59e18&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fellou AI Research&lt;/strong&gt;: &lt;a href="https://chat.fellou.ai/report/27850769-adda-457e-88bd-4101ed6de666" rel="noopener noreferrer"&gt;https://chat.fellou.ai/report/27850769-adda-457e-88bd-4101ed6de666&lt;/a&gt; (Although I only asked for recent trends, the content wasn't entirely satisfactory.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deep search and report creation are the main functions, but for more detailed information, please refer to the link provided. Thank you for your understanding.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@kansm/experience-with-fellou-the-worlds-first-agentic-browser-898186945ff5" rel="noopener noreferrer"&gt;https://medium.com/@kansm/experience-with-fellou-the-worlds-first-agentic-browser-898186945ff5&lt;/a&gt;&lt;/p&gt;

</description>
      <category>fellou</category>
      <category>workflow</category>
      <category>playwright</category>
      <category>mcp</category>
    </item>
    <item>
      <title>🧱 Migrating from Monolith to Microservices with GKE: Hands-on practice</title>
      <dc:creator>Kevin Kan</dc:creator>
      <pubDate>Sun, 27 Apr 2025 04:12:51 +0000</pubDate>
      <link>https://dev.to/kansm/migrating-from-monolith-to-microservices-with-gke-hands-on-practice-2k2l</link>
      <guid>https://dev.to/kansm/migrating-from-monolith-to-microservices-with-gke-hands-on-practice-2k2l</guid>
      <description>&lt;p&gt;In today's rapidly evolving tech landscape, monolithic architectures are increasingly becoming bottlenecks for innovation and scalability. This post explores the practical steps of migrating from a monolithic architecture to microservices using Google Kubernetes Engine (GKE), offering a hands-on approach based on Google Cloud's Study Jam program.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Make the Switch?
&lt;/h2&gt;

&lt;p&gt;Before diving into the how, let's briefly address the why. Monolithic applications become increasingly difficult to maintain as they grow. Updates require complete redeployment, scaling is inefficient, and failures can bring down the entire system. Microservices address these issues by breaking applications into independent, specialized components that can be developed, deployed, and scaled independently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Overview
&lt;/h2&gt;

&lt;p&gt;Our journey uses the &lt;a href="https://github.com/googlecodelabs/monolith-to-microservices" rel="noopener noreferrer"&gt;monolith-to-microservices&lt;/a&gt; project, which provides a sample e-commerce application called "FancyStore." The repository is structured with both the original monolith and the already-refactored microservices:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;monolith-to-microservices/
├── monolith/          # Monolithic version
└── microservices/
    └── src/
        ├── orders/    # Orders microservice
        ├── products/  # Products microservice
        └── frontend/  # Frontend microservice
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our goal is to decompose the monolith into these three services, focusing on a gradual, safe transition.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up the Environment
&lt;/h2&gt;

&lt;p&gt;We begin by cloning the repository and setting up our environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Set project ID&lt;/span&gt;
gcloud config &lt;span class="nb"&gt;set &lt;/span&gt;project qwiklabs-gcp-00-09f9d6988b61

&lt;span class="c"&gt;# Clone repository&lt;/span&gt;
git clone https://github.com/googlecodelabs/monolith-to-microservices.git
&lt;span class="nb"&gt;cd &lt;/span&gt;monolith-to-microservices

&lt;span class="c"&gt;# Install latest Node.js LTS version&lt;/span&gt;
nvm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--lts&lt;/span&gt;

&lt;span class="c"&gt;# Enable Cloud Build API&lt;/span&gt;
gcloud services &lt;span class="nb"&gt;enable &lt;/span&gt;cloudbuild.googleapis.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Strangler Pattern Approach
&lt;/h2&gt;

&lt;p&gt;Rather than making a risky all-at-once transition, we'll use the Strangler Pattern—gradually replacing the monolith's functionality with microservices while keeping the system operational throughout the process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Containerize the Monolith
&lt;/h3&gt;

&lt;p&gt;The first step is containerizing the existing monolith without code changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Navigate to the monolith directory&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;monolith

&lt;span class="c"&gt;# Build and push container image&lt;/span&gt;
gcloud builds submit &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tag&lt;/span&gt; gcr.io/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GOOGLE_CLOUD_PROJECT&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/fancy-monolith-203:1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Create a Kubernetes Cluster
&lt;/h3&gt;

&lt;p&gt;Next, we set up a GKE cluster to host our application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Enable Containers API&lt;/span&gt;
gcloud services &lt;span class="nb"&gt;enable &lt;/span&gt;container.googleapis.com

&lt;span class="c"&gt;# Create GKE cluster with 3 nodes&lt;/span&gt;
gcloud container clusters create fancy-cluster-685 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--zone&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;europe-west1-b &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--num-nodes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--machine-type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;e2-medium

&lt;span class="c"&gt;# Get authentication credentials&lt;/span&gt;
gcloud container clusters get-credentials fancy-cluster-685 &lt;span class="nt"&gt;--zone&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;europe-west1-b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Deploy the Monolith to Kubernetes
&lt;/h3&gt;

&lt;p&gt;We deploy our containerized monolith to the GKE cluster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create Kubernetes deployment&lt;/span&gt;
kubectl create deployment fancy-monolith-203 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gcr.io/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GOOGLE_CLOUD_PROJECT&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/fancy-monolith-203:1.0.0

&lt;span class="c"&gt;# Expose deployment as LoadBalancer service&lt;/span&gt;
kubectl expose deployment fancy-monolith-203 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;LoadBalancer &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;80 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--target-port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8080

&lt;span class="c"&gt;# Check service status to get external IP&lt;/span&gt;
kubectl get service fancy-monolith-203
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the external IP is available, we verify that our monolith is running correctly in the containerized environment. This is a crucial validation step before proceeding with the migration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Breaking Down into Microservices
&lt;/h2&gt;

&lt;p&gt;Now comes the exciting part—gradually extracting functionality from the monolith into separate microservices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Deploy the Orders Microservice
&lt;/h3&gt;

&lt;p&gt;First, we containerize and deploy the Orders service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Navigate to Orders service directory&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/monolith-to-microservices/microservices/src/orders

&lt;span class="c"&gt;# Build and push container&lt;/span&gt;
gcloud builds submit &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tag&lt;/span&gt; gcr.io/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GOOGLE_CLOUD_PROJECT&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/fancy-orders-447:1.0.0 &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Deploy to Kubernetes&lt;/span&gt;
kubectl create deployment fancy-orders-447 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gcr.io/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GOOGLE_CLOUD_PROJECT&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/fancy-orders-447:1.0.0

&lt;span class="c"&gt;# Expose service&lt;/span&gt;
kubectl expose deployment fancy-orders-447 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;LoadBalancer &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;80 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--target-port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8081

&lt;span class="c"&gt;# Get external IP&lt;/span&gt;
kubectl get service fancy-orders-447
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that the Orders microservice runs on port 8081. When splitting a monolith, each service typically operates on its own port.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Reconfigure the Monolith to Use the Orders Microservice
&lt;/h3&gt;

&lt;p&gt;Now comes a key step—updating the monolith to use our new microservice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Edit configuration file&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/monolith-to-microservices/react-app
nano .env.monolith

&lt;span class="c"&gt;# Change:&lt;/span&gt;
&lt;span class="c"&gt;# REACT_APP_ORDERS_URL=/service/orders&lt;/span&gt;
&lt;span class="c"&gt;# To:&lt;/span&gt;
&lt;span class="c"&gt;# REACT_APP_ORDERS_URL=http://&amp;lt;ORDERS_IP_ADDRESS&amp;gt;/api/orders&lt;/span&gt;

&lt;span class="c"&gt;# Rebuild monolith frontend&lt;/span&gt;
npm run build:monolith

&lt;span class="c"&gt;# Rebuild and redeploy container&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/monolith-to-microservices/monolith
gcloud builds submit &lt;span class="nt"&gt;--tag&lt;/span&gt; gcr.io/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GOOGLE_CLOUD_PROJECT&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/fancy-monolith-203:2.0.0 &lt;span class="nb"&gt;.&lt;/span&gt;
kubectl &lt;span class="nb"&gt;set &lt;/span&gt;image deployment/fancy-monolith-203 fancy-monolith-203&lt;span class="o"&gt;=&lt;/span&gt;gcr.io/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GOOGLE_CLOUD_PROJECT&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/fancy-monolith-203:2.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This transformation is the essence of the microservices migration—instead of internal function calls, the application now makes HTTP requests to a separate service.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Deploy the Products Microservice
&lt;/h3&gt;

&lt;p&gt;Following the same pattern, we deploy the Products microservice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Navigate to Products service directory&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/monolith-to-microservices/microservices/src/products

&lt;span class="c"&gt;# Build and push container&lt;/span&gt;
gcloud builds submit &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tag&lt;/span&gt; gcr.io/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GOOGLE_CLOUD_PROJECT&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/fancy-products-894:1.0.0 &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Deploy to Kubernetes&lt;/span&gt;
kubectl create deployment fancy-products-894 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gcr.io/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GOOGLE_CLOUD_PROJECT&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/fancy-products-894:1.0.0

&lt;span class="c"&gt;# Expose service&lt;/span&gt;
kubectl expose deployment fancy-products-894 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;LoadBalancer &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;80 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--target-port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8082

&lt;span class="c"&gt;# Get external IP&lt;/span&gt;
kubectl get service fancy-products-894
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Products microservice runs on port 8082, maintaining the pattern of distinct ports for different services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Want to Learn More?
&lt;/h2&gt;

&lt;p&gt;We've successfully extracted the Orders and Products services from our monolith, implementing a gradual, safe transition to microservices. But our journey doesn't end here! In the complete guide on my blog, I cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to update the monolith to integrate with multiple microservices&lt;/li&gt;
&lt;li&gt;The Frontend microservice deployment&lt;/li&gt;
&lt;li&gt;Safe decommissioning of the original monolith&lt;/li&gt;
&lt;li&gt;Critical considerations for real-world migrations&lt;/li&gt;
&lt;li&gt;The substantial benefits gained from the microservices architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the complete walkthrough, including real deployment insights and best practices for production environments, &lt;a href="https://medium.com/@kansm/migrating-from-monolith-to-microservices-with-gke-hands-on-practice-83f32d5aba24" rel="noopener noreferrer"&gt;https://medium.com/@kansm/migrating-from-monolith-to-microservices-with-gke-hands-on-practice-83f32d5aba24&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Are you ready to break free from your monolithic constraints and embrace the flexibility of microservices? The step-by-step approach makes this transition manageable and risk-minimized for organizations of any size.&lt;/p&gt;




</description>
      <category>gke</category>
      <category>kubernetes</category>
      <category>devops</category>
      <category>microservices</category>
    </item>
    <item>
      <title>🧱Migrating from Monolith to Microservices with GKE: Core Concepts</title>
      <dc:creator>Kevin Kan</dc:creator>
      <pubDate>Sat, 26 Apr 2025 13:12:12 +0000</pubDate>
      <link>https://dev.to/kansm/migrating-from-monolith-to-microservices-with-gke-core-concepts-25a3</link>
      <guid>https://dev.to/kansm/migrating-from-monolith-to-microservices-with-gke-core-concepts-25a3</guid>
      <description>&lt;h3&gt;
  
  
  Break free from monolithic constraints: See how GKE transforms your architecture for better scalability, resilience, and team autonomy.
&lt;/h3&gt;

&lt;p&gt;Like many developers, I started building web applications with a monolithic architecture. It seemed logical at the time—one codebase, one deployment, simple to understand. But as my applications grew in complexity and user base, I began experiencing the limitations firsthand.&lt;/p&gt;

&lt;p&gt;Today, I want to share my journey transitioning from monolithic applications to microservices using Google Kubernetes Engine (GKE), and why this migration changed everything for my development workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Monolith: Where We All Begin
&lt;/h2&gt;

&lt;p&gt;When starting a new web app, most of us default to creating a single codebase that handles everything. This monolithic approach puts all functionalities—frontend, backend, database interactions—into one server and one codebase.&lt;/p&gt;

&lt;p&gt;Typically, we build on a single framework:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backend: Spring Boot, Django, Express.js, or Rails&lt;/li&gt;
&lt;li&gt;Frontend: Bundled within the same project or deployed separately but still as a single application&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach works wonderfully at first. Development is fast, deployment is straightforward, and the mental model is simple. But as I discovered, things don't stay simple forever.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Monoliths Become Monsters
&lt;/h2&gt;

&lt;p&gt;After maintaining several monolithic applications through growth phases, I encountered recurring issues that became increasingly difficult to ignore:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scaling inefficiencies&lt;/strong&gt;: When my user authentication service experienced heavy load, I had to scale the entire application—including rarely-used features—wasting significant resources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deployment headaches&lt;/strong&gt;: Even minor changes to a single feature required redeploying the entire system, leading to unnecessary downtime and extensive testing cycles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The dreaded single point of failure&lt;/strong&gt;: One memory leak in an obscure feature could bring down the entire application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Growing complexity&lt;/strong&gt;: As our team expanded, onboarding new developers became challenging. No single person could understand the entire codebase, slowing down development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Technology stagnation&lt;/strong&gt;: Wanting to use cutting-edge frameworks or languages for new features meant refactoring enormous portions of code, which was rarely feasible.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These problems weren't unique to me—they represent the classic scaling challenges that push development teams toward microservices architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Microservices: A New Architectural Paradigm
&lt;/h2&gt;

&lt;p&gt;Microservices offered a solution by decomposing my monolith into smaller, independently deployable services, each handling specific business functionality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend Service&lt;/strong&gt; – Dedicated to user interface concerns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Order Service&lt;/strong&gt; – Focused solely on order processing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product Service&lt;/strong&gt; – Managing product data and inventory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each service could now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scale independently based on its specific demand&lt;/li&gt;
&lt;li&gt;Be developed, tested, and deployed without affecting other services&lt;/li&gt;
&lt;li&gt;Be built using the ideal technology stack for its particular requirements&lt;/li&gt;
&lt;li&gt;Be owned by a specific team, enabling greater autonomy&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Enter Google Kubernetes Engine (GKE)
&lt;/h2&gt;

&lt;p&gt;While microservices solved many problems, they introduced new complexity in deployment and orchestration. This is where Google Kubernetes Engine became invaluable in my journey.&lt;/p&gt;

&lt;p&gt;GKE provided a managed Kubernetes environment that handled the orchestration of my containerized microservices, taking care of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service discovery and load balancing&lt;/li&gt;
&lt;li&gt;Automated scaling based on demand&lt;/li&gt;
&lt;li&gt;Self-healing capabilities&lt;/li&gt;
&lt;li&gt;Secret and configuration management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With GKE, I could focus on building better services rather than managing infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Migration Was Worth It
&lt;/h2&gt;

&lt;p&gt;The benefits I've experienced after migrating to microservices with GKE have transformed how my team works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Targeted scaling&lt;/strong&gt;: During sales events, we scale only our product and checkout services, keeping costs reasonable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Faster feature delivery&lt;/strong&gt;: Teams deploy new features independently multiple times per day without coordinating company-wide releases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Improved resilience&lt;/strong&gt;: Last month, an issue in our recommendation service had zero impact on critical shopping functionality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Team specialization&lt;/strong&gt;: Frontend specialists work exclusively on the UI service, while data engineers optimize our analytics services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Technology flexibility&lt;/strong&gt;: We've implemented real-time features with Node.js while maintaining our data processing in Python—choosing the right tool for each job.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Is Microservice Migration Right for You?
&lt;/h2&gt;

&lt;p&gt;While my experience has been overwhelmingly positive, microservices aren't a silver bullet. Consider this approach if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your application has clear functional boundaries&lt;/li&gt;
&lt;li&gt;Different components have different scaling needs&lt;/li&gt;
&lt;li&gt;You need to accelerate development across multiple teams&lt;/li&gt;
&lt;li&gt;You're experiencing growing pains with your monolith&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, be prepared for the added complexity of distributed systems. Monitoring, tracing, and maintaining data consistency become more challenging.&lt;/p&gt;

&lt;h2&gt;
  
  
  Want to Learn More?
&lt;/h2&gt;

&lt;p&gt;I've documented my complete migration journey, including step-by-step implementation guidelines, containerization strategies, and GKE deployment workflows in a comprehensive guide on my blog.&lt;/p&gt;

&lt;p&gt;For more detailed information, please refer to my blog&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@kansm/migrating-from-monolith-to-microservices-with-gke-core-concepts-ec84e4300338" rel="noopener noreferrer"&gt;https://medium.com/@kansm/migrating-from-monolith-to-microservices-with-gke-core-concepts-ec84e4300338&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have you made a similar transition? I'd love to hear about your experiences in the comments!&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>microservices</category>
      <category>devops</category>
      <category>gke</category>
    </item>
    <item>
      <title>Logitech Mouse Comparison: 5 Models</title>
      <dc:creator>Kevin Kan</dc:creator>
      <pubDate>Tue, 22 Apr 2025 07:08:09 +0000</pubDate>
      <link>https://dev.to/kansm/logitech-mouse-comparison-5-models-222j</link>
      <guid>https://dev.to/kansm/logitech-mouse-comparison-5-models-222j</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.amazonaws.com%2Fuploads%2Farticles%2Fis6va1qmfy2vook7xaeh.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.amazonaws.com%2Fuploads%2Farticles%2Fis6va1qmfy2vook7xaeh.png" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From left to right in the image: MX Anywhere 3, MX Master 3 for Mac, MX Master 2S, G502X Plus, MX Vertical&lt;/p&gt;

&lt;p&gt;My progression through different mice looks like this: G502 (left-click malfunction) → G502 SE (left-click malfunction) → MX Vertical (unnatural movement feel) → MX Master 3 (stickiness) → MX Master 2S (stickiness) → G502X Plus (too light) → MX Master 3 (current)&lt;/p&gt;

&lt;p&gt;I should mention that I don’t use these mice for gaming (I only game on PlayStation).&lt;/p&gt;

&lt;p&gt;There’s virtually no difference between the MX Master 3 for Mac and the MX Master 3. The user experience is essentially identical.&lt;/p&gt;

&lt;p&gt;Currently, I’ve settled back on the MX Master 3. I’m most satisfied with its overall performance and wrist comfort.&lt;/p&gt;

&lt;p&gt;If you’re looking for a new mouse, I hope this provides some helpful insights!&lt;/p&gt;

&lt;p&gt;After going through numerous mice, I’ve ultimately returned to the MX Master 3. I hope you too find your ‘destined mouse’ and enjoy coding without wrist pain. Remember, a good mouse and keyboard contributes to good code!&lt;/p&gt;

&lt;p&gt;For more details, please refer to the blog..&lt;br&gt;
&lt;a href="https://medium.com/@kansm/logitech-mouse-comparison-5-models-82299748b954" rel="noopener noreferrer"&gt;https://medium.com/@kansm/logitech-mouse-comparison-5-models-82299748b954&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mouse</category>
      <category>logitech</category>
      <category>mxmaster3</category>
      <category>g502x</category>
    </item>
    <item>
      <title>MCP + Claude : Real-Time Search &amp; DB Queries in Action</title>
      <dc:creator>Kevin Kan</dc:creator>
      <pubDate>Sat, 05 Apr 2025 14:26:48 +0000</pubDate>
      <link>https://dev.to/kansm/mcp-claude-real-time-search-db-queries-in-action-4o78</link>
      <guid>https://dev.to/kansm/mcp-claude-real-time-search-db-queries-in-action-4o78</guid>
      <description>&lt;h2&gt;
  
  
  Understanding MCP in Simple Terms
&lt;/h2&gt;

&lt;p&gt;The Model Context Protocol (MCP) has been generating significant buzz in the AI development community lately. While many explanations tend to overcomplicate it, based on my hands-on experience, the concept is relatively straightforward.  &lt;/p&gt;

&lt;p&gt;At its core, MCP leverages Node's NPX to locally install a "server" package. This package executes specified tools passed as arguments. The magic happens when these tools establish bidirectional communication with various AI clients (including Claude), enabling seamless information exchange. Docker-based deployment is also supported for those preferring containerized environments.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Application: Real-time Search Capabilities
&lt;/h2&gt;

&lt;p&gt;I recently tested MCP using Claude Desktop as the client interface and integrated the Brave Search API. The results were impressively effective.  &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.amazonaws.com%2Fuploads%2Farticles%2Faqlfk0o1krvfc9whfytq.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.amazonaws.com%2Fuploads%2Farticles%2Faqlfk0o1krvfc9whfytq.png" alt=" " width="799" height="429"&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.amazonaws.com%2Fuploads%2Farticles%2Fflywkl0a0tcwfsdocfwd.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.amazonaws.com%2Fuploads%2Farticles%2Fflywkl0a0tcwfsdocfwd.png" alt=" " width="800" height="825"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;When comparing standard cloud AI interactions (which typically rely on pre-trained knowledge) with an MCP-equipped AI, the difference becomes immediately apparent. The latter enables real-time search capabilities—a feature not natively available in standard Claude implementations.  &lt;/p&gt;

&lt;p&gt;Implementation requirements are minimal: just an API key and a few lines of JSON configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"brave-search"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-brave-search"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"BRAVE_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_API_KEY_HERE"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Direct Database Integration
&lt;/h2&gt;

&lt;p&gt;MCP's capabilities extend beyond search functionality. By incorporating a PostgreSQL MCP server, you can establish direct database connections and execute queries in real-time.  &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.amazonaws.com%2Fuploads%2Farticles%2Fstyt3h5jer9t17yuke3o.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.amazonaws.com%2Fuploads%2Farticles%2Fstyt3h5jer9t17yuke3o.png" alt=" " width="800" height="699"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;I tested this with a complex database schema containing Order and OrderItem tables, each with approximately 250 fields. Even when crafting queries requiring three table joins, the results and corresponding code generation were remarkably satisfactory.  &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.amazonaws.com%2Fuploads%2Farticles%2Fhyxwrjwi7r38yiwj9pm0.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.amazonaws.com%2Fuploads%2Farticles%2Fhyxwrjwi7r38yiwj9pm0.png" alt=" " width="800" height="864"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Transforming the Development Workflow
&lt;/h2&gt;

&lt;p&gt;Perhaps the most significant advantage is the elimination of tedious schema explanations. There's no longer any need to describe table structures, column details, or data relationships to your AI assistant. Since MCP enables direct database access, the AI can infer necessary information and retrieve relevant data autonomously.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;These are just a few examples from my MCP testing experiences. I've covered the key aspects, but for more detailed insights or specific questions, please refer to my blog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@kansm/continuing-from-our-previous-post-we-will-now-explore-using-mcp-model-context-protocol-with-44395eb4b9b9" rel="noopener noreferrer"&gt;https://medium.com/@kansm/continuing-from-our-previous-post-we-will-now-explore-using-mcp-model-context-protocol-with-44395eb4b9b9&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>mcp</category>
      <category>claudedesktop</category>
    </item>
  </channel>
</rss>
