Not Everything Is an LLM Problem
The expensive habit hiding inside AI enthusiasm The easiest mistake to make in the current AI cycle is to treat every automation, prediction, classification, ranking, search, routing, extraction, and decision-support problem as a large language model problem. It is an understandable mistake. LLMs are astonishingly flexible. They can summarize, classify, explain, translate, write code, reason…
Systems Thinking in the AI Era
The new question for product and engineering teams For years, many technology organizations were built around specialization. Product managers clarified customer problems, designers shaped the experience, engineers built the system, data scientists measured behavior, and leaders coordinated the machinery. That model worked because the seams between roles were manageable. Work moved from one craft to…
Podcast Episode: Choosing Simplicity Over Convenience: A Better Way to Build Software
Pip: aduwillie.com is back, and this time the subject is the quiet tax you pay every time someone says "just this once" in a code review. Mara: That's the territory we're covering today — the difference between easy and simple in software design, and why that distinction shapes how long a system stays livable. Pip:…
Choosing Simplicity Over Convenience: A Better Way to Build Software
There is a moment every engineer recognizes. The team is close to the end of a sprint. A feature is almost done, the pull request is open, the demo is scheduled, and the remaining work looks small enough to finish before the next standup. Someone notices a shortcut: put the validation in the controller, read…
A 10-Part Machine Learning Journey with scikit-learn
Machine learning can feel like a maze when you first encounter it. One path talks about regression. Another talks about classification. Somewhere nearby are metrics, pipelines, clustering, neural networks, and deep learning. Each topic is useful, but the bigger question is harder: This 10-part series is designed to answer that question. Each article can stand…
Module 10: Deep Learning with Keras, Grounded in scikit-learn
Deep learning often feels like a separate world, but the basic machine learning discipline remains the same: split data, preprocess inputs, train on known answers, evaluate honestly, and compare against baselines. Keras extends that workflow into deeper and more flexible neural networks. Deep learning should not feel like abandoning the core machine learning workflow. It…
Module 09: Feature Selection and Feature Extraction
As datasets grow, features multiply. A nutrition study might track calories, protein, carbohydrates, fat, fiber, sodium, vitamins, minerals, meal timing, supplements, and lifestyle variables. More features can help, but they can also create noise, redundancy, instability, and slower training. Module 09 asks a practical question: There are two broad answers. Feature selection keeps a subset…
Module 08: Clustering and Unsupervised Learning
So far, our models have learned from labeled examples. We knew the target: order count, satisfaction, readmission, high demand. But sometimes the most interesting question appears before labels exist. Imagine a basketball analytics team studying player styles. They have measurements: scoring rate, assists, rebounds, defensive activity, shot distance, and minutes played. They do not begin…
Module 07: Gradient Descent and Training Neural Networks
A neural network can be described as a layered prediction machine, but that description leaves out the most important practical question: how does the machine learn useful weights from data? Training a neural network is an optimization story. The model starts with imperfect weights. It makes predictions. The predictions produce errors. The algorithm adjusts the…
Module 06: Neural Networks with scikit-learn
Linear models are powerful because they are simple, stable, and interpretable. But some patterns do not want to be straight lines. Imagine Riverbend Roasters begins selling seasonal drinks. Demand no longer changes smoothly with temperature. Cold brew rises with heat, but only after a certain point. Pumpkin drinks spike in autumn. Rain hurts walk-in traffic…
Module 05: Data Preprocessing and Feature Engineering
If models are engines, features are the road. A powerful engine does not help if the road is broken, mislabeled, or missing bridges. This module focuses on the work that happens before training: cleaning missing values, transforming numeric features, encoding categories, and building pipelines that apply those steps consistently. It is tempting to treat preprocessing…
Module 04: Model Evaluation, Metrics, and Cross-Validation
Riverbend Roasters now has models. Some predict order counts. Some predict high-demand days. That feels like progress, but it creates a new and more important question: This module is about moving from predictions to evidence. A model is not good because it is complicated, modern, or impressive in a demo. A model is good when…
Module 03: Regression Models with scikit-learn
Classification helped us decide which category an instance belongs to. Now we return to a different kind of question: how much? Regression is the part of supervised learning that predicts numeric outcomes. A city planner might predict commute time. A hospital might predict length of stay. A marketplace might predict demand. A researcher might predict…
Module 02: Classification Models with scikit-learn
Imagine a neighborhood coffee shop trying to plan for tomorrow. Sometimes the owner wants an exact demand forecast, but sometimes she only needs a category. A normal day needs the usual staffing plan. A high-demand day means ordering more pastries, scheduling another barista, and preparing extra cold brew. If tomorrow is likely to be a…
Module 01: Machine Learning Foundations with scikit-learn
Every machine learning project begins before anyone imports scikit-learn, opens a notebook, or trains a model. It begins with a question. For this first module, imagine a neighbourhood coffee shop called Riverbend Roasters. The shop is popular, but unpredictable. Some mornings the pastry case is empty by 10:00 AM. Other days, trays of unsold croissants…
