On par for success

Success. Well, on par for success.

I’ve archived both PermissionScope and Pantry after finishing the maintenance releases I aimed to complete. I feel great not having those two things on my plate and I’m confident that I can deflect any new changes that might come through until a later date.

I don’t have a concrete plan for the next improvement to That Thing in Swift yet but I’m thinking about a few ideas. First, the community really enjoyed the post about writing your own API clients so I’m considering something along the same lines: a dependency that lots of people use that can be replaced with a small amount of good Swift. I like the idea because it’s different than what most Swift blogs write about - usually just an introduction to using x in Swift - and it requires a bit of creativity. I’d like to experiment with a few other ideas here, maybe some livecoding/video that incorporates actual code snippets that people can copy or follow along with.

Every time I think about finishing the work required for another Treat release, I keep coming back to the sending issue. Part of the reason that it didn’t work out is that there was no compelling reason to send a treat to a friend, even I didn’t do it that often. I’m hesitant to put more work into a part of the project that won’t fix a core issue. I still consider the sending issue every once in a while, I’m looking for a simple hook that could change the reasons for sending to something meaningful which would get me working on all those pieces again.


The last few posts have been new ideas! so let’s review: Pay by Tray is still an interesting idea but unless a restaurant owner who was really psyched about it fell into my lap, I probably won’t go anywhere with it. If that happens in the near future, I’ve already done enough thinking on it to ramp back up quickly enough. Successful projects (of this scale) require deep connections or lots of luck. I don’t have the former so I’ll keep it in the back of my head in case the latter appears.

Watercooler still fixes a problem I have (not enough social interaction while remote contracting) but I came up with a slightly different plan to tackle this for the time being which is probably better for me right now. This issue will probably be more prevalent in the future as remote work is more common and I still think it’s an interesting problem to solve (in an interesting way, not necessarily this one). In the meantime, you can sort of force this by just jumping on a random blab when you’re bored. It seems like most of the people there are in various states of boredom anyway.

I briefly looked into the tech I would need to build a stream of conversations from your friends on Twitter as mentioned here again. I came back to the idea after a while because it’s sticking in my head like a thing that might be a fun way to see what’s going on just outside of your social circle. And it seems like a thing that could be popular. I took a stab at it with pure js the other day but it looks like I will have to do some sort of oauth implementation which is more complicated than I wanted to get into. I then jumped over to Go to see if I could figure out the API calls needed to discover conversations in the first place but I ended up not wanting to spend a couple hours just getting back up to speed with Go. If I’m only interested in proving that it’s an interesting idea at the moment, I might as well do a quick swift implementation on the phone or iPad since that will be the least language friction (but UI still required).

I think I covered this before, but I’ll reiterate that ideas are super cheap and saying “No” (or just letting things die in this case) is not something that I’m concerned about. I like looking back on all this regardless of success.

Projects and Watercoolers

Many little changes since last time. I resolved the last remaining PermissionScope issue and the release went out just in time to get back on the Swift trending list on Github. 36 ⭐️ so far today, just passed 2000 overall! I would like to move this project to “archived” and defer any new work until later - for me, this is easy. I still have to figure out how to communicate this effectively to new PRs that come in 😬

I finished off a new post for That Thing in Swift regarding building your own API clients in Swift. It was definitely a hit, lots of tweets and talk about it which gave the site its best day ever (just over 2k uniques and almost 3k views 📈). Most of the traffic on a normal day is from organic search which increases naturally as more people learn Swift but my goal is to actually hit more first page search terms. It remains to be seen if just writing more posts == more search traffic.

I did a bunch more work getting the blog category pages working. Now if you click on a project in a post, you’ll see all posts mentioning that project. I really think the color coded project names help a lot with this! I can scan a bunch of posts and identify the paragraphs mentioning that project fairly easily.

Pantry had some new, good pull requests which I merged in. I’ll be setting up a new 0.3 release soon but I want get releases working via fastlane so making a new release isn’t such a pain. Prototype here, make sure everything works OK and then I can move the process to PermissionScope .


Lastly, a new idea: I realize (now, finally) that working from home has some serious drawbacks in terms of socialization. Maybe this seems obvious to you but I never really considered how much I enjoy miss meeting new people and hearing about their projects and sharing my own. There are lots of ways to accomplish this, I’m trying to figure out which one is right for me.

A Virtual Watercooler

One idea I’m playing with is a combination of pomodoro timer and video chat. An app of some sort that times you for 30, 60 or 90 minutes of work and then connects you with someone else taking a break from work for 5 minutes of chat about what you’re working on and how it’s going, that sort of thing.

I actually like the idea that you’d run into the same chatters a few times over the course of a week, it gives you an opportunity to learn about the process other people are going through. It behaves a bit like a water cooler where you have a chance to run into a finite set of people but which one is semi-random.

Still thinking about how to set up a minimal test case without too much engineering (remember our promise?). Probably just a website to start!

Coffee and phone calls

I thought a couple weeks of interviews would give me some nice downtime to wrap up a few projects. Turns out NOPE, it’s just an endless series of coffee dates and phone calls.

A few people have warned me to be super picky - possible because of the incredible demand for iOS developers - which is a great position to be in but also quite daunting. I still want to go through the first couple of steps with most people, until the ‘cons’ list starts piling up at least.

