AI
The Case for Using Small Language Models
- SLMs are more compact, specialized, energy-efficient, and easier to deploy
- Speed and efficiency are an advantage — can run on edge devices, take less time, and don’t require cloud compute
- Specialization can outperform generalization — specific datasets make SLMs more reliable for domain-specific agentic tasks, faster training can increase business agility
- More control and better privacy — models that are easier to monitor, test, audit, and control are well-suited for agentic tasks that requires predictability, transparency, and auditability
- Prototyping, experimentation, and embedding in workflows because there’s no need for substantial infrastructure
Working Effectively with Legacy Code and AI Coding Assistant – Michael Feathers
- Legacy code = code without tests.
- AI is useful for dealing with code nobody wants to touch so that you can better understand it.
- Use AI to explain code and propose more than one solution
- Lensing = having AI zoom out and provide big-picture oversight, then have it zoom in on smaller sections. For example, “What responsibilities does this giant class have? Now zoom in a tell me the top 5 responsibilities.”
- Much more code is being generated, but there’s a lot of churn (i.e., fixing stuff after the fact)
- AI is great for characterization tests
- There’s increased fatigue (cognitive load) in having to read proposed code and evaluating whether you can trust it.
- AI makes us ask better questions.
- Work in smaller steps.
- AI is good in low-risk environments (e.g., set up boilerplate code for a Chrome extension).
- At the end of the day, we (human developers) sit in the seat of responsibility for the code that ships.
- We are problem solvers, and code is one way to solve problems (i.e., an implementation detail).
- Use AI to take tests you’ve written and have it implement the code to make them pass.
- Waywords = have AI summarize a session and generate a markdown file you can reuse in another session.
- Using multiple chat sessions is like tabs in a browser (e.g., one main session with smaller short-lived sessions).
- Know which tools are best for certain things. Keep your most capable tool alongside your IDE.
- General tips: Develop a sense of absence, get as many impressions of different things (codebases, domains), stay curious.
- (He’s writing a book on LeanPub, but it’s only 30% complete as of this post.)
Is Testing Still A Developer’s Job In An AI World?
- DORA says high-performing teams have devs that write tests.
- Tests give feedback while developing, which leads to quality code.
- Warning: You writing code and having AI write tests that pass means that if that code has bugs, the tests pass anyway.
- The quality of the prompt matters.
- Feedback from AI: Do I understand what’s being built?
- Warning: You risk outsourcing understanding if you don’t look at the AI’s tests (“sleepwalking through greens”).
- It’s easy to focus on the end state and remain ignorant of the engineering process/decisions.
- Write one test a time.
- AI will sometimes ignore instructions like “don’t do X, don’t work ahead”. It’s eager but uncooperative.
- You should have a solid reason for incorporating AI (not just FOMO).
- It’s tempting to throw legacy code at AI and have it write tests. Those tests are brittle and won’t survive major refactoring, and the AI can’t do any better than that because the code was not designed with testing in mind.
- AI tools are good at generating ideas and pointing out things you might have overlooked, and testing requires that ability.
- Don’t outsource testing to AI: Use it as a partner to find things you’ve missed and that you can improve. Use the tools to get better at engineering rather than offloading that learning.
- AI has a fresh perspective because it hasn’t been staring at the code for weeks like you have.
Computer Vision: Executive Briefing
This course gives a brief overview of how computer vision has changed with advances in technology and algorithms. It also mentions tools you can use to get started. Caveat: This video was published in April 2020.
Leadership
How to Keep Your Team’s Spirits Up in Anxious Times
- “Give people something worth fighting for so they become the hero of their own stories.”
- “Show people through your actions, not your words, what you truly stand for in ways that feel genuine and relatable.”
- “Care deeply, but don’t let results—particularly disappointing ones—consume you. Instead, project emotional steadiness, show unwavering determination, and stay laser-focused on what needs to get done.”
Teams that Prioritize Either Learning or Performance Perform Better
Both are important, but don’t do both at the same time.
The Secrets to Being an Awesome Tech Lead
- Software development is a team sport
- Job = maximize the capabilities of the team by promoting certain behaviors (effective collaboration, good communication, sense of ownership, personal responsibility for quality, team autonomy, TDD, BDD, CI/CD, small steps, evolutionary design, speed of feedback [this one helps all the others])
- Dave Farley gave an example of how he helped a struggling team
- Establish a clear goal and keep the team focused on this and enthusiastically pulling in the same direction
- Communicate the vision to others
- Optimize for fast feedback
- “Stop fighting fires and start building fire engines” (work on things that make your job better)
- Organize work in small, deliberate steps
- Limit dependence on other teams
- Be a good citizen by not alienating teams around you
Machine learning
Machine Learning: Executive Briefing
This 40-minute course provides an overview of machine learning and how it’s a type of AI.
Fundamentals of Natural Language Processing
This is a section of a course about NLP and transformer models. It describes the difference between rule-based NLP and ML-based NLP and gives a demo of how you can use both in Python.