<?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: Okello Odhiambo</title>
    <description>The latest articles on DEV Community by Okello Odhiambo (@okelloodhiambo0).</description>
    <link>https://dev.to/okelloodhiambo0</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%2F3816211%2Fac652f13-cb10-4d26-9269-373df889f7d9.jpg</url>
      <title>DEV Community: Okello Odhiambo</title>
      <link>https://dev.to/okelloodhiambo0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/okelloodhiambo0"/>
    <language>en</language>
    <item>
      <title>AI Can Write the Code. I Still Need to Understand the System.</title>
      <dc:creator>Okello Odhiambo</dc:creator>
      <pubDate>Fri, 18 Sep 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/okelloodhiambo0/ai-can-write-the-code-i-still-need-to-understand-the-system-p4o</link>
      <guid>https://dev.to/okelloodhiambo0/ai-can-write-the-code-i-still-need-to-understand-the-system-p4o</guid>
      <description>&lt;p&gt;This is the final part of a three-part reflection on what I am learning about software engineering at Zone01 Kisumu.&lt;/p&gt;

&lt;p&gt;The first part was about moving beyond "the code works."&lt;/p&gt;

&lt;p&gt;The second was about architecture and understanding what our technical decisions become as systems grow.&lt;/p&gt;

&lt;p&gt;This final part is about the thing sitting beside almost every developer conversation today:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I use AI.&lt;/p&gt;

&lt;p&gt;I find it useful.&lt;/p&gt;

&lt;p&gt;And precisely because it is useful, I think developers need to become much clearer about what our actual job is.&lt;/p&gt;

&lt;h2&gt;
  
  
  There is little value in pretending AI cannot code
&lt;/h2&gt;

&lt;p&gt;It can.&lt;/p&gt;

&lt;p&gt;Sometimes very well.&lt;/p&gt;

&lt;p&gt;Ask for a function that sorts a collection.&lt;/p&gt;

&lt;p&gt;Done.&lt;/p&gt;

&lt;p&gt;Ask for an API endpoint.&lt;/p&gt;

&lt;p&gt;Done.&lt;/p&gt;

&lt;p&gt;Ask for a React component.&lt;/p&gt;

&lt;p&gt;Done.&lt;/p&gt;

&lt;p&gt;Ask for SQL migrations, tests, Docker files, validation logic or a Python script.&lt;/p&gt;

&lt;p&gt;Often, done.&lt;/p&gt;

&lt;p&gt;It can also explain unfamiliar code, find mistakes, propose refactors and help investigate errors.&lt;/p&gt;

&lt;p&gt;Pretending otherwise doesn't prepare me for the industry I am entering.&lt;/p&gt;

&lt;p&gt;But neither does handing every problem to AI and assuming that receiving code means the problem has been solved.&lt;/p&gt;

&lt;p&gt;Those are two extremes.&lt;/p&gt;

&lt;p&gt;My experience at Zone01 Kisumu is pushing me towards something between them:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use the tools. Understand the work.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A generated solution still creates responsibility
&lt;/h2&gt;

&lt;p&gt;Imagine I am building an application that collects personal information.&lt;/p&gt;

&lt;p&gt;Users upload profile pictures and identification documents.&lt;/p&gt;

&lt;p&gt;The application also accepts payments.&lt;/p&gt;

&lt;p&gt;I ask AI to implement file uploads.&lt;/p&gt;

&lt;p&gt;It does.&lt;/p&gt;

&lt;p&gt;I ask it to integrate payments.&lt;/p&gt;

&lt;p&gt;It does.&lt;/p&gt;

&lt;p&gt;I ask for authentication.&lt;/p&gt;

&lt;p&gt;It does.&lt;/p&gt;

&lt;p&gt;Now I have several thousand lines of code and a functioning application.&lt;/p&gt;

&lt;p&gt;But I still need answers.&lt;/p&gt;

&lt;p&gt;Where are the ID documents stored?&lt;/p&gt;

&lt;p&gt;Are they publicly accessible?&lt;/p&gt;

&lt;p&gt;Can User A request User B's document?&lt;/p&gt;

&lt;p&gt;Are uploaded files validated on the server?&lt;/p&gt;

&lt;p&gt;Where are payment credentials stored?&lt;/p&gt;

&lt;p&gt;Does the application trust payment status coming from the browser?&lt;/p&gt;

&lt;p&gt;How are payment callbacks verified?&lt;/p&gt;

&lt;p&gt;Are passwords hashed correctly?&lt;/p&gt;

&lt;p&gt;Can a user change their role by modifying an API request?&lt;/p&gt;

&lt;p&gt;What information is written into logs?&lt;/p&gt;

&lt;p&gt;What happens when the payment provider is unavailable?&lt;/p&gt;

&lt;p&gt;What happens when the same webhook arrives twice?&lt;/p&gt;

&lt;p&gt;AI's ability to generate the implementation doesn't transfer responsibility for those answers.&lt;/p&gt;

&lt;p&gt;The system is still ours.&lt;/p&gt;

&lt;h2&gt;
  
  
  This is changing how I define a good developer
&lt;/h2&gt;

&lt;p&gt;If you asked me earlier in my learning journey what makes someone a strong developer, I probably would have talked mainly about programming ability.&lt;/p&gt;

&lt;p&gt;How quickly can they solve a problem?&lt;/p&gt;

&lt;p&gt;How many languages do they know?&lt;/p&gt;

&lt;p&gt;Can they build the feature?&lt;/p&gt;

&lt;p&gt;Those things still matter.&lt;/p&gt;

&lt;p&gt;But my list is getting longer.&lt;/p&gt;

&lt;p&gt;Can they understand a problem before implementing it?&lt;/p&gt;

&lt;p&gt;Can they read unfamiliar code?&lt;/p&gt;

&lt;p&gt;Can they explain why something was designed a particular way?&lt;/p&gt;

&lt;p&gt;Can they recognize when an abstraction is unnecessary?&lt;/p&gt;

&lt;p&gt;Can they identify security assumptions?&lt;/p&gt;

&lt;p&gt;Can they debug a system rather than just a function?&lt;/p&gt;

&lt;p&gt;Can they communicate trade-offs?&lt;/p&gt;

&lt;p&gt;Can they review someone else's solution fairly?&lt;/p&gt;

&lt;p&gt;Can they change their mind when another approach is better?&lt;/p&gt;

&lt;p&gt;Can they determine when AI-generated code is wrong even when it looks convincing?&lt;/p&gt;

&lt;p&gt;Those skills are harder to demonstrate with a single code snippet.&lt;/p&gt;

&lt;p&gt;They are also becoming difficult for me to ignore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Peer-to-peer learning feels strangely appropriate for the AI era
&lt;/h2&gt;

&lt;p&gt;There is something interesting about learning software engineering through a peer-to-peer model at this particular moment.&lt;/p&gt;

&lt;p&gt;When knowledge is immediately available through search engines, documentation and AI, the challenge isn't always obtaining an answer.&lt;/p&gt;

&lt;p&gt;The challenge is understanding it.&lt;/p&gt;

&lt;p&gt;When a peer reviews my project, saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"AI gave me this code."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;doesn't answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Why does this work?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And it certainly doesn't answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Why did you choose this approach?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That pressure to explain is valuable.&lt;/p&gt;

&lt;p&gt;Teaching another person exposes gaps in my own understanding.&lt;/p&gt;

&lt;p&gt;Reviewing another person's implementation exposes me to decisions I wouldn't have made.&lt;/p&gt;

&lt;p&gt;Defending my own decisions forces me to separate preference from reasoning.&lt;/p&gt;

&lt;p&gt;Sometimes a peer's five-minute question teaches me more than another hour of adding code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning multiple languages has reinforced this
&lt;/h2&gt;

&lt;p&gt;At Zone01 Kisumu, working across Go, Python and JavaScript has also helped separate programming from software engineering in my mind.&lt;/p&gt;

&lt;p&gt;The languages approach problems differently.&lt;/p&gt;

&lt;p&gt;Go can make me think carefully about explicit error handling and package boundaries.&lt;/p&gt;

&lt;p&gt;Python can let me explore an idea with remarkably little ceremony.&lt;/p&gt;

&lt;p&gt;JavaScript puts me close to asynchronous behaviour, browser interactions and the realities of client-server applications.&lt;/p&gt;

&lt;p&gt;But after spending enough time with them, something becomes obvious.&lt;/p&gt;

&lt;p&gt;The languages change.&lt;/p&gt;

&lt;p&gt;The important questions survive.&lt;/p&gt;

&lt;p&gt;How should this data be represented?&lt;/p&gt;

&lt;p&gt;Who owns this state?&lt;/p&gt;

&lt;p&gt;Where should this responsibility live?&lt;/p&gt;

&lt;p&gt;What happens when this operation fails?&lt;/p&gt;

&lt;p&gt;How do I test this?&lt;/p&gt;

&lt;p&gt;What does this component need to know?&lt;/p&gt;

&lt;p&gt;How does this system communicate with another system?&lt;/p&gt;

&lt;p&gt;What should I trust?&lt;/p&gt;

&lt;p&gt;What should I never trust?&lt;/p&gt;

&lt;p&gt;Those aren't Go questions.&lt;/p&gt;

&lt;p&gt;They aren't Python questions.&lt;/p&gt;

&lt;p&gt;They aren't JavaScript questions.&lt;/p&gt;

&lt;p&gt;They are engineering questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI has made syntax cheaper
&lt;/h2&gt;

&lt;p&gt;I think this is one of the biggest changes we are experiencing.&lt;/p&gt;

&lt;p&gt;Syntax used to represent a significant portion of the friction between an idea and working software.&lt;/p&gt;

&lt;p&gt;AI is reducing that friction.&lt;/p&gt;

&lt;p&gt;That is good.&lt;/p&gt;

&lt;p&gt;But when one resource becomes cheaper, other resources become more important.&lt;/p&gt;

&lt;p&gt;Judgment becomes more important.&lt;/p&gt;

&lt;p&gt;Context becomes more important.&lt;/p&gt;

&lt;p&gt;Problem definition becomes more important.&lt;/p&gt;

&lt;p&gt;Architecture becomes more important.&lt;/p&gt;

&lt;p&gt;Verification becomes more important.&lt;/p&gt;

&lt;p&gt;Security becomes more important.&lt;/p&gt;

&lt;p&gt;Communication becomes more important.&lt;/p&gt;

&lt;p&gt;Understanding becomes more important.&lt;/p&gt;

&lt;p&gt;If AI gives me 500 lines of code in thirty seconds, I haven't necessarily saved time if I spend the next two days discovering that the underlying design was wrong.&lt;/p&gt;

&lt;p&gt;Generating code quickly and building the right system are different optimizations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompting isn't a replacement for understanding
&lt;/h2&gt;

&lt;p&gt;There is a tendency to frame prompting itself as the new programming.&lt;/p&gt;

&lt;p&gt;I think that misses something.&lt;/p&gt;

&lt;p&gt;A precise prompt can absolutely improve the output.&lt;/p&gt;

&lt;p&gt;But where does the precision come from?&lt;/p&gt;

&lt;p&gt;Suppose I tell an AI:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build a secure REST API.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Compare that with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The endpoint requires authentication. A user can access only resources they own. Validate the request server-side, reject unknown fields, enforce a 5 MB upload limit, allow only specific MIME types, avoid exposing storage paths, rate-limit requests and return consistent errors without leaking internal details.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The second prompt is better.&lt;/p&gt;

&lt;p&gt;But the improvement didn't come from learning magical words for talking to AI.&lt;/p&gt;

&lt;p&gt;It came from understanding the engineering problem.&lt;/p&gt;