Perhaps this is what normal non-engineer days are like? There are people who essentially have ‘coffee and phone calls’ as their job description. That would probably take some getting used to but not entirely impossible.


Still, a few things did get done in the first half of the week. I made the necessary fixes for a much needed PermissionScope release. It’s mostly cleanup and bugfixes but I think I let the whole open source thing get away from me a bit so this was an attempt at getting the project back under control where I understood everything that was going on.

Try Again is actually on the public internet now, albeit in very rough form. It’s the standard publish-with-hugo-sync-to-s3 method I’ve been fond of for a while. I’m still narrowing down how to manage all the project views in the sidebar. I think it’s going to require some fancy templating work but that’s what I’m good at (definitely the thing I was known for when working on Movable Type), plus Hugo has an interesting data-driven content tool that I’ve been itching to experiment with.

The remaining time was spent on the couple bits of contract work I have currently. I don’t find balancing client needs all that difficult when all I’m doing is contract work but when I’m trying to work on other projects or interviewing it starts to reach the conflict zone. Still, it’s not a ton of hours right now so it’s relatively calm.

Try Again

I tend to work on a lot of projects simultaneously. Actually, I try not to do them simultaneously, it messes you up if you’ve got to context switch too rapidly through your day. But I start lots of projects and put them aside for a week or a month when something else comes up. Sometimes they get revived, sometimes not.

And that means lots of failures. Either from lack of interest or time or both. I don’t think that’s necessarily a bad thing but there are two things I wanted to be more mindful about related to this process: being clear when I “archive” a project (decide to stop working on it) and having a better understanding of the stuff that I want to do and how long it’s been since I worked on it.

To that end, you’ll find my quick tracker on the left side of the page. It’ll highlight any projects mentioned in the current post or give you a list of everything on the main page. Plus it’ll show a visualization since the last time I posted about each project (hopefully equivalent to the last time I actually worked on it) and archived projects will be listed below that with an indication of if they’re “finished” or not.

The idea of something being “finished” isn’t super important to me. I’m far more concerned that I keep trying to learn new things than about bringing each idea into a fully formed state. Some ideas are interesting but a product that is based off those ideas isn’t. Who’s to say you have to make everything into a product anyways?

The important thing is that we try again.

So this is going to keep me honest. I want to report a few times a week on progress for each item that isn’t archived, forcing me to move forward or abandon an idea.

Ideally, I’d like to have 2 active projects at a single time and be strict about not working on archived projects until there’s time to do so. Maybe that means building a little backlog of PRs on github before I make a new release but that could be OK, I’ll give it a shot at least.

Wrapping up treat

It seems like we’ve reached an impasse with Treat . It’s been our focus for almost a year now and while we’ve learned quite a bit about what people want and don’t want, there hasn’t been enough interest in any direction to really warrant the continued effort in the product. That said, I still think two key points we got right will define whatever product wins the mobile gift card segment in the future:

  • You can send a gift card to anywhere (or nearly so)
  • Interactions with your friends during/after sending

The plan is to keep it as a side project so anyone with outstanding treats can still use them and new users can send them. I even have a couple new features to roll out that are mostly done before it really goes into cold storage: full on sender-to-receiver chat (powered by Layer) and a new way to get info about your treat location (business hours, photos, etc) will be heading to the App Store soonish.

I’ll probably write a longer breakdown of the issues faced once that release is out.


Other things for this week: I am writing posts for Try Again before it even exists! This is traditionally opposite of how I usually do things (build first, write later) which doesn’t often work out. In general I tend to gravitate towards the “hard” engineering work first and the actual content or validation steps later which may have been the root of some initial issues with treat 😁 So we’re giving the reverse process a shot.

I lied just a little bit: I did doodle a quick design for the blog and started working up a quick template in Hugo before I started writing this. But it’s by no means complete (I don’t even think I can see this post yet). So the plan is to see how much I like writing about current projects a few times a week and slowly build a local site around it just to see how it feels. I’d like to have a rough site by the end of this week.

I asked around for some connections related to Project Y . I should put together some of the research I’ve done in the case that I get a meeting. I already know one company with a similar goal, though their technology choices make me wonder if they’re competent. It’s a bit of a stretch but I’ll keep tabs on it until it plays out.

I must, must, must resolve the issues with the upcoming PermissionScope 1.0.2 release this week. We’re encountering more and more people creating issues for stuff that’s been fixed and not released so it’s starting to be a drain. Still no great plans for how to test the project because of the complexity of permissions on iOS. Still thinking about it. I’m happy with the contributions and progress for Pantry so far, I should review the enum support and get that pulled in this week. Also, I have a plan for getting a bit more attention for Pantry that I should try this week.

While we’re on Swift, I started writing actual technical posts on That Thing in Swift again during the break. I realized that I’m being dumb not capitalizing on the insane Google ranking I have for some swift search terms so I might as well put a bit of effort into expanding the topics covered. Most of the blogs/results are slow and littered with ads so the least I can do is give a non-shitty alternative. So far I’ve published a piece on guard statements and I’m working on why you want to write your own API clients (as opposed to ad hoc usage of Alamofire or something).