<?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: MAURIZIO ARGONETO</title>
    <description>The latest articles on DEV Community by MAURIZIO ARGONETO (@margoneto).</description>
    <link>https://dev.to/margoneto</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%2F3777379%2F2cd3d65a-bce3-4661-a120-23b2ba8078b2.jpg</url>
      <title>DEV Community: MAURIZIO ARGONETO</title>
      <link>https://dev.to/margoneto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/margoneto"/>
    <language>en</language>
    <item>
      <title>The rule that killed "Just Start Coding" at our Hackathon</title>
      <dc:creator>MAURIZIO ARGONETO</dc:creator>
      <pubDate>Fri, 18 Sep 2026 10:00:53 +0000</pubDate>
      <link>https://dev.to/margoneto/the-rule-that-killed-just-start-coding-at-our-hackathon-jeb</link>
      <guid>https://dev.to/margoneto/the-rule-that-killed-just-start-coding-at-our-hackathon-jeb</guid>
      <description>&lt;p&gt;GDG Basilicata and the IEEE Student Branch at the University of Basilicata, together with the university's Department of Sciences, booked a room built for fifty to eighty students, split them into teams of three or four, and gave them eight hours to build something with Google's Gemini models. Nobody installed a GPU driver. Nobody touched a local model weight. Every team redeemed a free API key from Google AI Studio and worked entirely in the browser.&lt;/p&gt;

&lt;p&gt;That's the first pillar of the format we built, and it's the boring one: cloud-first, zero local setup. It matters because the fastest way to kill momentum in a student hackathon is a broken CUDA install at hour two. Remove the infrastructure problem and you get eight real hours of thinking and building instead of six hours of pip errors.&lt;/p&gt;

&lt;p&gt;The interesting part is what we did with the time that freed up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing code fast isn't the hard part anymore
&lt;/h2&gt;

&lt;p&gt;Any team in that room could ask an agentic coding tool for a working prototype in twenty minutes. That capability is common now, which is exactly why we didn't grade on it. Our scoring grid put 35 of 100 points on a file most hackathons never ask for: SPEC.md.&lt;/p&gt;

&lt;p&gt;Before touching an IDE, each team spent an hour and a half writing down what they were building, for whom, and how they'd know it worked — functional requirements, architecture, expected output, non-functional constraints. A mentor had to sign off before the team could move to code. We called this phase Spec-Driven Development, and it changed the room's energy. Teams argued about scope before they argued about syntax. Some rewrote their spec twice before a mentor approved it.&lt;/p&gt;

&lt;p&gt;Only after that did agentic coding tools come into play — Google Antigravity, Cursor, VS Code with Gemini Code Assist. The agent reads SPEC.md, scaffolds the app, and helps wire up the Gemini API calls. The team's job shifts from typing code to checking what the agent produced against the spec they wrote an hour earlier. That's a different skill than typing fast, and it's the one we wanted to measure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pitch is engineered too
&lt;/h2&gt;

&lt;p&gt;In the last hour before submission lock, teams didn't write slides from a blank deck. They uploaded SPEC.md, their code, and their documentation into NotebookLM and used it to generate a three-minute pitch script, an FAQ for the Q&amp;amp;A round, and, for teams who wanted it, an audio overview they could play as part of the demo. Thirty of the hundred points went here: how clearly a team could explain what they built and defend it in two minutes of jury questions.&lt;/p&gt;

&lt;p&gt;Four tracks were open on the day: study tools for university life, services for local government and territory, autonomous agents, and multimodal apps mixing text, image, audio or code. Output had to land as a web app, a dashboard, or an AI agent, nothing more exotic than that, on purpose — a constraint that stops a team from disappearing into scope an eight-hour sprint can't survive.&lt;/p&gt;