&lt;p&gt;The quality of what I ask AI to build is constrained by what I know to ask about.&lt;/p&gt;

&lt;p&gt;And the quality of what I accept is constrained by what I know how to verify.&lt;/p&gt;

&lt;p&gt;That makes fundamentals more useful to me, not less.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sometimes the best use of AI is disagreement
&lt;/h2&gt;

&lt;p&gt;One habit I am trying to develop is not treating AI as the final authority.&lt;/p&gt;

&lt;p&gt;Instead of only asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Build this."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I can ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What can fail in this design?"&lt;/p&gt;

&lt;p&gt;"Give me three alternatives."&lt;/p&gt;

&lt;p&gt;"What assumptions am I making?"&lt;/p&gt;

&lt;p&gt;"Attack this architecture."&lt;/p&gt;

&lt;p&gt;"What security issues should I test?"&lt;/p&gt;

&lt;p&gt;"Explain why this abstraction is necessary."&lt;/p&gt;

&lt;p&gt;"What would you remove?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then I still have to evaluate the answers.&lt;/p&gt;

&lt;p&gt;That feels much closer to engineering than simply accepting generated code.&lt;/p&gt;

&lt;p&gt;AI becomes a collaborator in the thinking process rather than a machine that finishes the thinking for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The debugger still needs a human question
&lt;/h2&gt;

&lt;p&gt;Something I keep encountering while learning is that debugging rarely begins with knowing the answer.&lt;/p&gt;

&lt;p&gt;It begins with forming the right question.&lt;/p&gt;

&lt;p&gt;Is the frontend sending the wrong data?&lt;/p&gt;

&lt;p&gt;Is the API rejecting it?&lt;/p&gt;

&lt;p&gt;Did authentication fail?&lt;/p&gt;

&lt;p&gt;Did the database operation execute?&lt;/p&gt;

&lt;p&gt;Is the state stale?&lt;/p&gt;

&lt;p&gt;Is this a race condition?&lt;/p&gt;

&lt;p&gt;Is my assumption about the input wrong?&lt;/p&gt;

&lt;p&gt;AI can help investigate each possibility.&lt;/p&gt;

&lt;p&gt;But someone needs a mental model of the system strong enough to know where to look.&lt;/p&gt;

&lt;p&gt;Without that model, debugging becomes repeatedly pasting errors into a chat window and hoping the next suggestion works.&lt;/p&gt;

&lt;p&gt;Sometimes it does.&lt;/p&gt;

&lt;p&gt;Sometimes it creates the next error.&lt;/p&gt;

&lt;p&gt;Understanding lets me tell the difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Software engineering is also communication
&lt;/h2&gt;

&lt;p&gt;This may be the least glamorous part.&lt;/p&gt;

&lt;p&gt;Software is built by people.&lt;/p&gt;

&lt;p&gt;Requirements come from people.&lt;/p&gt;

&lt;p&gt;Users are people.&lt;/p&gt;

&lt;p&gt;Designers, engineers, testers, managers and clients all see different parts of the problem.&lt;/p&gt;

&lt;p&gt;Being able to explain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Here's the problem.

Here are our constraints.

Here are the options.

Here's what this option gives us.

Here's what it costs us.

Here's what could go wrong.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is an engineering skill.&lt;/p&gt;

&lt;p&gt;Our peer-to-peer environment keeps reinforcing this because learning doesn't happen entirely in isolation.&lt;/p&gt;

&lt;p&gt;Sometimes I am receiving help.&lt;/p&gt;

&lt;p&gt;Sometimes I am providing it.&lt;/p&gt;

&lt;p&gt;Sometimes we are both staring at the same bug wondering what we've missed.&lt;/p&gt;

&lt;p&gt;That process develops something a code generator cannot simply hand me: experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  I don't know exactly what software engineering will look like in five years
&lt;/h2&gt;

&lt;p&gt;I don't think anybody does.&lt;/p&gt;

&lt;p&gt;AI capability will continue changing.&lt;/p&gt;

&lt;p&gt;The tools we use today will change.&lt;/p&gt;

&lt;p&gt;Some tasks that currently take hours will probably become nearly instantaneous.&lt;/p&gt;

&lt;p&gt;Some roles will change with them.&lt;/p&gt;

&lt;p&gt;So I don't want to build my identity around being the person who can type code faster than a machine.&lt;/p&gt;

&lt;p&gt;That competition doesn't interest me.&lt;/p&gt;

&lt;p&gt;I want to become the engineer who understands what needs to be built.&lt;/p&gt;

&lt;p&gt;Who can inspect what was generated.&lt;/p&gt;

&lt;p&gt;Who can recognize when something that works shouldn't be deployed.&lt;/p&gt;

&lt;p&gt;Who understands the data moving through the system.&lt;/p&gt;

&lt;p&gt;Who can reason about failure.&lt;/p&gt;

&lt;p&gt;Who can collaborate with other engineers.&lt;/p&gt;

&lt;p&gt;Who can explain technical decisions.&lt;/p&gt;

&lt;p&gt;Who can learn an unfamiliar technology when the problem requires it.&lt;/p&gt;

&lt;p&gt;And, importantly, who knows when they don't understand something yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  My biggest lesson so far
&lt;/h2&gt;

&lt;p&gt;My journey at Zone01 Kisumu is still ongoing.&lt;/p&gt;

&lt;p&gt;I am still learning Go.&lt;/p&gt;

&lt;p&gt;Still working through Python.&lt;/p&gt;

&lt;p&gt;Still improving my JavaScript.&lt;/p&gt;

&lt;p&gt;Still debugging things that seemed obvious five minutes earlier.&lt;/p&gt;

&lt;p&gt;Still making decisions I later realize could have been better.&lt;/p&gt;

&lt;p&gt;But perhaps that is exactly the point.&lt;/p&gt;

&lt;p&gt;I came into this journey wanting to become better at writing code.&lt;/p&gt;

&lt;p&gt;I still do.&lt;/p&gt;

&lt;p&gt;What has changed is my understanding of what sits around the code.&lt;/p&gt;

&lt;p&gt;Architecture.&lt;/p&gt;

&lt;p&gt;Data.&lt;/p&gt;

&lt;p&gt;Security.&lt;/p&gt;

&lt;p&gt;Testing.&lt;/p&gt;

&lt;p&gt;Trade-offs.&lt;/p&gt;

&lt;p&gt;Communication.&lt;/p&gt;

&lt;p&gt;Failure.&lt;/p&gt;

&lt;p&gt;Users.&lt;/p&gt;

&lt;p&gt;Other developers.&lt;/p&gt;

&lt;p&gt;And now AI.&lt;/p&gt;

&lt;p&gt;The code matters.&lt;/p&gt;

&lt;p&gt;But the decisions behind it matter longer.&lt;/p&gt;

&lt;p&gt;AI can help me write the function.&lt;/p&gt;

&lt;p&gt;My responsibility is understanding what happens when that function becomes part of a real system used by real people.&lt;/p&gt;

&lt;p&gt;That is the kind of software engineer I am learning to become.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Part 3 of 3 — Learning Software Engineering in the Age of AI&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>architecture</category>
    </item>
    <item>
      <title>The Code Worked. Then I Started Asking What Happens Next.</title>
      <dc:creator>Okello Odhiambo</dc:creator>
      <pubDate>Thu, 17 Sep 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/okelloodhiambo0/the-code-worked-then-i-started-asking-what-happens-next-1ld4</link>
      <guid>https://dev.to/okelloodhiambo0/the-code-worked-then-i-started-asking-what-happens-next-1ld4</guid>
      <description>&lt;h1&gt;
  
  
  The Code Worked. Then I Started Asking What Happens Next.
&lt;/h1&gt;

&lt;p&gt;In the first part of this series, I wrote about a change taking place in how I approach software development at Zone01 Kisumu.&lt;/p&gt;

&lt;p&gt;I am becoming less satisfied with knowing that code works.&lt;/p&gt;

&lt;p&gt;I want to understand what happens around the code.&lt;/p&gt;

&lt;p&gt;That has pushed me towards architecture.&lt;/p&gt;

&lt;p&gt;For a long time, "software architecture" sounded like something that happened much later in a developer's career.&lt;/p&gt;

&lt;p&gt;I imagined enormous system diagrams, microservices, Kubernetes clusters and people with "Architect" in their job titles deciding where everything should go.&lt;/p&gt;

&lt;p&gt;My experience with projects is giving me a much more practical definition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture is what your decisions become when the project grows.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Every small decision leaves a footprint
&lt;/h2&gt;

&lt;p&gt;Imagine I need user information.&lt;/p&gt;

&lt;p&gt;The fastest solution might be to fetch it directly inside whatever component currently needs it.&lt;/p&gt;

&lt;p&gt;Then another component needs it.&lt;/p&gt;

&lt;p&gt;Then another.&lt;/p&gt;

&lt;p&gt;Soon, three parts of the application fetch the same information differently.&lt;/p&gt;

&lt;p&gt;One handles errors.&lt;/p&gt;

&lt;p&gt;One doesn't.&lt;/p&gt;

&lt;p&gt;One caches the result.&lt;/p&gt;

&lt;p&gt;One expects a slightly different response.&lt;/p&gt;

&lt;p&gt;None of those individual decisions seemed architectural when they were made.&lt;/p&gt;

&lt;p&gt;Together, they have created an architecture.&lt;/p&gt;

&lt;p&gt;This has been an important realization for me.&lt;/p&gt;

&lt;p&gt;We don't avoid architecture by refusing to think about it.&lt;/p&gt;

&lt;p&gt;We simply end up with architecture we didn't deliberately choose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the problem, not the technology
&lt;/h2&gt;

&lt;p&gt;One temptation I have noticed in software development is beginning with technology.&lt;/p&gt;

&lt;p&gt;"I'll use React."&lt;/p&gt;

&lt;p&gt;"I'll use PostgreSQL."&lt;/p&gt;

&lt;p&gt;"I'll use microservices."&lt;/p&gt;

&lt;p&gt;"I'll add Redis."&lt;/p&gt;

&lt;p&gt;"I'll containerize everything."&lt;/p&gt;

&lt;p&gt;But those statements don't explain the problem.&lt;/p&gt;

&lt;p&gt;The better questions come first.&lt;/p&gt;

&lt;p&gt;What am I building?&lt;/p&gt;

&lt;p&gt;Who will use it?&lt;/p&gt;

&lt;p&gt;What information does it handle?&lt;/p&gt;

&lt;p&gt;How frequently will that information change?&lt;/p&gt;

&lt;p&gt;Which operations are critical?&lt;/p&gt;

&lt;p&gt;What happens if a service becomes unavailable?&lt;/p&gt;

&lt;p&gt;Does this actually need real-time communication?&lt;/p&gt;

&lt;p&gt;What security boundaries exist?&lt;/p&gt;

&lt;p&gt;What is the simplest design capable of meeting those requirements?&lt;/p&gt;

&lt;p&gt;Only then do technology choices become meaningful.&lt;/p&gt;

&lt;p&gt;If the problem requires structured relationships and transactions, that tells me something about storage.&lt;/p&gt;

&lt;p&gt;If users are uploading large files, that tells me something different.&lt;/p&gt;

&lt;p&gt;If a process can take several minutes, perhaps it shouldn't hold an HTTP request open.&lt;/p&gt;

&lt;p&gt;Architecture starts with constraints.&lt;/p&gt;

&lt;p&gt;Technology responds to them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Following the data has helped me understand systems
&lt;/h2&gt;

&lt;p&gt;One technique I increasingly find useful is tracing a piece of data from beginning to end.&lt;/p&gt;

&lt;p&gt;Take something ordinary:&lt;/p&gt;

