3 Things I Learned From My “Stay Technical” Project
Like a lot of people, the pandemic made me feel like I needed a project — if I couldn’t leave the house, at least I could reserve a weird, private mental zone to putter around in. Also like a lot of people, in the end I didn’t really get going till the pandemic was almost over. And like a lot of people like me, who used to write code and have anxiety about “staying technical”, I picked a coding project; in my case, an iOS app.
The app is called Heresay, and it’s a super basic, not at all original idea — aggregate all the places (restaurants, places to stay, stores, etc.) that I wanted to maintain awareness of, so when I was wherever I could just look and see that that restaurant I read about 3 years ago in YOLO is right around the corner. You can do this in a Google Doc, or maps, which I have done, but it’s kind of a drag, and none of the various apps I could find that do similar things were quite right. To me the fun would be in fussing over the perfect solution for my purposes.
I hadn’t written much code in at least 10 years, and never a line of Swift. I had to basically learn modern development, having scarcely used a real IDE, package managers, or worked in the world of super powerful platforms & SDKs. I’d always been pretty terrible at UI work… so good — much to learn.
Finally, after something like 2 1/2 years of poking away, and with some help from some designer friends, in particular Jessi Brattengeier and her husband Christian Golden (who designed the logo), I jumped through all the Apple hoops and got the damned thing in the App Store, here. Check it out, let me know what you think.
As promised, here are three things I learned along the way:
1. Modern Software Development is Incredible
It goes without saying, but if you were a software developer who crawled under a rock fifteen years ago and just emerged to write software again — well, it’s a different game. As promised, we have been given jetpacks. For someone who wrote thousands of lines of code in vi, XCode is amazing, even if I don’t use or understand 90% of it. The vast majority of what my app does — and 100% of the interesting parts — comes from the various tools, libraries and SDKs I use: the Google Maps SDK, Firebase, Contentful, Github, not to mention Apple itself — and of course, Fastly, where I work. (Quick professional plug: while I use perhaps 1% of the Fastly’s platform, because my app does almost nothing and has a modest user base, almost all of the other platforms I depend on use Fastly.)
Did I use Gen AI for help? Yup. Was it helpful? Absolutely. Is there any unmodified generated code in my app? Nope, not one line. That’s not what it’s for, at least in my experience and at this stage. It did shave hours of research trying to figure out why some damn thing wasn’t working, as well as remembering basic Swift syntax for me.
Even though it took me almost 2 1/2 years to get my app out the door, in reality it was super fast, given all these incredible tools. I just had to do it like 4 times over, because I didn’t know what I was doing, and I had about 2 hours a week to put into it. The fact that I could produce this thing at all as a super part-time project from an absolute standing start is a testament only to the incredible ecosystem — definitely not to my skill as a software developer. We take this all for granted of course — but it’s truly nuts. At least 20x productivity improvement over the course of my career.
2. Doing a Whole Thing is Indispensable Learning
The risk in this world of jet packs and lasers is that we don’t learn how to do things beyond the narrow context we work in. For me, this was the real value of this project. I learned a bunch about Swift and iOS development, and about various SDKs, none of which I really benefits the rest of my life — but what was really valuable was playing every role in the process of building something AND getting it “to market”.
Defining the product, validating the concept, understanding the competitive landscape, prioritizing the work, finding collaborators for the things I really can’t do (er, design) and convincing them to help, testing, running a beta program, understanding the App Store and getting an App submitted, then at least thinking about how one could market and build an audience, has all been very eye-opening. Unless we actually found a real startup, we don’t get to even play-act all of these roles in our relatively siloed professional lives. I learned a lot about the whole, end-to-end process, which remains central to what I do, and what most of us in the tech world do — trying to conceive of something valuable, making it, and getting it in the hands of those who can benefit from it.
I’ll say that despite what I just said about powerful platforms, being the sole developer on a project was also valuable. Not being able to rely on someone else who’s good at UI work, for example, forced me to learn things I otherwise would not have, which ultimately made me a better hobby iOS developer ;).
There’s a theme here which is actually universal and quite profound: this incredible power comes from specialization, or more accurately, from abstraction. Technology proceeds, like science, almost exclusively through hiding complexity behind useful abstractions, allowing everyone to specialize deeply in one complex thing, and benefit from the complex work of others that is exposed to us through simple interfaces. This incredibly powerful move create an real risk of losing site of the whole — either because we don’t develop the skills necessary to generalize and synthesize, or because we over-rely on our abstractions, and fail because we don’t know enough about the underlying implementation. I’m using the language of software development, but it’s just as true about economics, policy, growing a business, whatever you like. The ability to generalize and synthesize matters a lot and may be undervalued.
3. Refactoring is Really Fun
If you’ve ever managed a team of software developers, one of your biggest worries is balancing out the fun work, assumed to be making features and things that people use, with the crap work, assumed to be testing, debugging, optimization and refactoring. Maybe that’s not true everywhere, but it does come up.
Well, I was surprised to learn that in my project, I had the most fun when I was rewriting stuff I had already written — usually because I had learned something and was replacing some horrible, hacky thing with a more or less “right way”. But that wasn’t the fun. The fun was just the same fun as organizing your closet, or cleaning out the fridge (preferably by making a meal with all the weird stuff in there, not just throwing it out). In other words, a fundamentally obsessive form of joy.
I was surprised to learn this about myself. Back when I did code, I was not a big refactorer. Or rather, I never could relax enough to enjoy refactoring — there was alway someone wanting something, so it was always under pressure. Well, with no pressure, because you are the boss and it’s just a hobby project anyway, refactoring is simply the best. So fun. I wish I could go back and suck at Swift as much as when I started so I could have all the fun of rewriting my app again and again. Luckily, I am pretty sure I still suck, so future self can rest assured of lots to refactor. Plus things change fast: here comes Swift 6, iOS 18, XCode 16, new versions of every SDK, etc. And, Gen AI. Phew.
4. That’s Enough
All right, that’s enough for now. This project has even inspired me to write again, so I may have more to say here soon: perhaps about the power and perils of obsessiveness, perhaps about the problem I am trying so solve with Heresay. TBD. Peace.