&lt;h2&gt;
  
  
  The schedule, hour by hour
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;07:30–08:30&lt;/td&gt;
&lt;td&gt;Room setup, projector and Wi-Fi checks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;08:30–09:15&lt;/td&gt;
&lt;td&gt;Check-in and team matchmaking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;09:15–09:45&lt;/td&gt;
&lt;td&gt;Keynote: stack, tracks, rubric&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;09:45–11:00&lt;/td&gt;
&lt;td&gt;Spec Definition — SPEC.md, mentor sign-off&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11:00–11:15&lt;/td&gt;
&lt;td&gt;Coffee break&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11:15–13:00&lt;/td&gt;
&lt;td&gt;Agentic Coding Sprint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13:00–14:00&lt;/td&gt;
&lt;td&gt;Lunch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14:00–16:00&lt;/td&gt;
&lt;td&gt;Integration &amp;amp; polish, Gemini API wiring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16:00–17:00&lt;/td&gt;
&lt;td&gt;Pitch prep with NotebookLM, submission upload&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17:00&lt;/td&gt;
&lt;td&gt;Submission lock&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17:00–17:30&lt;/td&gt;
&lt;td&gt;Jury's technical filter, pitch order set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17:30–18:45&lt;/td&gt;
&lt;td&gt;Live pitch showcase: 3-minute pitch, 2-minute Q&amp;amp;A per team&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18:45–19:15&lt;/td&gt;
&lt;td&gt;Jury deliberation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19:15–19:45&lt;/td&gt;
&lt;td&gt;Awards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19:45–20:30&lt;/td&gt;
&lt;td&gt;Teardown&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The deadline is not a suggestion. At minus sixty, minus thirty and minus ten minutes, someone walks the room and calls it out loud. Write access to the submission folder closes automatically at 17:00, no five-minute grace period — the first team you grant one to will tell the next twenty it's negotiable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five roles, none of them optional
&lt;/h2&gt;

&lt;p&gt;Running this for a room that size, with a jury on top, needs more than a tech lead. We split it five ways.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Owns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Event Lead&lt;/td&gt;
&lt;td&gt;Overall coordination, university relations, MC on the day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logistics &amp;amp; Venue Lead&lt;/td&gt;
&lt;td&gt;Room booking, Wi-Fi, power strips, catering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tech &amp;amp; Mentor Lead&lt;/td&gt;
&lt;td&gt;API keys, Google AI Studio support, Spec-Driven Dev guidance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Marketing &amp;amp; Community Lead&lt;/td&gt;
&lt;td&gt;Graphics, social channels, photo and video&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Platform &amp;amp; Judging Lead&lt;/td&gt;
&lt;td&gt;Submission platform, CSV exports, the judges' scoring sheet&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mentors and judges are different people doing different jobs. Mentors unblock teams on specs, API access, or NotebookLM extraction; they don't score anything. Judges score the spec, the working demo, and the pitch, and nothing else.&lt;/p&gt;

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

&lt;p&gt;University Wi-Fi struggled under dozens of simultaneous connections, so we asked IT for a dedicated SSID ahead of time and kept a couple of 4G hotspots on hand as backup. A handful of students got stuck redeeming their AI Studio API key; mentors carried spare keys to unblock them on the spot instead of debugging Google's account flow live in front of a team on the clock. Teams with no prior exposure to writing specs stalled in the first phase, which is why the quickstart doc ships a pre-filled template instead of a blank file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# SPEC.md&lt;/span&gt;

&lt;span class="gu"&gt;## Obiettivo&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;One&lt;/span&gt; &lt;span class="na"&gt;sentence:&lt;/span&gt; &lt;span class="na"&gt;what&lt;/span&gt; &lt;span class="na"&gt;problem&lt;/span&gt; &lt;span class="na"&gt;does&lt;/span&gt; &lt;span class="na"&gt;this&lt;/span&gt; &lt;span class="na"&gt;solve&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="na"&gt;whom&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="gu"&gt;## Requisiti Funzionali&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; ...

&lt;span class="gu"&gt;## Requisiti Non Funzionali&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; ...

&lt;span class="gu"&gt;## Output Atteso&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;Web&lt;/span&gt; &lt;span class="na"&gt;app&lt;/span&gt; &lt;span class="err"&gt;/&lt;/span&gt; &lt;span class="na"&gt;Dashboard&lt;/span&gt; &lt;span class="err"&gt;/&lt;/span&gt; &lt;span class="na"&gt;Agent&lt;/span&gt; &lt;span class="err"&gt;—&lt;/span&gt; &lt;span class="na"&gt;what&lt;/span&gt; &lt;span class="na"&gt;does&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="na"&gt;done&lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="na"&gt;look&lt;/span&gt; &lt;span class="na"&gt;like&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Handing teams a template doesn't lower the bar — a mentor still has to approve it — it just gets them past the blank-page freeze in the first ten minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why another chapter could run this tomorrow
&lt;/h2&gt;