&lt;p&gt;A user changes their profile picture.&lt;/p&gt;

&lt;p&gt;It looks like one feature.&lt;/p&gt;

&lt;p&gt;But follow the data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User selects image
        ↓
Browser
        ↓
HTTP request
        ↓
Authentication
        ↓
File validation
        ↓
Storage
        ↓
Database reference
        ↓
API response
        ↓
Updated interface
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the questions become clearer.&lt;/p&gt;

&lt;p&gt;What file types are accepted?&lt;/p&gt;

&lt;p&gt;What is the maximum size?&lt;/p&gt;

&lt;p&gt;Do we trust the extension?&lt;/p&gt;

&lt;p&gt;Where is the actual image stored?&lt;/p&gt;

&lt;p&gt;Is it public or private?&lt;/p&gt;

&lt;p&gt;What happens to the previous image?&lt;/p&gt;

&lt;p&gt;Who can retrieve it?&lt;/p&gt;

&lt;p&gt;What happens if storage succeeds but updating the database fails?&lt;/p&gt;

&lt;p&gt;What happens if the user loses their connection?&lt;/p&gt;

&lt;p&gt;The diagram isn't the architecture.&lt;/p&gt;

&lt;p&gt;The decisions behind every arrow are.&lt;/p&gt;

&lt;h2&gt;
  
  
  Payments make the lesson even clearer
&lt;/h2&gt;

&lt;p&gt;Suppose the application accepts online payments.&lt;/p&gt;

&lt;p&gt;From the user's perspective:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Click Pay → Confirm → Success
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the system's perspective:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
   ↓
Application API
   ↓
Payment provider
   ↓
External payment network
   ↓
Payment confirmation
   ↓
Webhook
   ↓
Verification
   ↓
Database
   ↓
Order / Subscription
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now architecture directly affects money.&lt;/p&gt;

&lt;p&gt;What is the source of truth for whether somebody paid?&lt;/p&gt;

&lt;p&gt;The browser?&lt;/p&gt;

&lt;p&gt;Definitely not.&lt;/p&gt;

&lt;p&gt;The payment provider?&lt;/p&gt;

&lt;p&gt;How do we verify its callback?&lt;/p&gt;

&lt;p&gt;What if the callback arrives twice?&lt;/p&gt;

&lt;p&gt;What if payment succeeds but our server is temporarily unavailable?&lt;/p&gt;

&lt;p&gt;What if the amount received differs from the amount expected?&lt;/p&gt;

&lt;p&gt;What if two requests try to update the same transaction?&lt;/p&gt;

&lt;p&gt;These aren't syntax questions.&lt;/p&gt;

&lt;p&gt;I could ask AI to generate a payment endpoint and receive one almost immediately.&lt;/p&gt;

&lt;p&gt;The difficult part is deciding whether I should trust what it generated.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI makes architecture more important, not less
&lt;/h2&gt;

&lt;p&gt;AI has reduced the friction involved in creating software.&lt;/p&gt;

&lt;p&gt;That is powerful.&lt;/p&gt;

&lt;p&gt;It also means we can create bad architecture faster.&lt;/p&gt;

&lt;p&gt;I can ask for:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add Redis caching.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And get Redis.&lt;/p&gt;

&lt;p&gt;But should this system have Redis?&lt;/p&gt;

&lt;p&gt;I can say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Convert this application to microservices.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And receive a directory containing several services.&lt;/p&gt;

&lt;p&gt;But what problem did microservices solve?&lt;/p&gt;

&lt;p&gt;I can request:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make this scalable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And receive queues, containers, caching layers and abstractions.&lt;/p&gt;

&lt;p&gt;But complexity isn't scalability.&lt;/p&gt;

&lt;p&gt;Sometimes the better architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend
    ↓
Backend
    ↓
PostgreSQL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it.&lt;/p&gt;

&lt;p&gt;A system doesn't become professional because its diagram contains more boxes.&lt;/p&gt;

&lt;p&gt;Every additional component creates something else to deploy, secure, observe, update, debug and pay for.&lt;/p&gt;

&lt;p&gt;One lesson I am carrying with me is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complexity should have to justify its existence.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Separation of concerns finally started making practical sense
&lt;/h2&gt;

&lt;p&gt;"Separation of concerns" is one of those phrases developers encounter repeatedly.&lt;/p&gt;

&lt;p&gt;It made much more sense once I started seeing what happens when we ignore it.&lt;/p&gt;

&lt;p&gt;Suppose an HTTP handler:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validates input,&lt;/li&gt;
&lt;li&gt;checks permissions,&lt;/li&gt;
&lt;li&gt;calculates prices,&lt;/li&gt;
&lt;li&gt;queries the database,&lt;/li&gt;
&lt;li&gt;sends emails,&lt;/li&gt;
&lt;li&gt;uploads files,&lt;/li&gt;
&lt;li&gt;formats responses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Technically, it can work.&lt;/p&gt;

&lt;p&gt;But now changing one business rule means touching the same code responsible for several unrelated things.&lt;/p&gt;

&lt;p&gt;Testing becomes difficult.&lt;/p&gt;

&lt;p&gt;Reusing logic becomes difficult.&lt;/p&gt;

&lt;p&gt;Understanding failure becomes difficult.&lt;/p&gt;

&lt;p&gt;The better question becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What should this part of the system know?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A route should know about HTTP.&lt;/p&gt;

&lt;p&gt;Business logic should know about business rules.&lt;/p&gt;

&lt;p&gt;A repository should know how data is persisted.&lt;/p&gt;

&lt;p&gt;A payment integration should know how to communicate with the payment provider.&lt;/p&gt;

&lt;p&gt;That separation isn't about making the folder structure look impressive.&lt;/p&gt;

&lt;p&gt;It creates boundaries around change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Go has made boundaries visible to me
&lt;/h2&gt;

&lt;p&gt;Go has been useful here because packages force me to think about what belongs together.&lt;/p&gt;

&lt;p&gt;If everything imports everything else, something is probably wrong.&lt;/p&gt;

&lt;p&gt;If changing one package causes unrelated parts of the application to break, the boundaries probably need reconsideration.&lt;/p&gt;

&lt;p&gt;If a function requires ten dependencies just to do one thing, maybe it is doing more than one thing.&lt;/p&gt;

&lt;p&gt;Python and JavaScript present the same architectural questions in different forms.&lt;/p&gt;

&lt;p&gt;That is one benefit of learning several languages.&lt;/p&gt;

&lt;p&gt;The syntax changes.&lt;/p&gt;

&lt;p&gt;The underlying engineering problems keep returning.&lt;/p&gt;

&lt;p&gt;Data still needs boundaries.&lt;/p&gt;

&lt;p&gt;Errors still need handling.&lt;/p&gt;

&lt;p&gt;Dependencies still need management.&lt;/p&gt;

&lt;p&gt;Users still do unexpected things.&lt;/p&gt;

&lt;p&gt;Networks still fail.&lt;/p&gt;

&lt;p&gt;Databases still need consistency.&lt;/p&gt;

&lt;p&gt;Security still matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture is also about failure
&lt;/h2&gt;

&lt;p&gt;Something else has changed in my thinking.&lt;/p&gt;

&lt;p&gt;I used to design mainly around the successful path.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User submits form
→ Server processes it
→ Database saves it
→ Success
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now I try to spend more time on the arrows.&lt;/p&gt;

&lt;p&gt;What happens if validation fails?&lt;/p&gt;

&lt;p&gt;What happens if the database is unavailable?&lt;/p&gt;

&lt;p&gt;What if the request is repeated?&lt;/p&gt;

&lt;p&gt;What if only half of an operation succeeds?&lt;/p&gt;

&lt;p&gt;What if an external API times out?&lt;/p&gt;

&lt;p&gt;What if the user refreshes the page?&lt;/p&gt;

&lt;p&gt;What if somebody deliberately sends malformed data?&lt;/p&gt;

&lt;p&gt;The happy path shows that a feature can work.&lt;/p&gt;

&lt;p&gt;The failure paths tell me whether I have engineered it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maintainability means thinking about another human
&lt;/h2&gt;

&lt;p&gt;Architecture is often discussed in terms of machines:&lt;/p&gt;

&lt;p&gt;performance, memory, throughput, latency.&lt;/p&gt;

&lt;p&gt;But maintainability is largely about people.&lt;/p&gt;

&lt;p&gt;Could another developer understand this?&lt;/p&gt;

&lt;p&gt;Could someone safely change it?&lt;/p&gt;

&lt;p&gt;Does the naming reveal intent?&lt;/p&gt;

&lt;p&gt;Are the dependencies obvious?&lt;/p&gt;

&lt;p&gt;Can we test one part without starting the entire application?&lt;/p&gt;

&lt;p&gt;Can somebody joining the project understand how data moves through it?&lt;/p&gt;

&lt;p&gt;Peer-to-peer learning at Zone01 makes that very tangible.&lt;/p&gt;

&lt;p&gt;Code isn't only something I communicate to a computer.&lt;/p&gt;

&lt;p&gt;It is something I communicate to the next developer.&lt;/p&gt;

&lt;p&gt;Sometimes that developer is me three weeks later wondering why I made a particular decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Good architecture doesn't predict the future
&lt;/h2&gt;

&lt;p&gt;I no longer think architecture means anticipating every possible requirement.&lt;/p&gt;

&lt;p&gt;That can lead directly to overengineering.&lt;/p&gt;

&lt;p&gt;Instead, I am beginning to think about it as making today's decisions without unnecessarily trapping tomorrow's developer.&lt;/p&gt;

&lt;p&gt;Build what the project needs.&lt;/p&gt;

&lt;p&gt;Create clear boundaries.&lt;/p&gt;

&lt;p&gt;Keep responsibilities understandable.&lt;/p&gt;

&lt;p&gt;Protect important data.&lt;/p&gt;

&lt;p&gt;Test critical behaviour.&lt;/p&gt;

&lt;p&gt;Document decisions that aren't obvious.&lt;/p&gt;

&lt;p&gt;And leave room for the system to change.&lt;/p&gt;

&lt;p&gt;The objective isn't to build a system that never needs modification.&lt;/p&gt;

&lt;p&gt;Software that matters will change.&lt;/p&gt;

&lt;p&gt;The objective is to make change survivable.&lt;/p&gt;

&lt;p&gt;That raises the final question in this series.&lt;/p&gt;

&lt;p&gt;If AI can increasingly generate our components, endpoints, tests and even entire applications, where should developers invest their effort?&lt;/p&gt;

&lt;p&gt;For me, the answer is becoming clearer.&lt;/p&gt;

&lt;p&gt;Our value moves further upstream—from producing code to understanding problems, evaluating trade-offs and taking responsibility for the systems we put into the world.&lt;/p&gt;

&lt;p&gt;That is where I want to finish this series.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Part 2 of 3 — Learning Software Engineering in the Age of AI&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>architecture</category>
    </item>
    <item>
      <title>I Came to Learn How to Code. I’m Learning How to Think Like an Engineer.</title>
      <dc:creator>Okello Odhiambo</dc:creator>
      <pubDate>Wed, 16 Sep 2026 12:23:22 +0000</pubDate>
      <link>https://dev.to/okelloodhiambo0/i-came-to-learn-how-to-code-im-learning-how-to-think-like-an-engineer-22ep</link>
      <guid>https://dev.to/okelloodhiambo0/i-came-to-learn-how-to-code-im-learning-how-to-think-like-an-engineer-22ep</guid>
      <description>&lt;p&gt;When I started my learning journey at Zone01 Kisumu, a large part of my attention was naturally on code.&lt;/p&gt;

