CODEHANCEBlog
Browse allAbout
← All posts
Building AI·6 September 2026·8 min read

What Building AI Means: My First Step as a Full-Stack Developer

My first useful step into Building AI as a full-stack developer was not training a model. It was understanding what changes when software learns behaviour from data rather than following rules written by hand.

Kingsley Ijomah

Kingsley Ijomah

AI Adoption Lead

Modern tech editorial screenprint illustration with the bold hand-lettered headline 'BUILDING AI'.   In a workshop flanked by server racks and architecture blueprints, a Black male software engineer   with short locs tied back, rounded glasses, and a goatee sits in a sleek active sports wheelchair   with Loopwheels, calibrating the modular emerald green core blocks of a machine learning system   labeled 'Training data', 'Objective', and 'Evaluation'. Deep zinc background with Ben-Day halftone   shading, vivid emerald accents, an inner keyline framing border, and a discreet 'CODEHANCE.COM' stamp   in the lower right.

On this page

8 sections, in order. Jump straight to the one you need.

  1. 01Why Building AI Is Different from Writing Software
  2. 02Start with Task, Experience and Performance
  3. 03Training Data Becomes Part of the Specification
  4. 04A Model Optimises the Objective, Not the Intention
  5. 05Generalisation Is the Test That Matters
  6. 06Five Building AI Principles That Outlast the Tools
  7. 07Why I Chose Understanding Before Hands-On Practice
  8. 08Sources

Follow the work as it becomes practical.

Get new field notes, hands-on examples, and build videos in your inbox.

Practical AI notes, no noise. Unsubscribe whenever you like.

As a full-stack developer, my first useful step into Building AI was not training a model. It was understanding what changed when behaviour was learned from data instead of written as explicit instructions.

I was used to tracing software behaviour back to code. A user submits a form. A handler validates it. A service applies a rule. A database stores the result. However complicated the application becomes, somebody has still described what should happen.

When I started looking properly at Building AI, that mental model was no longer enough. I could learn PyTorch, run a notebook and get a model to produce an answer, but that would not tell me what I was actually building.

Before I needed hands-on practice, I needed a map.

I wanted to understand what problem machine learning solves, why ordinary software is sometimes not enough, and which questions would still matter after today's frameworks and model architectures had changed.

Why Building AI Is Different from Writing Software

The phrase “artificial intelligence” did not help me. It was too broad, and it encouraged me to begin with the technology rather than the problem.

I already had a simpler distinction through my three layers of AI. Using AI means applying a model somebody else built. Building with AI means engineering a system in which a model is one component. Building AI means changing the model itself through its data, training, evaluation or optimisation.

What I still needed was the principle underneath that third layer.

As a full-stack developer, I normally encode behaviour directly. If an invoice is overdue, send a reminder. If a user lacks a permission, reject the request. The rules may be numerous, but they are still rules I can write and test.

Some problems resist that treatment. I might be able to recognise spam, judge which search result is more relevant or distinguish one object from another, yet struggle to describe every valid case as a stable set of instructions. The examples contain patterns that are difficult to enumerate by hand.

Machine learning becomes useful when the behaviour can be learned from experience more effectively than it can be completely specified as rules.

That does not mean every complicated problem needs machine learning. Google's Rules of Machine Learning explicitly recommends starting without it when a heuristic can solve the problem and the necessary data does not yet exist. Learning introduces a different kind of complexity, so it needs a reason to be there.

Start with Task, Experience and Performance

The clearest definition I found came from Tom Mitchell's textbook. It describes a program learning from experience with respect to a task and a performance measure when its performance improves through that experience. The wording is formal, but the underlying test is practical: identify the task, the experience and the measure of improvement.

That gave me three questions I could carry into any model:

  1. What task should the system get better at?
  2. What experience will it learn from?
  3. How will I measure whether it improved?

For a spam classifier, the task might be classifying messages. The experience might be previous messages labelled as spam or legitimate. The performance measure might include how many messages it classifies correctly, with particular attention to legitimate mail it blocks.

The model architecture does not answer those questions. Neither does the framework. They come from understanding the problem.

This was the first significant connection to my existing background. In application development, unclear requirements remain unclear after I write more code. In Building AI, an unclear learning problem remains unclear after I add more data or a larger model.

The first design decision is not the model. It is the definition of improvement.

Training Data Becomes Part of the Specification

In ordinary software, I would not describe production records as part of the program. They are inputs processed by behaviour I wrote elsewhere.

That boundary moves in machine learning. Training examples influence the parameters that later produce predictions. Which cases are present, which are missing, how they are labelled and what noise they contain all affect the behaviour that emerges.

Google's guidance on dataset quality and reliability lists label errors, noisy features, duplicates, missing values and poor filtering as problems that can weaken a model. These are not housekeeping details surrounding the interesting model work. They shape what can be learned.

The training data is not merely something the code reads. It is part of the specification.