&lt;p&gt;None of this needs a compute budget. The API key is free, the IDEs are free or already on student laptops, and NotebookLM runs in a browser tab. What it needs is a room, five people willing to own the roles above, three or four mentors, and a rubric that rewards a good spec and a good pitch as much as a working demo. The competition template we cloned on Kaggle — visibility set to Restricted, rubric swapped in, CSV export at lock time — is reusable as-is by any group running a Google-model hackathon.&lt;/p&gt;

&lt;p&gt;The retrospective after this run flagged the usual fixes for next time: earlier mentor briefings, a longer matchmaking window, clearer wording on what counts as "multimodal." None of that touches the four pillars. Cloud-first, spec before code, an agent that reads the spec instead of guessing, and a pitch built from artifacts the team already produced — that combination is what let a computer science student and a humanities student sit at the same table and ship the same prototype.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>hackathon</category>
      <category>google</category>
      <category>community</category>
    </item>
    <item>
      <title>Building a smart greenhouse in the woods: the architectural experiment of DevFest Basilicata - DevF{or}est</title>
      <dc:creator>MAURIZIO ARGONETO</dc:creator>
      <pubDate>Wed, 12 Aug 2026 15:38:40 +0000</pubDate>
      <link>https://dev.to/margoneto/building-a-smart-greenhouse-in-the-woods-the-architectural-experiment-of-devfest-basilicata--15j</link>
      <guid>https://dev.to/margoneto/building-a-smart-greenhouse-in-the-woods-the-architectural-experiment-of-devfest-basilicata--15j</guid>
      <description>&lt;p&gt;_By Maurizio Argoneto and Francesco di Donato &lt;a class="mentioned-user" href="https://dev.to/francesco_didonato_d1f65"&gt;@francesco_didonato_d1f65&lt;/a&gt; _&lt;/p&gt;

&lt;p&gt;How do you organize a tech conference that isn't just the usual sequence of slides in a dark hotel room? GDG Basilicata answered that question by bringing 66 developers to &lt;em&gt;La Majonica&lt;/em&gt;, a forest in the municipality of Tito (PZ, Italy), for the third edition of DevFest — rebranded for the day as &lt;strong&gt;"DevForest"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But the real innovation wasn't just the location. The event broke the classic format by introducing a single, fascinating constraint: &lt;strong&gt;technical interdependence&lt;/strong&gt;. Instead of isolated workshops, the entire day had one global goal — build a working &lt;strong&gt;smart greenhouse&lt;/strong&gt;, live, piece by piece, across different teams.&lt;/p&gt;

&lt;p&gt;Here's how we merged Botany, IoT, 3D Printing, Cloud computing, and Generative AI into a single, functioning pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤝 Talks as "integration contracts"
&lt;/h2&gt;

&lt;p&gt;The morning was dedicated to five 30-minute talks. These weren't just theoretical presentations — they were actual technical &lt;em&gt;contracts&lt;/em&gt;: each speaker handed over the exact specifications (JSON formats, endpoints, physical tolerances) that their group had to respect during the afternoon Build Sprint, so the whole system could talk to itself.&lt;/p&gt;

&lt;p&gt;The 5 pillars of our ecosystem:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Botany&lt;/strong&gt; (Francesco Albanese) — Biology before code. He defined the plant's vital thresholds (soil moisture, air temperature), which became the conditional logic of our software, and made the case for why IoT actually matters for energy and water conservation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Electronics / IoT&lt;/strong&gt; (Soumaya Erradi) — The "nervous system". Using an &lt;code&gt;ESP32&lt;/code&gt; microcontroller, a &lt;code&gt;DHT11&lt;/code&gt; sensor, and a capacitive soil sensor, the team wrote the C++ firmware to read environmental data and drive a water pump relay.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;3D Fabrication&lt;/strong&gt; (Luigi Tuccillo) — The "armor". Bare hardware doesn't survive in a greenhouse. Using Tinkercad and AI-assisted modeling, the team designed and printed a PETG case (heat- and moisture-resistant) with tolerances tight enough to properly house the ESP32.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloud &amp;amp; Data&lt;/strong&gt; (Gregorio Palamà) — The "brain". A serverless Cloud Function on Firebase evaluated incoming data and made irrigation decisions by querying Gemini.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;App &amp;amp; Generative AI&lt;/strong&gt; (Mike Trizio) — The "voice". A dashboard built in &lt;strong&gt;Angular&lt;/strong&gt; to show real-time data and let users ask, by voice, &lt;em&gt;"How is the plant doing?"&lt;/em&gt; — and get an empathetic answer read back via text-to-speech.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🏗️ The real architecture (spoiler: not everything went 100% smoothly)
&lt;/h2&gt;