&lt;p&gt;How do I write this function?&lt;/p&gt;

&lt;p&gt;Why is this test failing?&lt;/p&gt;

&lt;p&gt;Why does this JavaScript behave differently from what I expected?&lt;/p&gt;

&lt;p&gt;How should I structure this Go package?&lt;/p&gt;

&lt;p&gt;Why is my Python solution producing the right output locally but failing the actual tests?&lt;/p&gt;

&lt;p&gt;Those questions still matter. But somewhere between debugging projects, reviewing other people's work, having my own work questioned by peers, and moving between Go, Python and JavaScript, I started noticing something.&lt;/p&gt;

&lt;p&gt;Writing code is only one part of software engineering.&lt;/p&gt;

&lt;p&gt;And in 2026, with AI capable of generating surprisingly good code in seconds, that distinction matters more than it probably ever has.&lt;/p&gt;

&lt;h2&gt;
  
  
  The question changed
&lt;/h2&gt;

&lt;p&gt;Early in my journey, completing a project often felt like reaching the point where:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;It works.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now I find myself asking a different set of questions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Why does it work?

What happens when it fails?

What happens when two users do this simultaneously?

Where does this data go?

Who should be allowed to access it?

How difficult will this be to change six months from now?

What happens when another developer inherits this code?

What assumptions did I make without noticing?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That change has probably been one of the most important parts of my experience at Zone01 Kisumu.&lt;/p&gt;

&lt;p&gt;We don't learn entirely through the familiar classroom arrangement where someone explains everything first and we reproduce it afterwards.&lt;/p&gt;

&lt;p&gt;A significant part of the experience is peer-to-peer.&lt;/p&gt;

&lt;p&gt;You build.&lt;/p&gt;

&lt;p&gt;You get stuck.&lt;/p&gt;

&lt;p&gt;You investigate.&lt;/p&gt;

&lt;p&gt;You ask someone.&lt;/p&gt;

&lt;p&gt;Someone asks you.&lt;/p&gt;

&lt;p&gt;You defend a decision.&lt;/p&gt;

&lt;p&gt;You discover that your explanation doesn't make as much sense aloud as it did in your head.&lt;/p&gt;

&lt;p&gt;You review somebody else's implementation and occasionally discover a better solution to a problem you thought you already understood.&lt;/p&gt;

&lt;p&gt;There is something uncomfortable but useful about that process.&lt;/p&gt;

&lt;p&gt;A compiler can tell me that my program is invalid.&lt;/p&gt;

&lt;p&gt;A test can tell me that my implementation produces the wrong result.&lt;/p&gt;

&lt;p&gt;A peer can ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why did you build it this way?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question reaches somewhere tests often don't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Go taught me to appreciate what isn't there
&lt;/h2&gt;

&lt;p&gt;Working with Go has been particularly interesting for me because the language doesn't seem interested in helping me hide complexity behind clever syntax.&lt;/p&gt;

&lt;p&gt;It keeps bringing me back to explicit decisions.&lt;/p&gt;

&lt;p&gt;What does this function need?&lt;/p&gt;

&lt;p&gt;What should it return?&lt;/p&gt;

&lt;p&gt;Where should this error be handled?&lt;/p&gt;

&lt;p&gt;What belongs in this package?&lt;/p&gt;

&lt;p&gt;What shouldn't this package know about?&lt;/p&gt;

&lt;p&gt;You can still write terrible Go. A language cannot save an engineer from poor decisions.&lt;/p&gt;

&lt;p&gt;But working with it has made me think more deliberately about boundaries.&lt;/p&gt;

&lt;p&gt;Consider something as ordinary as registering a user.&lt;/p&gt;

&lt;p&gt;At first glance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;RegisterUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Problem solved?&lt;/p&gt;

&lt;p&gt;Not really.&lt;/p&gt;

&lt;p&gt;Where is validation?&lt;/p&gt;

&lt;p&gt;What happens if the email already exists?&lt;/p&gt;

&lt;p&gt;Where is the password hashed?&lt;/p&gt;

&lt;p&gt;Should the database layer even receive a plaintext password?&lt;/p&gt;

&lt;p&gt;What should the caller receive if insertion fails?&lt;/p&gt;

&lt;p&gt;What should be logged?&lt;/p&gt;

&lt;p&gt;Which errors are safe to expose to the client?&lt;/p&gt;

&lt;p&gt;Suddenly a tiny function becomes a conversation about the system surrounding it.&lt;/p&gt;

&lt;p&gt;That is architecture beginning to appear.&lt;/p&gt;

&lt;p&gt;Not as boxes on a beautiful diagram, but as decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python showed me another side of the same problem
&lt;/h2&gt;

&lt;p&gt;Python feels different.&lt;/p&gt;

&lt;p&gt;It lets me express an idea quickly, which is extremely useful when exploring a problem.&lt;/p&gt;

&lt;p&gt;But that freedom creates another responsibility.&lt;/p&gt;

&lt;p&gt;Something being easy to write doesn't automatically make it well designed.&lt;/p&gt;

&lt;p&gt;A Python program can become difficult to reason about surprisingly quickly when responsibilities begin leaking into each other.&lt;/p&gt;

&lt;p&gt;Database operations appear inside route handlers.&lt;/p&gt;

&lt;p&gt;Validation gets repeated everywhere.&lt;/p&gt;

&lt;p&gt;Configuration becomes hardcoded.&lt;/p&gt;

&lt;p&gt;Business rules end up scattered across unrelated functions.&lt;/p&gt;

&lt;p&gt;Then the application grows.&lt;/p&gt;

&lt;p&gt;Suddenly changing one thing breaks three others.&lt;/p&gt;

&lt;p&gt;The lesson I have been taking from this is not that one language produces better architecture than another.&lt;/p&gt;

&lt;p&gt;It is that architecture begins before the framework.&lt;/p&gt;

&lt;p&gt;The language gives us tools.&lt;/p&gt;

&lt;p&gt;We decide what relationships those tools create.&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript made the boundaries impossible to ignore
&lt;/h2&gt;

&lt;p&gt;JavaScript has given me a different perspective because it has taken me closer to the browser, user interaction, asynchronous behaviour and the frontend/backend boundary.&lt;/p&gt;

&lt;p&gt;A button click can look ridiculously simple.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/profile&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But what happens after that request leaves the browser?&lt;/p&gt;

&lt;p&gt;Can the client be trusted?&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;Who validates the data?&lt;/p&gt;

&lt;p&gt;What happens when the network disappears halfway through?&lt;/p&gt;

&lt;p&gt;What happens if the request is sent twice?&lt;/p&gt;

&lt;p&gt;Can one user manipulate the request and update another user's profile?&lt;/p&gt;

&lt;p&gt;What if the server returns an error the interface wasn't expecting?&lt;/p&gt;

&lt;p&gt;The code responsible for making the request might be five lines.&lt;/p&gt;

&lt;p&gt;The engineering problem is much larger.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then AI entered the room
&lt;/h2&gt;

&lt;p&gt;This is where my learning journey has become particularly interesting.&lt;/p&gt;

&lt;p&gt;I am learning software development at a time when AI can produce code at a speed I cannot compete with.&lt;/p&gt;

&lt;p&gt;Give an AI system a sufficiently clear prompt and it can generate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;REST endpoints&lt;/li&gt;
&lt;li&gt;React components&lt;/li&gt;
&lt;li&gt;SQL queries&lt;/li&gt;
&lt;li&gt;authentication middleware&lt;/li&gt;
&lt;li&gt;unit tests&lt;/li&gt;
&lt;li&gt;Docker configurations&lt;/li&gt;
&lt;li&gt;data models&lt;/li&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sometimes within seconds.&lt;/p&gt;

&lt;p&gt;Initially, I think it is easy for a learner to see that and wonder:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What exactly am I training for?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But the more projects I work on, the less worried I become about competing with AI on typing code.&lt;/p&gt;

&lt;p&gt;Because typing code was never the whole job.&lt;/p&gt;

&lt;p&gt;Suppose I tell an AI:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build authentication for my application.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It can produce something that looks convincing.&lt;/p&gt;

&lt;p&gt;But I still need to know enough to ask:&lt;/p&gt;

&lt;p&gt;Why JWT?&lt;/p&gt;

&lt;p&gt;Where is the token stored?&lt;/p&gt;

&lt;p&gt;How does logout invalidate it?&lt;/p&gt;

&lt;p&gt;What happens when it expires?&lt;/p&gt;

&lt;p&gt;How are refresh tokens handled?&lt;/p&gt;

&lt;p&gt;Can a normal user access an administrator endpoint?&lt;/p&gt;

&lt;p&gt;Are passwords properly hashed?&lt;/p&gt;

&lt;p&gt;Can the login endpoint be brute-forced?&lt;/p&gt;

&lt;p&gt;What information leaks through error messages?&lt;/p&gt;

&lt;p&gt;What happens if the signing secret is exposed?&lt;/p&gt;

&lt;p&gt;AI can generate an implementation.&lt;/p&gt;

&lt;p&gt;Someone still has to understand the consequences of that implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working code can still be dangerous code
&lt;/h2&gt;

&lt;p&gt;This has changed the meaning of "working" for me.&lt;/p&gt;

&lt;p&gt;Imagine building an application where users upload their identification documents.&lt;/p&gt;

&lt;p&gt;The upload works.&lt;/p&gt;

&lt;p&gt;The image appears.&lt;/p&gt;

&lt;p&gt;The database saves the URL.&lt;/p&gt;

&lt;p&gt;The feature is complete.&lt;/p&gt;

&lt;p&gt;Except perhaps the generated URL is publicly accessible.&lt;/p&gt;

&lt;p&gt;Perhaps changing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/documents/184
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/documents/185
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;returns another person's document.&lt;/p&gt;

&lt;p&gt;The application works.&lt;/p&gt;

&lt;p&gt;The architecture doesn't.&lt;/p&gt;

&lt;p&gt;Or imagine an online payment flow.&lt;/p&gt;

&lt;p&gt;A payment screen appears.&lt;/p&gt;

&lt;p&gt;The user completes payment.&lt;/p&gt;

&lt;p&gt;The frontend receives:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"paymentSuccessful"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&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;p&gt;and activates the subscription.&lt;/p&gt;

&lt;p&gt;Again, everything appears to work.&lt;/p&gt;

&lt;p&gt;Until somebody discovers they can send that request themselves.&lt;/p&gt;

&lt;p&gt;The ability to generate the code for these features is useful.&lt;/p&gt;

&lt;p&gt;The ability to recognize why an apparently functioning implementation is unsafe is engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Peer learning makes this harder to fake
&lt;/h2&gt;

&lt;p&gt;One thing I appreciate about peer-to-peer learning is that understanding becomes visible very quickly.&lt;/p&gt;

&lt;p&gt;You can copy syntax.&lt;/p&gt;

&lt;p&gt;You can generate code.&lt;/p&gt;

&lt;p&gt;You can memorize an explanation.&lt;/p&gt;

&lt;p&gt;But when another developer starts asking why decisions were made, shallow understanding has nowhere to hide.&lt;/p&gt;

&lt;p&gt;Why this data structure?&lt;/p&gt;

&lt;p&gt;Why this endpoint?&lt;/p&gt;

&lt;p&gt;Why is this function responsible for both things?&lt;/p&gt;

&lt;p&gt;Why didn't you handle this error?&lt;/p&gt;

&lt;p&gt;What happens with an empty input?&lt;/p&gt;

&lt;p&gt;Why is this variable global?&lt;/p&gt;

&lt;p&gt;What happens at scale?&lt;/p&gt;

&lt;p&gt;Sometimes I have an answer.&lt;/p&gt;

