RSSAmplifier

Blog

Andrew Wagner

I'm Andrew Wagner, a staff engineer turned cofounder building Odo, a YC-backed AI email assistant. I write about company building, working with AI, and the craft of shipping software.

drewag.meRSS feed ↗46 posts

Latest posts

I Stopped Looking at My Code. I Found a Joy of Discovery.

I built a side project, a silly alarm app, without ever reading the code. I lost some control and mastery along the way. I also found a joy of discovery that my careful, controlled programming life had never had.

I Get More Out of Claude Code by Leaving

I told Claude Code I was stepping out for a while, and it did some of my best work of the week. Here's the trick, and the skill I built so I can reach for it on purpose.

I Keep Avoiding the Thing I'm Best At

Burnout made it easy to stop reviewing AI's work, the one thing I'm most valuable for. That left me with a harder question: when am I avoiding something because it doesn't matter, and when am I avoiding it precisely because it does?

The Most Difficult Thing I've Ever Done - Starting a Company

Years ago I wrote that finishing a book was the hardest thing I'd ever done. Starting a company has taken the title, and it's hard in a different way.

Effect of Swift Extension and Libraries On Build Time

Does separating code into extra extensions and/or modules have a meaningful impact on compile times?

Developing an Algorithm Case Study: Area encircled by multiple paths on a 2D plane

While toying around with an app idea I came across the need to develop my own algorithm and therefore return to Data Structures and Algorithms techniques I learned in college. Here is the problem, my process, and my solution.

JSON Encoder Change in Swift 5.1

While updating my app for the iOS 13 SDK, I came across a change in JSONEncoder that broke some of the logic in my code. It now supports encoding top-level values.

Swift Quiz – Boolean Expression

What is the value of result after doing: let result = false && true || true

Careful with Fancy KVO Callback

Be warned: there may be a bug in the fancier version of Key Value Observering. I discovered it while implementing a progress callback in my Decree web request library.

Singletons and Shared Instances in Swift

A couple very common programming patterns, especially in the Apple world, are Singleton and Shared Instance. People often confuse the two and there's also controversy around them. Let's clear these things up.

Keyboard Field Prompt

I walk through how I solved the question: How do I display a text field directly above the keyboard to prompt the user for some text?

Decree – A Declarative URL Request Framework

Decree allows you to make HTTP requests in a clear and type-safe way by declaring web services and endpoints. It supports all Apple platforms as well as Linux. It is the culmination of a technique I've developed over many projects. Some of those projects even include both a frontend and backend implemented in Swift that get to share a single source of endpoint declarations.

A Lesson From Nature: Complexity from Simplicity

I recently came across a video showing an “Amazing Crabs Shell Exchange” and realized that it was a perfect example from nature of how seemingly complex (or “amazing”) behavior can emerge from simple governing desires. This is directly applicable to programming. Lets explore how.

App Case Study - Love Laugh Read Books

A look at the interesting technical challenges I ran into while developing this app.

5 Core iOS Competencies to Be a Great Hire

A list of core skills that are necessary in almost every app. If you can do all of these things reliably, you are well on your way to being a great hire as an iOS developer

Deploying Server-Side Swift

There are many ways you could choose to host a Swift website or web service, but here I share what has worked well for me.

Deploying Server-Side Swift

There are many ways you could choose to host a Swift website or web service, but here I share what has worked well for me.

5 Core Swift Competencies Before You Get a Job

A list of skills, beyond just the ability to get the job done, every Swift developer should know before they get paid to develop.

Filling Holes in Swift on Linux

The hardest part of developing Server-Side Swift is the incomplete nature of Foundation including some pretty critical basic functionality. After I thought up this technique, the problems I ran into changed from mountains to mole hills.

Learning Swift, Server-Side Swift, and the Future

I have been extremely busy so I haven't made the time to write any blog posts. In this post I give a brief overview of what I have been up to and what are my short-term plans for the future.

The Most Difficult Thing I've Ever Done - Writing a Technical Book

An in-depth discussion of my experience writing a technical book about learning Swift.

Practical Use for Curried Functions in Swift

An practical example of how curried functions in Swift can be useful for implementing a logger

Swift KVO Substitute: Observable Variables

My attempt to implement a KVO replacement purely in Swift

Getting Started With Swift

A list of key concepts to know when getting started with Swift and links to resources to stay current with its development.

Uses for Implicitly Unwrapped Optionals in Swift

A list with concrete examples of when and when not to use Implicitly Unwrapped Optionals in Swift.

What is an Optional in Swift

A summary with examples of what an Optional is in Swift

7 Cool Features in Swift

Concrete examples for some cool and practical new features in Swift that will improve the daily lives of iOS and OS X programmers.

Swift’s Weird Handling of Basic Value Types and AnyObject

Basic value types like String and Int can be secretly converted to Objective-C types like NSString and NSNumber. This has some interesting effects and implications.

Better UIAlert Handling and Easier Testing

A more declarative and testable way to display alerts in iOS.

Testing Asynchronous Code in Objective-C

Testing asynchronous code in Objective-C can be a real pain unless you make one simple change to the way you program it in the first place.

Be A Better Indie - 5. Listen to Podcasts

A list with descriptions of the main podcasts that have made me a better developer and keep me informed.

Be A Better Indie - 4. Create a Singular To-Do List

The way that I handle my to-do list so that I stay on task with minimal effort.

Devise: determine unconfirmed, confirmed, or not signed in user

While developing a Rails backend using Devise for user management, I ran into trouble determining a user's status. This is how I solved that problem.

Be A Better Indie - 3. Trim Your Incoming Email

I hate being constantly distracted by incoming emails. To solve this problem I decided to drastically reduce the amount of emails I receive. This is how I did that.

Be A Better Indie - 2. Accept, appreciate, and, channel the stress

Being and independent developer can be extremely stressful. It is important that you learn to accept, appreciate, and channel to turn it into something positive.

10 Ways to Be a Better Independent Developer

A series of posts about how to be a better independent developer

Be A Better Indie - 1. Cultivate A Support Structure

No person is an island. It is virtually impossible to be successful in anything that you do without having a good support structure around you.

Comfortably Uncomfortable

A look at how pushing through discomfort is exactly where I want to be.

Changes at a Glance

A system to make version control change sets more understandable at a glance.

Implicit Animation for CAShapeLayer's Path

A way to make all path changes on a CAShapeLayer be animated automatically.

Enforce Good UX Through Reusable Code

My theory on how user experience's and code architecture's interests can converge. Good UX can encourage good code reuse and code reuse can encourage effective UX.

Bind a UITableView to a Property

A library to allow binding a UITableView directly to a to-many property. The library automatically handles insertions and deletions as long as you make sure the to-many property emits KVO notifications.

The 2 Biggest Challenges in Speech UX

Speech is still a relatively new interface. Technology is finally starting to catch up to the dreams that we've had since the invention of the computer itself: dreams of having natural conversations…

Objective-C Bindings

An extension to NSObject that adds the allows binding the properties of two different objects together, allowing for much more declarative and understandable code.

Taking the Plunge

How I came to the decision to finally take the plunge and go independent.

UX and Agile

Discusses a high level way that we can integrate UX designers better into Agile software practices.