&lt;p&gt;For the Dev.to crowd, here's the juicy part. IoT always looks easy in online tutorials — things change when you're in a forest with limited connectivity.&lt;/p&gt;

&lt;p&gt;We ruled out a &lt;em&gt;push&lt;/em&gt; model from the Cloud to the ESP32: the device wasn't exposed to the internet, and there was no way to configure NAT/firewall rules out in the woods. So the architecture we actually shipped in the afternoon was built around &lt;strong&gt;polling&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The final stack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ESP32 → Spring Boot API Gateway (Cloud Run) → External Firestore → Angular App
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system handled 4 parallel flows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Telemetry&lt;/strong&gt; — The ESP32 sent POST requests to the Java gateway, which performed an &lt;em&gt;upsert&lt;/em&gt; of the telemetry data (humidity, temperature) into Firestore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Manual command&lt;/strong&gt; — The user clicked a button on the Angular app, sending a command to the Gateway.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Chat with Gemini&lt;/strong&gt; — The Angular app built a dynamic prompt by injecting live sensor data and sent it to Gemini to generate a conversational response about the plant's health.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scheduled automation&lt;/strong&gt; — A Firebase Node.js (TypeScript) Function ran every hour. It applied a pre-filter (e.g. soil moisture &lt;code&gt;&amp;lt; 40%&lt;/code&gt;), passed 48 hours of historical data to Gemini in a batch, and forced the output to match a structured &lt;strong&gt;Zod&lt;/strong&gt; schema (&lt;code&gt;shouldWater&lt;/code&gt;, &lt;code&gt;durationSeconds&lt;/code&gt;, &lt;code&gt;reason&lt;/code&gt;). If the answer was positive, it queued the command on the Gateway.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The polling trick and the in-memory queue
&lt;/h3&gt;

&lt;p&gt;To get the irrigation command to the physical pump, the ESP32 sent a &lt;code&gt;GET /adjustments&lt;/code&gt; request to the Spring Boot Gateway at regular intervals. The Gateway kept an in-memory command queue (a &lt;code&gt;ConcurrentHashMap&lt;/code&gt; of &lt;code&gt;ConcurrentLinkedQueue&lt;/code&gt;). Once read, the command was removed — &lt;em&gt;exactly-once delivery&lt;/em&gt; — and executed by the pump.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔍 Retrospective: what worked and what "exploded"
&lt;/h2&gt;