&lt;p&gt;Sometimes I don't.&lt;/p&gt;

&lt;p&gt;The second situation is often where the real learning begins.&lt;/p&gt;

&lt;h2&gt;
  
  
  I don't think the future engineer writes less code
&lt;/h2&gt;

&lt;p&gt;I think the future engineer spends more time understanding what the code means.&lt;/p&gt;

&lt;p&gt;AI is changing the economics of producing software.&lt;/p&gt;

&lt;p&gt;The cost of generating 100 lines of code is collapsing.&lt;/p&gt;

&lt;p&gt;The cost of deploying the wrong 100 lines of code can still be enormous.&lt;/p&gt;

&lt;p&gt;That changes what I want to become good at.&lt;/p&gt;

&lt;p&gt;I still want to write good Go.&lt;/p&gt;

&lt;p&gt;I still want to understand Python deeply.&lt;/p&gt;

&lt;p&gt;I still want to become better at JavaScript.&lt;/p&gt;

&lt;p&gt;But I also want to understand systems well enough to look beyond the file currently open in my editor.&lt;/p&gt;

&lt;p&gt;Where does the data originate?&lt;/p&gt;

&lt;p&gt;Where does it travel?&lt;/p&gt;

&lt;p&gt;What trusts what?&lt;/p&gt;

&lt;p&gt;What can fail?&lt;/p&gt;

&lt;p&gt;What needs to scale?&lt;/p&gt;

&lt;p&gt;What should remain separate?&lt;/p&gt;

&lt;p&gt;What happens when requirements change?&lt;/p&gt;

&lt;p&gt;Those are becoming increasingly important questions in my learning journey.&lt;/p&gt;

&lt;p&gt;And they lead directly to another subject I once thought belonged mainly to senior engineers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;software architecture.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the next part of this series, I want to write about how my understanding of architecture is changing—from thinking of it as complicated diagrams and technology choices to seeing it as something much simpler:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;the collection of decisions that determine what happens when a project stops being small.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Part 1 of 3 — Learning Software Engineering in the Age of AI&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>VS Code Is Not Here to Replace You. It Is Here to Save You From the Boring Parts.</title>
      <dc:creator>Okello Odhiambo</dc:creator>
      <pubDate>Tue, 21 Jul 2026 08:29:19 +0000</pubDate>
      <link>https://dev.to/okelloodhiambo0/vs-code-is-not-here-to-replace-you-it-is-here-to-save-you-from-the-boring-parts-44pj</link>
      <guid>https://dev.to/okelloodhiambo0/vs-code-is-not-here-to-replace-you-it-is-here-to-save-you-from-the-boring-parts-44pj</guid>
      <description>&lt;p&gt;There is a joke that programmers spend only a small part of their day writing code. The rest is spent searching for a missing semicolon, wondering why yesterday's code suddenly stopped working, or asking the internet questions they are convinced someone else has already answered.&lt;/p&gt;

&lt;p&gt;The joke is funny because it is painfully true.&lt;/p&gt;

&lt;p&gt;Today, however, software development is changing. Artificial Intelligence (AI) has quietly moved from being something we only heard about in science fiction to becoming a practical assistant sitting inside one of the world's most popular programming tools: Visual Studio Code, better known as VS Code.&lt;/p&gt;

&lt;p&gt;The important word here is &lt;em&gt;assistant&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Contrary to what dramatic headlines often suggest, AI inside VS Code does not replace developers. It helps them work faster, make fewer mistakes and spend more time solving real problems instead of repeating routine tasks.&lt;/p&gt;

&lt;p&gt;For anyone who has never written a line of code, imagine hiring an experienced carpenter who never gets tired of answering questions, finding the right tool or reminding you that you forgot to measure before cutting a piece of wood. The carpenter does not build the house for you. He simply helps you avoid expensive mistakes.&lt;/p&gt;

&lt;p&gt;That is exactly what AI is becoming inside VS Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding VS Code Without the Technical Jargon&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine writing a newspaper article.&lt;/p&gt;

&lt;p&gt;You probably use Microsoft Word, Google Docs or another word processor. The software gives you a blank page where you type your story.&lt;/p&gt;

&lt;p&gt;VS Code plays a similar role for software developers.&lt;/p&gt;

&lt;p&gt;Instead of writing news articles, developers write computer instructions known as code. VS Code provides the workspace where those instructions are created, organised and edited.&lt;/p&gt;

&lt;p&gt;According to Microsoft, Visual Studio Code is a free source-code editor that supports hundreds of programming languages and runs on Windows, macOS and Linux. Since its public release in 2015, it has become one of the world's most widely used development environments because of its speed, flexibility and large ecosystem of extensions.&lt;/p&gt;

&lt;p&gt;Think of VS Code as an empty workshop.&lt;/p&gt;

&lt;p&gt;On its own, the workshop contains the basic tools.&lt;/p&gt;

&lt;p&gt;You can then add specialised equipment depending on the kind of work you want to do. These additions are called &lt;em&gt;extensions&lt;/em&gt;. One extension checks spelling in code. Another helps connect to databases. Yet another introduces AI capabilities that can explain code, generate suggestions and answer programming questions.&lt;/p&gt;

&lt;p&gt;The workshop remains the same.&lt;/p&gt;

&lt;p&gt;Only the tools become smarter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So Where Does AI Fit In?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine you are preparing chapati for the first time.&lt;/p&gt;

&lt;p&gt;You know the ingredients but are unsure about the measurements.&lt;/p&gt;

&lt;p&gt;Standing beside you is an experienced cook who quietly says,&lt;/p&gt;

&lt;p&gt;"Add a little more water."&lt;/p&gt;

&lt;p&gt;"The dough is too soft."&lt;/p&gt;

&lt;p&gt;"Reduce the heat."&lt;/p&gt;

&lt;p&gt;"You forgot the salt."&lt;/p&gt;

&lt;p&gt;That person is not cooking for you.&lt;/p&gt;

&lt;p&gt;They are guiding you.&lt;/p&gt;

&lt;p&gt;AI inside VS Code works in much the same way.&lt;/p&gt;

&lt;p&gt;As you write code, AI studies the context and predicts what you are likely trying to achieve. It can recommend the next few lines, explain unfamiliar code, suggest corrections and even generate simple functions from plain-language instructions.&lt;/p&gt;

&lt;p&gt;It is less like an autopilot and more like having a knowledgeable colleague who never complains when you ask the same question five times before lunch.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Real-World Situations Where AI Actually Helps&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Many people assume programmers spend their entire day creating brand-new software from scratch.&lt;/p&gt;

&lt;p&gt;Reality is far less glamorous.&lt;/p&gt;

&lt;p&gt;A surprising amount of software development involves fixing old code, understanding someone else's work and correcting tiny mistakes that somehow consume entire afternoons.&lt;/p&gt;

&lt;p&gt;Consider these everyday examples.&lt;/p&gt;

&lt;p&gt;A university student is building a final-year project but cannot remember the exact syntax for connecting to a database.&lt;/p&gt;

&lt;p&gt;Instead of opening ten browser tabs, the student asks the AI assistant inside VS Code, receives an explanation and continues working.&lt;/p&gt;

&lt;p&gt;A small business owner hires a freelance developer to create an inventory management system.&lt;/p&gt;

&lt;p&gt;The developer uses AI to generate repetitive database operations, freeing more time to focus on making the software easier for employees to use.&lt;/p&gt;

&lt;p&gt;A cybersecurity analyst notices unusual behaviour in a program.&lt;/p&gt;

&lt;p&gt;Instead of reading thousands of lines manually, the analyst asks AI to explain sections of the code and identify possible vulnerabilities.&lt;/p&gt;

&lt;p&gt;The final decisions still belong to the human expert.&lt;/p&gt;

&lt;p&gt;The AI simply reduces the amount of repetitive work.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;AI Is Brilliant—Until It Is Wrong&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Here is the uncomfortable truth.&lt;/p&gt;

&lt;p&gt;AI can confidently produce incorrect answers.&lt;/p&gt;

&lt;p&gt;Sometimes it invents information.&lt;/p&gt;

&lt;p&gt;Sometimes it misunderstands instructions.&lt;/p&gt;

&lt;p&gt;Sometimes it generates code that appears perfect but quietly introduces security risks.&lt;/p&gt;

&lt;p&gt;If that sounds familiar, it should.&lt;/p&gt;

&lt;p&gt;Think about GPS navigation.&lt;/p&gt;

&lt;p&gt;Most of us trust Google Maps.&lt;/p&gt;

&lt;p&gt;Yet almost everyone knows someone who has faithfully followed GPS directions into a dead end, a flooded road or the wrong destination altogether.&lt;/p&gt;

&lt;p&gt;The problem was never the map.&lt;/p&gt;

&lt;p&gt;The problem was assuming the map could never be wrong.&lt;/p&gt;

&lt;p&gt;AI deserves the same healthy skepticism.&lt;/p&gt;

&lt;p&gt;Its suggestions should be reviewed before being accepted.&lt;/p&gt;

&lt;p&gt;Experienced developers often say the fastest way to create a software bug is to copy code without understanding it.&lt;/p&gt;

&lt;p&gt;AI has not changed that rule.&lt;/p&gt;

&lt;p&gt;It has simply made copying much faster.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;The Security Question Everyone Should Ask&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
There is another important consideration.&lt;/p&gt;

&lt;p&gt;Many AI assistants operate through cloud services.&lt;/p&gt;

&lt;p&gt;When a developer requests help, portions of their code may be processed on remote servers depending on the AI service being used and the organisation's privacy settings.&lt;/p&gt;

&lt;p&gt;Now imagine walking into a doctor's office.&lt;/p&gt;

&lt;p&gt;You would not casually hand confidential medical records to strangers sitting in the waiting room.&lt;/p&gt;

&lt;p&gt;Company software deserves similar caution.&lt;/p&gt;

&lt;p&gt;Businesses working with financial records, health information or confidential customer data should understand how their chosen AI tools handle information before uploading sensitive code or documents.&lt;/p&gt;

&lt;p&gt;Several AI providers now offer enterprise privacy controls, but users should still read data-handling policies carefully rather than assuming every service treats information the same way.&lt;/p&gt;

&lt;p&gt;Convenience should never come at the expense of confidentiality.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;AI Will Not Replace Curious People&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
One question appears almost every time AI is discussed.&lt;/p&gt;

&lt;p&gt;"Will programmers lose their jobs?"&lt;/p&gt;

&lt;p&gt;History suggests a more balanced answer.&lt;/p&gt;

&lt;p&gt;Calculators did not eliminate accountants.&lt;/p&gt;

&lt;p&gt;Spreadsheet software did not eliminate financial analysts.&lt;/p&gt;

&lt;p&gt;Digital cameras did not eliminate photographers.&lt;/p&gt;

&lt;p&gt;Instead, each tool changed how professionals worked.&lt;/p&gt;

&lt;p&gt;AI is likely to follow the same pattern.&lt;/p&gt;

&lt;p&gt;Developers who understand software, think critically and solve problems creatively will remain valuable.&lt;/p&gt;

&lt;p&gt;Those who rely entirely on AI without understanding the underlying principles may struggle when the tool produces incorrect answers.&lt;/p&gt;

&lt;p&gt;In other words, AI rewards understanding rather than replacing it.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Learning to Work &lt;em&gt;With&lt;/em&gt; AI Instead of Depending on It&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
For beginners, the best approach is surprisingly simple.&lt;/p&gt;

&lt;p&gt;Use AI as a teacher rather than a shortcut.&lt;/p&gt;

&lt;p&gt;Ask why a piece of code works.&lt;/p&gt;

&lt;p&gt;Request explanations instead of only accepting generated answers.&lt;/p&gt;