That idea made several familiar engineering instincts useful again. I would not trust an API contract I had never inspected, so why trust a dataset I had not examined? I would not accept a requirement that omitted important users, so why assume a dataset represents cases it does not contain?

The difference is that data is an incomplete specification. It shows examples of behaviour rather than describing every rule. That is powerful, but it also means the gaps and biases are less obvious than a missing branch in a function.

A Model Optimises the Objective, Not the Intention

The next principle was measurement.

A team can say that it wants a model to make users happy, recommend useful content or recognise harmful material. Training still needs something it can calculate. A loss function gives the optimisation process a signal to reduce; metrics tell us about behaviours we care about. Google's ML engineering guide distinguishes the objective being optimised from the wider set of metrics a system should report.

Those are not guaranteed to be the same thing.

A model can improve the number it was given while missing the outcome people meant. A recommendation system optimised for clicks may learn something different from one intended to produce long-term satisfaction. A classifier can achieve an attractive overall accuracy while failing badly on the rare cases that matter most.

A model does not optimise my intention. It optimises the objective I made available.

This made problem framing feel less like an introductory task to finish before the real work. It was the real work. Choosing a measure means deciding which errors count, which trade-offs are acceptable and which parts of the intended outcome can only be checked outside the training loop.

Generalisation Is the Test That Matters

The final piece of the map was generalisation.

A model can perform extremely well on the examples it saw during training and still fail on new cases. That is overfitting. The Google explanation of generalisation and overfitting puts the real test plainly: a useful model must make good predictions on new data, not merely reproduce its training set.

This is different from the confidence I get when a deterministic test suite passes. Training success proves that a model fitted something about the available examples. It does not, by itself, prove that it learned the pattern I hoped for or that the same relationship will hold in the environment where the model is used.

The goal is not to fit the past. It is to perform usefully on cases the model has not seen.

That is why held-out evaluation, representative data and failure analysis are not optional additions. They are how I test whether the learned behaviour travels beyond the training exercise.

Five Building AI Principles That Outlast the Tools

Architectures will change. Frameworks will change. The scale of models and the ways we adapt them will change. I would not claim that any implementation practice survives untouched.

But the questions underneath the work are much more durable:

  • Define the behaviour before choosing the model. What task should improve, and why is learning appropriate?
  • Treat data as a design decision. What experience does it provide, what does it omit and how reliable are its labels?
  • Make the objective explicit. What signal can training optimise, and where does it differ from the outcome people actually want?
  • Test generalisation. Does the behaviour hold on representative cases that were not used to fit the model?
  • Study failure, then iterate. Aggregate metrics show that a problem exists; individual errors help reveal what kind of problem it is.

None of these tells me which neural network to build. That is precisely why they matter. They stop me from confusing knowledge of a tool with understanding the work.

Why I Chose Understanding Before Hands-On Practice

My first step into Building AI was therefore conceptual. I needed to see that I was no longer writing every behaviour directly. I was defining a task, providing experience, choosing a signal and testing whether the resulting behaviour generalised.

Only then did hands-on work become useful. Instead of running a training example to say I had trained a model, I could use it to locate each part of the map: the task, data, model, loss, optimisation and evaluation.

That practical step became my next article, how I used a small FashionMNIST classifier to trace the learning loop.

The rule I would give another full-stack developer is the one I needed myself: before asking how to build a model, be able to say what it should learn, what it will learn from and what would count as learning well.

Sources

These are the parts of each source I used, so you can check the argument rather than just the bibliography.

  • Tom Mitchell: Machine Learning. Mitchell's 1997 textbook defines a well-posed learning problem through a task, a source of experience and a performance measure. That definition is the basis of the three-question framework in this article.
  • Google: Rules of Machine Learning. This practitioner guide recommends measuring first, retaining simple heuristics where they work, starting with a reasonable objective and distinguishing that objective from the wider metrics a product cares about. I used it to test the claim that model choice should follow problem definition, not lead it.
  • Google Machine Learning Crash Course: Data characteristics. This guide identifies label errors, noisy features, duplicates, missing values and poor filtering as sources of unreliable training data. It supports the argument that data choices shape learned behaviour.
  • Google Machine Learning Crash Course: Generalisation and overfitting. This guide distinguishes fitting the training set from performing well on new examples. I used that distinction to explain why training success alone does not establish that a model will work on unseen cases.
#building-ai#machine-learning#software-engineering#problem-framing#generalisation

From theory to practice

See how the ideas become working systems.

I’m working on hands-on examples and videos that build real agentic workflows step by step. Join the list for new articles, practical material, and the first course updates when they’re ready.

Practical AI notes, no noise. Unsubscribe whenever you like.

Codehance emblemCODEHANCE

An open notebook from an AI Lead at Gravity9 on using AI, working with AI, and building AI.

The three layers

  • Using AI
  • Working with AI
  • Building AI

This blog

  • Latest notes
  • Complete archive
  • RSS feed
  • support@codehance.com

© 2026Codehance Ltd. All rights reserved. Registered in England & Wales. blog.codehance.com