&lt;p&gt;The best part of building things live is the evening retrospective — held, literally, around a campfire.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The big wins:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Separation of concerns.&lt;/strong&gt; Because the JSON contracts were nailed down in the morning, teams could work in parallel. If the Cloud team got stuck, the IoT team just kept testing against mocked data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The dual use of Gemini.&lt;/strong&gt; Using AI for two completely different jobs — a creative, natural-language response on the frontend, and an algorithmic decision constrained by a Zod schema on the backend — turned out to be a winning combination.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technical debt (don't repeat this in prod):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The in-memory queue.&lt;/strong&gt; A RAM &lt;code&gt;HashMap&lt;/code&gt; for the command queue is perfect for a hackathon and disastrous for scalability. If the Cloud Run instance restarted (or scaled out), commands were simply lost. For v2, the plan is to move the queue to a Firestore collection (&lt;code&gt;pendingCommands&lt;/code&gt;) or to Cloud Tasks / Pub/Sub.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Polling latency.&lt;/strong&gt; Being a pull system, there was a noticeable delay between the AI's decision and the actual pump activation, dictated by the ESP32's polling cycle.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tricky IAM permissions.&lt;/strong&gt; Firestore lived in a different Google Cloud project than Cloud Run. Without explicitly granting the &lt;code&gt;roles/datastore.user&lt;/code&gt; role to the service account, the system failed silently with &lt;code&gt;PERMISSION_DENIED&lt;/code&gt; errors.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📹 Event coverage &amp;amp; video references
&lt;/h2&gt;

&lt;p&gt;The DevForest experiment caught the attention of both local media and the tech community. Worth a look if you want to see the greenhouse — and the woods — in action: &lt;a href="https://devfest.gdgbasilicata.it/" rel="noopener noreferrer"&gt;Web site&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;As Maurizio Argoneto put it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The day was focused on nature and technology — we had the opportunity to experience, through talks and labs, what it means not just to design, but to practically build something real. We did this with 3D-printed elements, sensors capable of reading a plant's vital state, all the way to transforming this data in the cloud and designing an app for monitoring and interaction."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The success of DevFest Basilicata didn't hinge on which libraries were used — it hinged on forcing different teams to depend on each other in an environment with real physical and network constraints. It was the physical embodiment of what it actually means to build and maintain distributed software.&lt;/p&gt;

&lt;p&gt;If you want to replicate the project, the entire Spring Boot gateway code is open source, and you can test it with the Firebase CLI and a simple ESP32.&lt;/p&gt;

&lt;p&gt;See you at the next DevFest! (Hopefully with a persistent message queue 🚀)&lt;br&gt;
&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devfest</category>
      <category>iot</category>
      <category>cloud</category>
    </item>
    <item>
      <title>From Code Smells to Strategy Spells - Directing AI with Human Judgment</title>
      <dc:creator>MAURIZIO ARGONETO</dc:creator>
      <pubDate>Mon, 13 Apr 2026 14:49:30 +0000</pubDate>
      <link>https://dev.to/margoneto/from-code-smells-to-strategy-spells-directing-ai-with-human-judgment-e5c</link>
      <guid>https://dev.to/margoneto/from-code-smells-to-strategy-spells-directing-ai-with-human-judgment-e5c</guid>
      <description>&lt;p&gt;In 2026, the question is no longer whether AI can code. It already does. Your new "Junior AI" coworker is tireless, never complains about long meetings, and can write 5,000 lines of code in a second. It has read every architecture book and knows every design pattern by heart, from Strategy to Repository.&lt;/p&gt;

&lt;p&gt;But there is a trap. AI knows how to &lt;strong&gt;apply&lt;/strong&gt; a pattern, but it doesn't know &lt;strong&gt;when&lt;/strong&gt; — and more importantly, &lt;strong&gt;when not&lt;/strong&gt; — to apply it. Without human judgment, AI suffers from "algorithmic over-zealousness." It will build a rocket just to go to the supermarket, leaving you with a 300-line "elegant" disaster for a problem that only needed 50 lines of simple code.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;AI knows how to apply a pattern, but it doesn't know when — or when not — to apply it.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The $440 Million Warning: Knight Capital
&lt;/h2&gt;

&lt;p&gt;Technical debt is often dismissed as an aesthetic problem, but history tells a different story. On August 1, 2012, Knight Capital lost &lt;strong&gt;$440 million in just 45 minutes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The cause? A combination of "dead code" left festering in production for eight years and the reuse of a simple variable flag. A cosmetic-level mistake triggered an architectural monster. The lesson is clear: &lt;strong&gt;technical debt is a fatal business risk&lt;/strong&gt;, and AI, in its rush to "clean up," can easily trigger these dormant disasters if it lacks context.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Compass for Technical Debt: The 3-Level Framework
&lt;/h2&gt;

&lt;p&gt;To direct AI effectively, we must first categorize the "smell." This is a practical 3-level diagnostic framework:&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%2F5778scvikxy6ud8c7kwp.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%2F5778scvikxy6ud8c7kwp.png" alt=" " width="800" height="588"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Fig. 1 — The 3-Level Code Smell Framework with Impact Scores&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Level 1: Cosmetic
&lt;/h3&gt;

&lt;p&gt;Magic numbers and unclear names (e.g., &lt;code&gt;msg[:160]&lt;/code&gt;). These require simple renames or constants. &lt;strong&gt;Patterns are never needed here.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Level 2: Structural
&lt;/h3&gt;

&lt;p&gt;Duplicated logic or 200-line methods. We fix these by extracting private methods. We only introduce patterns &lt;strong&gt;if the logic is guaranteed to grow&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Level 3: Architectural
&lt;/h3&gt;

&lt;p&gt;The "God Class" that does everything. This is where "Strategy Spells" (design patterns) are justified — &lt;strong&gt;but only if the business context allows for the added complexity&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Solution: "Ask First, Code Later"
&lt;/h2&gt;

&lt;p&gt;The secret to clean code in 2026 isn't a better prompt; it's a better workflow. The methodology uses three composable workflows to inject human judgment into the machine:&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%2Fb9x0xcdvs4tycua4ng5u.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%2Fb9x0xcdvs4tycua4ng5u.png" alt=" " width="800" height="753"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Fig. 2 — Human-Guided Agentic Refactoring Workflow (Cursor · Windsurf · GitHub Copilot · Antigravity · any agentic IDE)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Interview (&lt;code&gt;/refactor-interview&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Before touching a single line of code, the AI must ask &lt;strong&gt;6 strategic questions&lt;/strong&gt;. How big is the team? Is the logic stable? If you are a team of three and the logic won't change, the AI is explicitly forbidden from using complex patterns like Strategy or ABC interfaces. We turn advice into hard constraints.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;About the team:&lt;/strong&gt; How many people work on this file? Is it in production?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;About logic stability:&lt;/strong&gt; Will the conditions or cases change? Is this logic duplicated elsewhere?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;About technical requirements:&lt;/strong&gt; Does this need unit testing in isolation? Any non-functional constraints?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. The Strategic Scan (&lt;code&gt;/refactor-analyze&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Once context is set, the AI scans the file. It doesn't just list duplications; it assigns &lt;strong&gt;Impact Scores (1–3)&lt;/strong&gt; and maps smell dependencies. It identifies the "root cause" so we don't fix symptoms while leaving the real disaster behind.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Smell&lt;/th&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;th&gt;Impact&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Magic number &lt;code&gt;160&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;L1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Replace with &lt;code&gt;SMS_CHAR_LIMIT&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unclear parameter &lt;code&gt;u&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;L1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Rename to &lt;code&gt;user&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structural duplication&lt;/td&gt;
&lt;td&gt;L2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Branches repeat the same pattern&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;God Class&lt;/td&gt;
&lt;td&gt;L3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Does 5 different things&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3. Constrained Execution (&lt;code&gt;/refactor-execute&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;The final step is "Controlled Execution." The AI proposes a &lt;strong&gt;3–5 step plan&lt;/strong&gt; with risk estimates. It shows step-by-step diffs and waits for human approval and "green tests" before proceeding. This eliminates the "Black Box" and ensures the AI remains a partner, not a rogue agent.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Every pattern introduced requires a comment in the code:&lt;/em&gt;&lt;/p&gt;


&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Pattern: [name] — justification: [specific reason from the interview]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Conclusion: You Are the Pilot
&lt;/h2&gt;

&lt;p&gt;When we compared a "Naive AI" (no context) with an "Interviewed AI" (with context) on the same messy file, the result was undeniable:&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%2Fk5aqa3zq7qlpoabfrydg.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%2Fk5aqa3zq7qlpoabfrydg.png" alt=" " width="800" height="424"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Fig. 3 — Naive AI vs Interviewed AI: same file, same tests, very different outcomes&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;300 lines of over-engineered complexity vs. &lt;strong&gt;180 lines of clean, maintainable code&lt;/strong&gt;. Both passed the tests, but only one is sustainable for a human team.&lt;/p&gt;

&lt;p&gt;In the age of AI, your value as a Senior Developer has shifted. It is no longer about the speed of your typing, but the &lt;strong&gt;quality of your judgment&lt;/strong&gt;. AI is the engine, but &lt;strong&gt;you are the Pilot&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Remember: Ask first, code later.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;Maurizio Argoneto is CTO at Publisys Spa and AWS Community Hero&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>codequality</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