&lt;p&gt;Challenge its suggestions.&lt;/p&gt;

&lt;p&gt;Experiment.&lt;/p&gt;

&lt;p&gt;Make mistakes.&lt;/p&gt;

&lt;p&gt;Correct them.&lt;/p&gt;

&lt;p&gt;Learning this way builds confidence that remains useful even when AI is unavailable.&lt;/p&gt;

&lt;p&gt;After all, if your calculator battery dies, knowing basic arithmetic suddenly becomes very valuable.&lt;/p&gt;

&lt;p&gt;Programming is no different.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;The Future Is Collaboration&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
According to the 2024 Stack Overflow Developer Survey, AI tools have become a regular part of software development for many developers, particularly for writing code, learning new technologies and improving productivity. At the same time, many respondents also reported concerns about accuracy and trust, reinforcing the need for human oversight rather than blind reliance.&lt;/p&gt;

&lt;p&gt;That finding captures the current reality perfectly.&lt;/p&gt;

&lt;p&gt;AI inside VS Code is neither magic nor menace.&lt;/p&gt;

&lt;p&gt;It is simply another tool.&lt;/p&gt;

&lt;p&gt;A remarkably capable one, certainly, but still a tool.&lt;/p&gt;

&lt;p&gt;The best developers of the future may not be those who type the fastest.&lt;/p&gt;

&lt;p&gt;They may be those who know when to trust AI, when to question it and when to ignore it completely.&lt;/p&gt;

&lt;p&gt;Technology has always rewarded people who combine curiosity with judgment.&lt;/p&gt;

&lt;p&gt;AI changes neither of those qualities.&lt;/p&gt;

&lt;p&gt;If anything, it makes them even more important.&lt;/p&gt;

&lt;p&gt;Perhaps that is the real story behind AI in VS Code.&lt;/p&gt;

&lt;p&gt;It is not teaching computers to think like humans.&lt;/p&gt;

&lt;p&gt;It is quietly encouraging humans to think more carefully while letting machines handle the repetitive work none of us enjoyed in the first place.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>vscode</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>From the Village Granary to the Digital Ledger: Understanding Blockchain and NFTs Without the Technical Headache</title>
      <dc:creator>Okello Odhiambo</dc:creator>
      <pubDate>Tue, 21 Jul 2026 07:25:39 +0000</pubDate>
      <link>https://dev.to/okelloodhiambo0/from-the-village-granary-to-the-digital-ledger-understanding-blockchain-and-nfts-without-the-1fbl</link>
      <guid>https://dev.to/okelloodhiambo0/from-the-village-granary-to-the-digital-ledger-understanding-blockchain-and-nfts-without-the-1fbl</guid>
      <description>&lt;p&gt;A child who has never travelled believes their father's homestead is the whole world.&lt;/p&gt;

&lt;p&gt;Technology often makes many of us feel like that child. We hear new words, nod politely, and quietly hope someone will explain them in plain language. Few technologies have attracted as much excitement—and confusion—as &lt;strong&gt;blockchain&lt;/strong&gt; and &lt;strong&gt;NFTs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For years, these two terms have appeared alongside stories about cryptocurrencies, million-dollar digital art, scams, and overnight fortunes. Somewhere in that noise, many ordinary people concluded that blockchain was only for investors, programmers, or people chasing the next big thing online.&lt;/p&gt;

&lt;p&gt;Yet that is far from the truth.&lt;/p&gt;

&lt;p&gt;The real story of blockchain is not about speculation. It is about trust. It is about keeping records that people can verify without depending entirely on one individual or institution. NFTs, meanwhile, are not simply expensive digital pictures. At their heart, they are a way of proving ownership of something unique in the digital world.&lt;/p&gt;

&lt;p&gt;Understanding both begins not with computers, but with something much closer to home.&lt;/p&gt;

&lt;p&gt;Imagine your grandmother's granary.&lt;/p&gt;

&lt;p&gt;Everyone in the village knows how many sacks of maize went in after harvest. Whenever a sack is removed, everyone who helps with the granary can see it. Nobody quietly sneaks in at night and changes last month's count because several people already know what was recorded. Trust comes from shared knowledge rather than blind faith.&lt;/p&gt;

&lt;p&gt;That simple idea lies at the heart of blockchain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trust, Written One Page at a Time&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think of a notebook used by a merry-go-round (chama). Every contribution is written down. Every member has seen the entries. If someone tears out a page and replaces it with different numbers, the rest of the members immediately notice because their own records no longer match.&lt;/p&gt;

&lt;p&gt;Blockchain works in much the same way.&lt;/p&gt;

&lt;p&gt;Instead of one notebook locked inside an office, identical copies of the record exist across many computers. Each new page of transactions is connected to the previous page, forming a continuous chain. Once information has been agreed upon and added, changing it becomes extraordinarily difficult because every copy would need to be altered simultaneously.&lt;/p&gt;

&lt;p&gt;Rather than relying on one trusted gatekeeper, the system relies on many participants verifying the same information.&lt;/p&gt;

&lt;p&gt;As &lt;em&gt;The Truth Machine&lt;/em&gt;, economists Michael J. Casey and Paul Vigna observe, blockchain represents "a machine for creating trust." That simple description captures its greatest strength. The technology does not eliminate trust altogether; instead, it changes how trust is established.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Why This Matters Beyond Computers&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Imagine buying a plot of land.&lt;/p&gt;

&lt;p&gt;You receive the title deed and carefully lock it away. Years later, another person appears claiming ownership with a different document. The dispute drags on for months, perhaps years.&lt;/p&gt;

&lt;p&gt;Now imagine if every legitimate transfer of ownership had been permanently recorded in a system where altering past records without everyone noticing was practically impossible.&lt;/p&gt;

&lt;p&gt;That is one reason governments, researchers, and businesses continue exploring blockchain technology—not because it is fashionable, but because reliable records matter.&lt;/p&gt;

&lt;p&gt;The World Economic Forum has repeatedly highlighted blockchain's potential in improving transparency across supply chains, healthcare, trade documentation, and public services.&lt;/p&gt;

&lt;p&gt;The technology is not a magic wand, but it offers a different approach to keeping records honest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Kenyan Story Hidden Inside Your Morning Cup of Coffee&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Picture a farmer in Nyeri harvesting coffee cherries.&lt;/p&gt;

&lt;p&gt;The beans leave the farm and pass through processors, exporters, shipping companies, warehouses, and finally a café somewhere in London or Tokyo.&lt;/p&gt;

&lt;p&gt;Along the journey, information can easily disappear.&lt;/p&gt;

&lt;p&gt;Which farm produced these beans?&lt;/p&gt;

&lt;p&gt;Were farmers paid fairly?&lt;/p&gt;

&lt;p&gt;Was the coffee organically grown?&lt;/p&gt;

&lt;p&gt;Blockchain allows every participant in that journey to add verified information as the product moves from one stage to another. Instead of relying on one company's records, everyone along the chain contributes to a shared history.&lt;/p&gt;

&lt;p&gt;The result is greater traceability.&lt;/p&gt;

&lt;p&gt;Several agricultural supply-chain projects around the world—including initiatives involving IBM Food Trust and similar traceability platforms—have demonstrated how distributed ledgers can help consumers understand where products originate and how they reached the shelf.&lt;/p&gt;

&lt;p&gt;The same thinking could extend beyond coffee.&lt;/p&gt;

&lt;p&gt;Imagine purchasing beef in Nairobi and scanning a QR code that tells you which county the animal came from, when it received veterinary treatment, where it was slaughtered, and how it reached your local supermarket.&lt;/p&gt;

&lt;p&gt;For livestock-producing countries like Kenya, such transparency could strengthen consumer confidence and improve access to export markets that increasingly demand traceable food systems.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;So Where Do NFTs Come In?&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Suppose your grandfather carved a beautiful wooden stool.&lt;/p&gt;

&lt;p&gt;It is the only one he ever made.&lt;/p&gt;

&lt;p&gt;Many people can photograph it.&lt;/p&gt;

&lt;p&gt;Others can paint it.&lt;/p&gt;

&lt;p&gt;Someone might even create an exact replica.&lt;/p&gt;

&lt;p&gt;But only one original exists.&lt;/p&gt;

&lt;p&gt;An NFT—or &lt;strong&gt;Non-Fungible Token&lt;/strong&gt;—acts like a digital certificate proving ownership or authenticity of something unique.&lt;/p&gt;

&lt;p&gt;The word &lt;em&gt;non-fungible&lt;/em&gt; sounds intimidating, yet the idea is familiar.&lt;/p&gt;

&lt;p&gt;A KSh 1,000 note is fungible because any other genuine KSh 1,000 note can replace it.&lt;/p&gt;

&lt;p&gt;Your national identity card is not fungible.&lt;/p&gt;

&lt;p&gt;Neither is your university degree.&lt;/p&gt;

&lt;p&gt;Neither is your passport.&lt;/p&gt;

&lt;p&gt;They belong specifically to you.&lt;/p&gt;

&lt;p&gt;NFTs apply this same principle to digital assets.&lt;/p&gt;

&lt;p&gt;Contrary to popular belief, the NFT is usually not the artwork itself. Instead, it is a digital record pointing to ownership or authenticity.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;Owning an NFT of a photograph does not automatically stop others from viewing or copying the image online, just as owning the original Mona Lisa would not prevent people from printing posters of it. What changes is who possesses the recognised original.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond Digital Art
&lt;/h2&gt;

&lt;p&gt;The headlines often focused on colourful digital images selling for extraordinary sums.&lt;/p&gt;

&lt;p&gt;That created the impression that NFTs were little more than expensive internet collectibles.&lt;/p&gt;

&lt;p&gt;Their practical uses are far broader.&lt;/p&gt;

&lt;p&gt;Imagine receiving your university certificate as an NFT.&lt;/p&gt;

&lt;p&gt;An employer could instantly verify its authenticity without calling the institution.&lt;/p&gt;

&lt;p&gt;Imagine concert tickets issued as NFTs.&lt;/p&gt;

&lt;p&gt;Counterfeit tickets become far harder to produce.&lt;/p&gt;

&lt;p&gt;Imagine hospital records where patients control access to their medical history instead of carrying paper files from one clinic to another.&lt;/p&gt;

&lt;p&gt;Imagine land titles, professional licences, intellectual property rights, museum collections, or even livestock ownership represented through secure digital certificates.&lt;/p&gt;

&lt;p&gt;Many of these ideas remain under development, but the underlying technology already exists.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Not Every Problem Needs a Blockchain&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Good technology should solve real problems rather than create new ones.&lt;/p&gt;

&lt;p&gt;Blockchain is no exception.&lt;/p&gt;

&lt;p&gt;Traditional databases are often faster, cheaper, and easier to manage.&lt;/p&gt;

&lt;p&gt;If a small family business only needs to record daily sales, an ordinary spreadsheet may work perfectly well.&lt;/p&gt;

&lt;p&gt;Blockchain becomes valuable where many independent parties need to trust shared records without placing complete confidence in one central authority.&lt;/p&gt;

&lt;p&gt;It is a specialised tool—not a universal solution.&lt;/p&gt;

&lt;p&gt;As the old Luo saying reminds us, &lt;em&gt;"Piny owang' ni ng'ato ok nyal bedo gi rieko duto."&lt;/em&gt; The world has taught us that no one possesses all wisdom. Likewise, no single technology solves every challenge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Challenges We Should Not Ignore&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Balanced conversations matter.&lt;/p&gt;

&lt;p&gt;Blockchain systems can be expensive to build and maintain.&lt;/p&gt;

&lt;p&gt;Some public blockchain networks have historically consumed significant amounts of electricity, although newer systems increasingly rely on energy-efficient methods such as Proof of Stake, reducing electricity use dramatically compared with earlier designs.&lt;/p&gt;

&lt;p&gt;There are also legal questions.&lt;/p&gt;

&lt;p&gt;Who owns digital assets?&lt;/p&gt;

&lt;p&gt;How should governments regulate them?&lt;/p&gt;

&lt;p&gt;What happens when mistakes occur in records designed to be difficult to change?&lt;/p&gt;

&lt;p&gt;Fraud remains another concern. Scammers often exploit public excitement around NFTs and cryptocurrencies. Importantly, these scams usually arise from dishonest people, not from the blockchain technology itself.&lt;/p&gt;

&lt;p&gt;As with mobile banking or online shopping, understanding the technology is one of the strongest forms of protection.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Looking Ahead&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Blockchain and NFTs are still evolving.&lt;/p&gt;

&lt;p&gt;Some ideas will succeed.&lt;/p&gt;

&lt;p&gt;Others will quietly disappear.&lt;/p&gt;

&lt;p&gt;That is how innovation has always worked.&lt;/p&gt;

&lt;p&gt;Few Kenyans imagined twenty years ago that sending money through a mobile phone would become an everyday habit. Today it feels ordinary.&lt;/p&gt;

&lt;p&gt;Blockchain may follow a similar path—not because everyone suddenly becomes a cryptocurrency trader, but because the technology quietly finds practical uses in areas where trust, transparency, and reliable records matter most.&lt;/p&gt;

&lt;p&gt;When that happens, many people may use blockchain every day without ever noticing it, just as millions of people send mobile money without thinking about the complex systems operating behind the screen.&lt;/p&gt;

&lt;p&gt;Technology is at its best when it disappears into everyday life.&lt;/p&gt;

&lt;p&gt;Perhaps that is the simplest way to understand blockchain.&lt;/p&gt;

&lt;p&gt;It is not trying to replace human trust.&lt;/p&gt;

&lt;p&gt;It is trying to help us record trust more faithfully.&lt;/p&gt;

&lt;p&gt;And NFTs?&lt;/p&gt;

&lt;p&gt;They simply answer an old human question in a new digital world:&lt;/p&gt;

&lt;p&gt;_"How do we know this truly belongs to you?"&lt;br&gt;
_&lt;br&gt;
The answer, increasingly, may not come from a filing cabinet or a rubber stamp, but from a carefully maintained digital ledger shared across the world.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Building Confidence Without Knowing What You’re Doing (A Beginner’s Honest Story)</title>
      <dc:creator>Okello Odhiambo</dc:creator>
      <pubDate>Wed, 13 May 2026 11:49:07 +0000</pubDate>
      <link>https://dev.to/okelloodhiambo0/building-confidence-without-knowing-what-youre-doing-a-beginners-honest-story-176p</link>
      <guid>https://dev.to/okelloodhiambo0/building-confidence-without-knowing-what-youre-doing-a-beginners-honest-story-176p</guid>
      <description>&lt;p&gt;Last week, I passed an audit I was fully prepared to fail.&lt;/p&gt;

&lt;p&gt;Not “maybe fail.”&lt;br&gt;
Not “slightly unsure.”&lt;/p&gt;

&lt;p&gt;Fail.&lt;/p&gt;

&lt;p&gt;The kind where you’re already planning how you’ll explain yourself when everything starts falling apart.&lt;/p&gt;

&lt;p&gt;But somehow… I passed.&lt;/p&gt;

&lt;p&gt;And to be honest? I wasn’t even sure I deserved to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Welcome to learning without a map&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m currently learning software development at Zone01 Kisumu, where everything is peer-to-peer. No teachers. Just apprentices trying to figure things out, reviewing each other’s work, and occasionally pretending we understand what’s going on.&lt;/p&gt;

&lt;p&gt;For the past two months, my learning journey has looked less like a straight line… and more like a circle.&lt;/p&gt;

&lt;p&gt;Learn.&lt;br&gt;
Unlearn.&lt;br&gt;
Get confused.&lt;br&gt;
Repeat.&lt;/p&gt;

&lt;p&gt;At some point you even start asking yourself:&lt;/p&gt;

&lt;p&gt;“Am I actually learning… or just surviving?”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The moment things stopped making sense&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One project that really humbled me was &lt;strong&gt;ascii-art-web&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The task sounded simple enough:&lt;br&gt;
Build a Go server and connect it to a web interface.&lt;/p&gt;

&lt;p&gt;Simple… until it wasn’t.&lt;/p&gt;

&lt;p&gt;Because just when I was starting to understand Go—just starting—HTML showed up like:&lt;/p&gt;

&lt;p&gt;“Surprise 🙂”&lt;/p&gt;

&lt;p&gt;Suddenly I wasn’t just thinking about logic anymore.&lt;br&gt;
Now it was structure, templates, rendering…&lt;/p&gt;

&lt;p&gt;At that point I just stared at my screen like:&lt;/p&gt;

&lt;p&gt;“Wuod gi nyithindo, what is actually going on here?”&lt;/p&gt;

&lt;p&gt;I didn’t fully understand what I was building.&lt;/p&gt;

&lt;p&gt;But I still submitted it.&lt;/p&gt;

&lt;p&gt;Because… what else are you going to do?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The real fear isn’t failure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every time I hit “submit,” there’s a small moment of regret.&lt;/p&gt;

&lt;p&gt;Like maybe if I close my laptop fast enough, the audit won’t happen.&lt;/p&gt;

&lt;p&gt;Because the fear isn’t really failing.&lt;/p&gt;

&lt;p&gt;It’s sitting in front of someone while they go through your code and ask:&lt;/p&gt;

&lt;p&gt;“Why did you do this?”&lt;/p&gt;

&lt;p&gt;And your brain just goes:&lt;/p&gt;

&lt;p&gt;“We listen, we don’t judge.”&lt;/p&gt;

&lt;p&gt;If I’m being honest, I’m less afraid of failing…&lt;/p&gt;

&lt;p&gt;and more afraid of being exposed as someone who doesn’t fully understand what they’re doing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The audit that almost ended me (but didn’t)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then came net-cat.&lt;/p&gt;

&lt;p&gt;Server. Client. Connections. Ports. Communication.&lt;/p&gt;

&lt;p&gt;Big words. Serious things.&lt;/p&gt;

&lt;p&gt;I walked into that audit already defeated.&lt;/p&gt;

&lt;p&gt;And the auditor?&lt;br&gt;
Very thorough. The kind who doesn’t just follow the questions—they expand them.&lt;/p&gt;

&lt;p&gt;At some point, they started asking things that weren’t even on the audit sheet.&lt;/p&gt;

&lt;p&gt;I remember thinking:&lt;/p&gt;

&lt;p&gt;“Ah. This is where my journey ends.”&lt;/p&gt;

&lt;p&gt;But somehow… I passed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Passing without confidence is confusing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You’d think passing would feel amazing.&lt;/p&gt;

&lt;p&gt;But instead, I just sat there wondering:&lt;/p&gt;

&lt;p&gt;“Wait… so what exactly just happened?”&lt;/p&gt;

&lt;p&gt;Because in my head, I was still the same person who didn’t fully get it.&lt;/p&gt;

&lt;p&gt;That’s when something small shifted.&lt;/p&gt;

&lt;p&gt;Instead of celebrating, I started seeing audits differently:&lt;/p&gt;

&lt;p&gt;“Maybe this is not just a test… maybe this is where I actually learn the thing I thought I learned.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What “not learning” really feels like&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let me be real.&lt;/p&gt;

&lt;p&gt;There are days it feels like I’ve learned absolutely nothing.&lt;/p&gt;

&lt;p&gt;Two months in… and sometimes I still feel like it’s day one.&lt;/p&gt;

&lt;p&gt;You’re in a group discussion.&lt;br&gt;
People are throwing around terms.&lt;br&gt;
Debating solutions.&lt;/p&gt;

&lt;p&gt;And you’re just there like:&lt;/p&gt;

&lt;p&gt;“Yes… yes… I also agree… with… everything.”&lt;/p&gt;

&lt;p&gt;Meanwhile, inside:&lt;/p&gt;

&lt;p&gt;“Koro an gi wach matin… I am completely lost.”&lt;/p&gt;

&lt;p&gt;And then the comparisons start.&lt;/p&gt;

&lt;p&gt;“They understand this faster.”&lt;br&gt;
“They explain things better.”&lt;br&gt;
“They belong here.”&lt;/p&gt;

&lt;p&gt;And you?&lt;/p&gt;

&lt;p&gt;You’re not so sure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But something is happening (quietly)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even with all that confusion, there are small things that have changed.&lt;/p&gt;

&lt;p&gt;I can push projects without struggling.&lt;br&gt;
I understand my way around VS Code.&lt;br&gt;
The terminal no longer feels like a place where mistakes go to multiply.&lt;/p&gt;

&lt;p&gt;These aren’t big, dramatic wins.&lt;/p&gt;

&lt;p&gt;But they matter.&lt;/p&gt;

&lt;p&gt;Because a few weeks ago?&lt;br&gt;
These same things felt impossible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maybe confidence isn’t the starting point&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I used to think confidence comes first.&lt;/p&gt;

&lt;p&gt;That one day I’d wake up and feel ready.&lt;/p&gt;

&lt;p&gt;Now I’m starting to think that was a lie.&lt;/p&gt;

&lt;p&gt;Because what’s actually happening is this:&lt;/p&gt;

&lt;p&gt;You submit while unsure.&lt;br&gt;
You get audited while nervous.&lt;br&gt;
You pass… sometimes by surprise.&lt;/p&gt;

&lt;p&gt;And slowly—very quietly—something starts to build.&lt;/p&gt;

&lt;p&gt;Not loud confidence.&lt;br&gt;
Not “I know everything now.”&lt;/p&gt;

&lt;p&gt;Just a small, steady realization:&lt;/p&gt;

&lt;p&gt;“I may not understand everything… but I’m not the same person I was when I started.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So what does confidence mean to me right now?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s not clarity.&lt;br&gt;
It’s not mastery.&lt;br&gt;
It’s definitely not feeling ready.&lt;/p&gt;

&lt;p&gt;Right now, confidence is much simpler than that.&lt;/p&gt;

&lt;p&gt;It’s this:&lt;/p&gt;

&lt;p&gt;Showing up. Submitting anyway. And refusing to quit.&lt;/p&gt;

&lt;p&gt;Even when I feel lost.&lt;br&gt;
Even when I can’t explain my own code properly.&lt;br&gt;
Even when I’m sure I’m about to fail.&lt;/p&gt;

&lt;p&gt;Because somehow… despite all that…&lt;/p&gt;

&lt;p&gt;I’m still here.&lt;/p&gt;

&lt;p&gt;Still learning.&lt;br&gt;
Still confused.&lt;br&gt;
Still moving forward.&lt;/p&gt;

&lt;p&gt;And for now?&lt;/p&gt;

&lt;p&gt;That’s enough.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>100daysofcode</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>After attending the piscine at Zone01 Kisumu twice (almost 60 days), I realized it’s less about coding and more about resilience.

I wrote a story about the experience, the confusion, the checkpoints, the audits, and the lessons that come with them.</title>
      <dc:creator>Okello Odhiambo</dc:creator>
      <pubDate>Thu, 12 Mar 2026 07:51:49 +0000</pubDate>
      <link>https://dev.to/okelloodhiambo0/after-attending-the-piscine-at-zone01-kisumu-twice-almost-60-days-i-realized-its-less-about-4pac</link>
      <guid>https://dev.to/okelloodhiambo0/after-attending-the-piscine-at-zone01-kisumu-twice-almost-60-days-i-realized-its-less-about-4pac</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/okelloodhiambo0/surviving-the-piscine-at-zone01-kisumu-60-days-of-being-humbled-by-code-3o5h" class="crayons-story__hidden-navigation-link"&gt;Surviving the Piscine at Zone01 Kisumu - 60 Days of Being Humbled by Code&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/okelloodhiambo0" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3816211%2Fac652f13-cb10-4d26-9269-373df889f7d9.jpg" alt="okelloodhiambo0 profile" class="crayons-avatar__image" width="400" height="400"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/okelloodhiambo0" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Okello Odhiambo
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Okello Odhiambo
                
              
              &lt;div id="story-author-preview-content-3342344" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/okelloodhiambo0" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3816211%2Fac652f13-cb10-4d26-9269-373df889f7d9.jpg" class="crayons-avatar__image" alt="" width="400" height="400"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Okello Odhiambo&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/okelloodhiambo0/surviving-the-piscine-at-zone01-kisumu-60-days-of-being-humbled-by-code-3o5h" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 12&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/okelloodhiambo0/surviving-the-piscine-at-zone01-kisumu-60-days-of-being-humbled-by-code-3o5h" id="article-link-3342344"&gt;
          Surviving the Piscine at Zone01 Kisumu - 60 Days of Being Humbled by Code
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/codenewbie"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;codenewbie&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devjournal"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devjournal&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/learning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;learning&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/okelloodhiambo0/surviving-the-piscine-at-zone01-kisumu-60-days-of-being-humbled-by-code-3o5h" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/okelloodhiambo0/surviving-the-piscine-at-zone01-kisumu-60-days-of-being-humbled-by-code-3o5h#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>codenewbie</category>
      <category>coding</category>
      <category>devjournal</category>
      <category>learning</category>
    </item>
    <item>
      <title>Surviving the Piscine at Zone01 Kisumu - 60 Days of Being Humbled by Code</title>
      <dc:creator>Okello Odhiambo</dc:creator>
      <pubDate>Thu, 12 Mar 2026 07:49:53 +0000</pubDate>
      <link>https://dev.to/okelloodhiambo0/surviving-the-piscine-at-zone01-kisumu-60-days-of-being-humbled-by-code-3o5h</link>
      <guid>https://dev.to/okelloodhiambo0/surviving-the-piscine-at-zone01-kisumu-60-days-of-being-humbled-by-code-3o5h</guid>
      <description>&lt;p&gt;I attended the piscine twice.&lt;/p&gt;

&lt;p&gt;That’s nearly 60 days of intense coding, confusion, debugging, and occasional existential crises in front of a computer.&lt;/p&gt;

&lt;p&gt;And when I say intense, I mean the kind where you stare at your screen so long that even the keyboard starts judging you.&lt;/p&gt;

&lt;p&gt;When I first joined the piscine at Zone01 Kisumu, I had zero tech background. Not “a little HTML” zero. I mean completely zero.&lt;/p&gt;

&lt;p&gt;The closest I had come to programming was dialing USSD codes like *544# to check bundles.&lt;/p&gt;

&lt;p&gt;Yet somehow, I had decided to learn software engineering.&lt;/p&gt;

&lt;p&gt;Looking back, that decision would lead to one of the most challenging and transformative experiences of my life.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day One: A Very Fast Reality Check&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first day of the piscine is where reality politely introduces itself.&lt;/p&gt;

&lt;p&gt;You sit down, open your computer, log into the system, and look around the room.&lt;/p&gt;

&lt;p&gt;Some people immediately start typing like they’ve been preparing for this moment since childhood.&lt;/p&gt;

&lt;p&gt;Within the first hour, something becomes obvious.&lt;/p&gt;

&lt;p&gt;Not everyone is starting from the same place.&lt;/p&gt;

&lt;p&gt;Some participants come from computer science backgrounds or have already spent time coding. They move through exercises quickly and confidently.&lt;/p&gt;

&lt;p&gt;Meanwhile, you’re still reading the instructions.&lt;/p&gt;

&lt;p&gt;At Zone01, finishing an exercise is often called “BIM-ing” it.&lt;/p&gt;

&lt;p&gt;So imagine hearing someone say:&lt;/p&gt;

&lt;p&gt;“I’ve already BIM’d that exercise.”&lt;/p&gt;

&lt;p&gt;And you haven’t even figured out what the instructions mean yet.&lt;/p&gt;

&lt;p&gt;That’s the moment when your brain quietly asks:&lt;/p&gt;

&lt;p&gt;“Are we sure we belong here?”&lt;/p&gt;

&lt;p&gt;But stubbornness is powerful.&lt;/p&gt;

&lt;p&gt;So you stay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Weekly Cycle: Hope vs Reality&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The piscine has a rhythm that every participant eventually recognizes.&lt;/p&gt;

&lt;p&gt;During the week, you start gaining confidence.&lt;/p&gt;

&lt;p&gt;You solve a few exercises.&lt;br&gt;
You fix a bug.&lt;br&gt;
Maybe you even help someone else.&lt;/p&gt;

&lt;p&gt;For a moment, you feel like you're finally getting the hang of things.&lt;/p&gt;

&lt;p&gt;Then comes the checkpoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 4-Hour Checkpoint Experience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The checkpoint is a timed exam designed to test your understanding.&lt;/p&gt;

&lt;p&gt;And it’s also where confidence goes to die.&lt;/p&gt;

&lt;p&gt;Everyone starts at the same time.&lt;/p&gt;

&lt;p&gt;You open the exam.&lt;/p&gt;

&lt;p&gt;You read the first question.&lt;/p&gt;

&lt;p&gt;Then you stare at the screen.&lt;/p&gt;

&lt;p&gt;Five minutes pass.&lt;/p&gt;

&lt;p&gt;Ten minutes pass.&lt;/p&gt;

&lt;p&gt;Meanwhile, the person next to you is already on Level 3.&lt;/p&gt;

&lt;p&gt;At this point, many people develop the same coping mechanism: typing random commands just so it looks like you're working.&lt;/p&gt;

&lt;p&gt;Your screen is empty.&lt;/p&gt;

&lt;p&gt;But your keyboard is extremely busy.&lt;/p&gt;

&lt;p&gt;Checkpoints have a way of reminding everyone that learning to code is not a straight line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Group Projects: When Confidence Meets the Audit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Group work is one of the most interesting parts of the piscine.&lt;/p&gt;

&lt;p&gt;People gather around one screen discussing solutions, sharing ideas, and proposing approaches.&lt;/p&gt;

&lt;p&gt;Someone says:&lt;/p&gt;

&lt;p&gt;“Let’s use recursion.”&lt;/p&gt;

&lt;p&gt;Everyone nods.&lt;/p&gt;

&lt;p&gt;Even the people who have absolutely no idea what recursion is.&lt;/p&gt;

&lt;p&gt;For a moment, the team feels unstoppable.&lt;/p&gt;

&lt;p&gt;Then comes audit time.&lt;/p&gt;

&lt;p&gt;An auditor reviews your project and asks a simple question:&lt;/p&gt;

&lt;p&gt;“Can you explain this part of the code?”&lt;/p&gt;

&lt;p&gt;If you truly understand it, no problem.&lt;/p&gt;

&lt;p&gt;If you don’t, the explanation suddenly becomes very creative.&lt;/p&gt;

&lt;p&gt;You start sentences like:&lt;/p&gt;

&lt;p&gt;“Basically what happens here is… you see… the function…”&lt;/p&gt;

&lt;p&gt;And somehow the explanation never reaches a conclusion.&lt;/p&gt;

&lt;p&gt;It’s a humbling moment that most piscine participants remember very clearly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The AI Temptation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s talk about something modern developers understand very well.&lt;/p&gt;

&lt;p&gt;The temptation to use AI.&lt;/p&gt;

&lt;p&gt;When you're stuck on a problem for hours, the thought appears:&lt;/p&gt;

&lt;p&gt;“Maybe I should just get a small hint.”&lt;/p&gt;

&lt;p&gt;Suddenly, perfect code appears.&lt;/p&gt;

&lt;p&gt;Clean. Elegant. Working.&lt;/p&gt;

&lt;p&gt;You submit it feeling brilliant.&lt;/p&gt;

&lt;p&gt;Until someone asks:&lt;/p&gt;

&lt;p&gt;“Can you explain what this line does?”&lt;/p&gt;

&lt;p&gt;That’s when the real test begins.&lt;/p&gt;

&lt;p&gt;The piscine doesn’t just evaluate whether your code works.&lt;/p&gt;

&lt;p&gt;It checks whether you understand what you wrote.&lt;/p&gt;

&lt;p&gt;And that’s a lesson many developers learn the hard way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the Piscine Actually Teaches&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At first glance, the piscine looks like a coding bootcamp.&lt;/p&gt;

&lt;p&gt;But after weeks of struggling through exercises, something becomes clear.&lt;/p&gt;

&lt;p&gt;The real lesson isn’t just programming.&lt;/p&gt;

&lt;p&gt;It’s resilience.&lt;/p&gt;

&lt;p&gt;You learn how to deal with frustration.&lt;/p&gt;

&lt;p&gt;You learn that confusion is part of the learning process.&lt;/p&gt;

&lt;p&gt;And you learn that everyone—no matter how experienced—gets stuck sometimes.&lt;/p&gt;

&lt;p&gt;A Luo proverb says:&lt;/p&gt;

&lt;p&gt;“Piny owacho gi chike, to ng’ato nyalo puonjore.”&lt;br&gt;
The world has its rules, but a person can learn them.&lt;/p&gt;

&lt;p&gt;The piscine forces you to accept that progress happens slowly, one concept at a time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I Came Back the Second Time&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After my first attempt, I had a choice.&lt;/p&gt;

&lt;p&gt;Walk away.&lt;/p&gt;

&lt;p&gt;Or try again.&lt;/p&gt;

&lt;p&gt;I came back.&lt;/p&gt;

&lt;p&gt;Not because coding suddenly became easy.&lt;/p&gt;

&lt;p&gt;But because something had changed.&lt;/p&gt;

&lt;p&gt;I understood that the goal wasn’t to be the fastest person in the room.&lt;/p&gt;

&lt;p&gt;The goal was simply to keep improving.&lt;/p&gt;

&lt;p&gt;One exercise.&lt;/p&gt;

&lt;p&gt;One concept.&lt;/p&gt;

&lt;p&gt;One bug at a time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Looking back at nearly 60 days in the piscine, one thing stands out.&lt;/p&gt;

&lt;p&gt;The experience tests more than your technical ability.&lt;/p&gt;

&lt;p&gt;It tests your patience.&lt;br&gt;
Your humility.&lt;br&gt;
Your willingness to keep learning.&lt;/p&gt;

&lt;p&gt;Some days your screen is blank.&lt;/p&gt;

&lt;p&gt;Some days the person next to you is already on Level 3.&lt;/p&gt;

&lt;p&gt;But if you stay long enough, something interesting happens.&lt;/p&gt;

&lt;p&gt;You start solving problems that once felt impossible.&lt;/p&gt;

&lt;p&gt;And slowly, line by line, the code begins to make sense.&lt;/p&gt;

&lt;p&gt;💬 If you’ve ever gone through a coding bootcamp, a 42/Zone01 piscine, or any intense learning experience, I’d love to hear your story.&lt;/p&gt;

&lt;p&gt;What was the moment that humbled you the most?&lt;/p&gt;

&lt;p&gt;Because if there’s one thing the piscine proves, it’s this:&lt;/p&gt;

&lt;p&gt;Every developer has that moment.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>devjournal</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
