Tim Ekl — who is unburdened by a lengthy signature — is part of the team that makes OmniFocus. He’s been at Omni for seven years, and came here straight from college — where his professor was Curt Clifton, formerly of Omni and now at Apple.
Tim helps organize Seattle Xcoders, and his hobbies include running servers and cheering for the Seattle Sounders. He is apparently on a quest to have a taste of every single beer in the world. We hope that this will keep him busy.
You can find Tim on the web: @timothyekl on Twitter and on his website timekl.com.
Some other people, places, and things mentioned:
Brent Simmons: You're listening to The Omni Show. Get to know the people and stories behind The Omni Group's award-winning productivity apps for Mac and iOS. Music.
SFX: [MUSIC PLAYS]
Brent: I'm your host, Brent Simmons. In the studio with me today is Tim Ekl, OmniFocus engineer and man with a very short name. Tim Ekl. Say hello, Tim.
Tim Ekl: Hello, Tim.
Brent: We'll start with just a couple listener questions. Multiple listeners have asked, and this may be difficult to answer. "Is Jim Correia right?"
Tim: So I've given this some thought, and I think the answer is, often.
Brent: Often?
Tim: So often right, I'm not willing to cop to all the time.
Brent: Okay.
Tim: But I think if I don't give him better than a fifty percent success rate, I get a demerit or three.
Brent: Oh yeah.
Tim: And that's something to avoid.
Brent: Don't demerits usually come in threes?
Tim: They almost always come in threes.
Brent: And he's generous with them.
Tim: He is.
Brent: Which is stretching the meaning of the word generous.
Brent: So then Jim Correia asks, "is Evan McNulty right?"
Tim: Oh, flipping it around?
Brent: Yeah, you see the trick here.
Tim: Yeah, so he's trying to set me up, and I'll give Evan an “often,” as well. Probably… I'll set them up against each other. I think Evan's a little more right than Jim.
Brent: Ooh, smack down! We're going to have to have a future episode where the three of you are all here, debating whether or not Jim is right. We don't even care, Jim, right about what in particular, it's just the question.
Tim: It's the blanket statement.
Brent: So, you're on the OmniFocus team, engineer, what do you do? What's your thing?
Tim: Lately the last couple of years my thing has been the data model and sync. Whenever we're talking about making any kind of changes to your database, whenever we're introducing new clients, whenever we're letting you move new kinds of changes around between your Mac and your iOS devices. At some point I get involved, and I work on how we represent those things on disc and how we move them across the network.
Brent: So you're all into XML and WebDAV and all these.
Tim: Oh yes.
Brent: There's some SQLite involved in here?
Tim: There's a bunch of SQLite involved. There's some encryption, a crypto layer for making sure your data stays secure. We get to play with all kinds of third party sync services that are all still WebDAV but maybe work a little differently. And then whenever there's a problem that someone reports, that winds up in one of those layers, a lot of times I get my hands on an anonymized copy of that database and it's my job to spend a couple days and figure out why.
Brent: That sounds like fun, if you like that kind of thing.
Tim: Yeah, it's certainly interesting.
Brent: Was all that syncing code originally yours, or had you taken it over? I guess you've been on the project like seven years.
Tim: Yeah, since I've been at Omni. Actually, my very first feature at Omni was Reminders capture from Siri. That was the time when Siri was just starting to get to let you dictate reminders into the system Reminders app and we wanted some way to get those into OmniFocus.
Tim: I started off in the model, because you know I have to work in the model in order to create new tasks in your database. But I didn't come into syncing until a few years later when I was working on attachments, I think. Something like that.
Brent: Is Focus the only app you've worked on here?
Tim: Yeah, I mean there're very occasional detours I take to make sure that I change over and Focus doesn't break someone else, but, by and large, it's the only app I've spent any significant amount of time on.
Brent: I've heard that in the old days, a new engineer would often be assigned to something that isn't customer facing right at first, and you managed to skip over that, it sounds like.
Tim: Yeah, a lot of new folks get assigned, or got assigned I should say, to OmniBugZapper, our internal bug tracking tool. And I think because I joined up in the summer and there was a lot of work to do, and it was right after WWDC, and we had a ship date coming up, so I managed to dodge that assignment.
Brent: Because you were needed immediately. That's how summers go.
Tim: That actually came back to bite me a couple years later when we had some interns in and they were assigned to work on OmnBugZapper. They would come to me with questions and I'd have to say, “Well, I don't know. Let's read some code together.”
Brent: So did you end up doing much user interface work then? Given that you're mainly in the model and syncing and all that kind of stuff?
Tim: I'll still do some, whenever there's a kind of major new feature, I'll wind up implementing it in the model and then kind of bubbling it outward to the user interface. So, for example, this latest feature that we're working on with dropping actions, I started in the model and then have done a bare minimum user interface so that we can at least start testing it and then I'll polish it up or someone else will take it and drive it that last mile over the finish line.
Brent: That's cool, you get to work in all parts of the app, essentially. Assignments aren't rigid, you're not like the guy who only does this.
Tim: Right. It's like the native app version of being a full stack developer.
Brent: Yeah, there you go. That makes sense. What are some of the rewarding aspects of working on OmniFocus?
Tim: There's a bunch. One of the things that really stands out to me is how I can see such a direct impact on our customers. There'll be times when I'll work on a feature or fix a bug and it'll get rolled out into a release a couple of months or even a couple of weeks later, and I can immediately see people posting about it online, saying, “I used this and it really changed my workflow,” people write in and thank us for fixing a crash that was really affecting them a lot, and that's really nice, that kind of direct influence is really nice to see. It's something that I think Omni does really well, where we focus on helping out our customers directly.
Brent: For those of us who've always worked on customer-facing software, it is one of the best parts, right? If you're doing enterprise or something, you learn that somebody made their numbers because of a thing you fixed and that's not as big a deal, it doesn't feel the same way.
Tim: Right. Or I get to implement a feature and get thanked internally, but never hear about how that actually played in the real world.
Brent: What about working on a team, where you're actually physically there with the people? Largely, I mean Reid’s not in, but mostly.
Tim: It feels like cheating to say this because, like I said this is the only company that I have worked at since graduating school, but this is the best team I've worked with. We all share that same customer oriented focus and we're all worried about what's best for the people who are actually using our apps. We all trust each other to do the right thing, we're all given a lot of leeway on making sure that the app works correctly and fits in on the platforms, is well architected, and at the end of the day it's just a really nice experience to work with everyone here. And that spans all departments too, it's not just the engineers that I chat with.
Brent: Testing, support, and everything.
Tim: Exactly. Design, marketing, everyone.
Brent: Marketing — that's what we're doing right here, hey!
Brent: There is a question from Tim Stringer, and he wondered what your favorite feature request for OmniFocus is, a thing that's not in there yet — and you're not promising that it will be — just wondering if you had a favorite feature request?
Tim: My favorite feature requests are always the ones that I could see using myself, and within that category there are the things that I would really love, that I think will never make it in there. Like I remember proposing a feature one time where tasks' highlight color got darker and darker the longer you ignored it, so it just kind of loomed over you until you finally finished it.
Tim: More reasonably, I think one of the ones — and again not even on the roadmap at this point, but I think people have been asking for mutually exclusive tags. You know we introduced the tags in OmniFocus 3, and some people use the tagging system to assign tasks an energy level. So you know this is high energy and requires a lot of focus and concentration, whereas these other tasks are low energy and I can kind of knock them out whenever. And you can imagine wanting those two to be exclusive, so you can't label something both high and low energy, and so people have requested a way to link those tags together and say, “If I assign one of these, unassign all the rest, or make sure I only have one on there.”
Brent: Meaning tags are sort of like enumerations.
Tim: Sort of yeah.
Brent: I'm back to thinking about the tasks that age, they should get redder and angrier as time goes by, and then eventually they should start making some little screaming sounds or something when they come on screen.
Tim: I think that's where the blink tag really makes a triumphant reappearance.
Brent: How have you found working on the code itself? It existed before you started, you've been on it for seven years, but is it a joy to work with? Is it rewarding to work with?
Tim: Yeah, I think so. Certainly it's a complex enough app and a complex enough code base that it's always interesting, I'm engaged, it's not like I'm coming in day after day to just kind of write the same rote repetitions of some boring form or whatever. There's definitely a lot of very interesting problems to be solved, and like I said earlier, we're all given a lot of leeway and we're all trusted enough to know when the time is to refactor or re-architect something, or to modernize a particular corner of the code, rewrite it in Swift, maybe. And so from that standpoint it's always been really fun to get a new feature to even a bug in an area that hasn't been touched in a while, be able to go to town.
Brent: How did you come to Omni?
Tim: I was first introduced to Omni by one of my professors at my alma mater, Rose-Hulman Institute of Technology in Terre Haute, Indiana. Small school, small town, entirely STEM focused: science, technology, engineering, math. The professor was Curt Clifton, who listeners might recognize.
Brent: I know that guy!
Tim: I'd had him for a couple of classes, for I think data structures and for programming language principles, and my senior year he took a sabbatical to come work at Omni for a little while, and about halfway through I got an email from him saying, "Hey, just wanted to let you know that Omni has an engineering position open and here's the posting. If you're interested you should send in a resume."
Tim: At the time I was going through all the mock interviews and the practices and everything, because I knew I need to line myself up a job pretty soon and I thought, "this actually looks like a pretty cool place to work," and so sent a resume in and I think it was like a month later I was crashing on the floor of Curt's office and taking my interview.
Brent: Wow. How long did you crash on the floor?
Tim: It was only the one night. It was an out and back.
Brent: How were the panels? Because what do we do? Do we do two interview panels?
Tim: I'll be honest with you, this was my first real interview. I had done a couple of the practice ones, but this was the one for a job that I could actually see myself doing and so I was pretty nervous about it and I don't remember a whole lot of the panels themselves. I'm pretty sure there were two.
Tim: We were in the previous Omni building at the time, Omni 4, and I think that conference room was pretty full, but it's all a blur.
Brent: Did they have you do the old whiteboard interview things? Reverse this linked list in place, or whatever?
Tim: No, in my opinion Omni was ahead of the curve on ditching those questions. The one thing I do remember they had me do was: Omni publishes a bunch of open source frameworks, and so they had me pick out a class from the frameworks, or they picked it or something, and said, "Here's a link to some of the code that we've written, that we're shipping, it's in our production apps today. Look over it and we'll talk about it when you get here. Prepare some questions, make sure that you have a general sense of what the code actually does and just be prepared to have an intelligent discussion." And I thought that was a really cool interviewing tactic, because it reflects what you would actually be doing in a job where you have to walk in and read code in a code base, without relying on kind of the gimmicky, "Do you know what a linked list is? Can you manipulate a pointer?" That kind of stuff.
Brent: So, did you pick the class?
Tim: I picked the class, I read all of five lines into it before I got hung up on a macro.
Brent: Sounds like my first day at work here, actually.
Tim: It was still Objective-C at the time right, Swift had not been invented yet and so one of the first thing that I stumbled across was our macro that we put in all our files, called RCS ID, and what it does is embed some information about the file into the compiled binary, so it goes straight from the source into the binary so that if we get that binary back or we need to analyze one of our apps that's already been built, we can pull out that version information, no matter what.
Brent: And so you had to figure out how that worked?
Tim: Well, I don't think I had to, but I certainly got distracted and then I did, and so most of the discussion that was supposed to be about this class, this gesture recognizer class or whatever, wound up being about tricks you can pull with C macros instead.
Brent: I'm wondering, the origin of that macro, would it have been a Tim Wood thing or a Wim [Lewis] thing?
Tim: I'm betting it was Tim or Ken, cause it lives down in OmniBase, which is a 1990's framework.
Brent: That's an old bunch of stuff there. So before Omni, you were at college, Rose-Hulman, you grew up in Chicago?
Tim: We say Chicago, everyone from that area says Chicago, really it was the suburbs.
Brent: Chicago, roughly. It's like if you live in — I think Gus [Mueller] often says Seattle, he lives in Mukilteo, but Seattle area. What was that like?
Tim: I don't know, it seemed normal. I knew I was into computers really early.
Brent: Macs?
Tim: Oh yeah. First computer was a Mac LC III, if I remember right, so I knew I wanted to get into computers as a hobby, as a career, and that's part of what sent me to Rose and eventually to Omni.
Brent: So, how did you get involved in the Seattle Xcoders? We should first say for our listeners who don't know, it's a local group of, largely developers, but it doesn't have to be limited to that, and we've got three locations now: Seattle, Redmond and Vancouver, and the idea is we meet once a month or whatever it is, there's talks, then some socializing afterwards, and you're one of the organizer nowadays.
Tim: Yeah. It didn't start out that way. I actually first started attending the related group [NSCoderNight], which is less a tech talks meetup and more of a come do a coffee shop, bring your laptop, bring your projects, Q&A sort of a thing, where you can get help from other nearby developers, and after going there for a couple of weeks — I think that was another group that Curt had introduced me to right after I moved out, because I wasn't familiar with the Seattle area and he had just spent a year getting acclimated to the Seattle area, and so could pass some of that forward. So he brought me to NSCoders and then I think Hal Mueller might have introduced me to Xcoders on Thursdays, and so, went to a couple of talks and I became a regular there, and over the years just got more and more involved. Now, here we are.
Brent: Now you're organizing. Is it a lot of work?
Tim: Thankfully no, it's pretty light, as far as workload goes, and we take some steps to keep it that way. We don't want to have to be responsible for all of your money, for example, so there's no dues, we don't collect or disburse any kind of money for that.
Brent: Yeah, that's a good thing, because that changes everything.
Tim: So mostly my job entails lining up speakers and making sure that they have all the resources that they need to succeed, and even that is less onerous than it sounds, right? We'll meet up every couple of weeks and someone will be talking about, "I had to solve this interesting problem at work a couple of days ago," and I'll say, "Oh, that is really interesting! You should think about giving a talk about that." And it turns out that if you do that for long enough to enough people, you kind of get a backlog of folks who have a topic that they can talk about for twenty minutes, or forty minutes, or what have you.
Brent: So what's the rewarding aspect of Xcoders? I think I can think of one offhand, that might not be obvious which is that it seems that a lot of the speakers are new speakers, like it's their very first time.
Tim: Yeah, I like to run the numbers every year and see how many of our speakers are brand new on stage, and I think last year was right around 50%.
Brent: Oh, that's amazing.
Tim: So we meet, talks once a month and we'll have anywhere from one long talk to five or six lightning talks in any given month, so it's upwards of a dozen people who have never given a talk before, who get to come to Xcoders and have this really receptive, really welcoming audience shepherding them on.
Brent: I've always liked that the audience is rooting for the speaker to succeed.
Tim: Oh, absolutely and that's what we tell a lot of people. They're afraid that they'll get up there and that people will be pointing out their mistakes, but in reality what happens is you give a talk and everyone is so eager to tell you what went right, what they learned or what you explained really well.
Brent: And we've had some people come through Xcoders who've then later gone on to do a lot of talks at bigger actual conferences and so on.
Tim: Liz Marley has made quite the pattern of starting or practicing a talk and then polishing it up and off she goes to the conference circuit and she's come up with some really great technical talks that way.
Brent: And I think we will soon have Shannon Hughes, our coworker, doing kind of a beta version of her talk at Xcoders, and she's delivering it at UIKonf, I think.
Tim: Yeah, out in… is that Berlin?
Brent: Sounds right. I'm not sure. But also the social aspect has to be important.
Tim: The community is hugely important, and that's one of the most rewarding parts for me, is that I'll go to every talk and listen and enjoy the presentations, but it's not like I can go to a talk about, say, a filmography app and come back and apply that to OmniFocus. It's not technical information that's going to be immediately applicable to my work, but at the same time I get to go out, I get to see all the local developers that I might not otherwise have a chance to cross paths with, to encourage people in their own work and hear about what's new at other companies and what other tech trends there are. So it's definitely as much a social group as it is a technical one.
Brent: One part I really like is, even if the talk has nothing to do with any work I would maybe ever do, I like learning a bit more how other developers think, cause it helps round out my own ability to think, which is nice.
Tim: Yeah and in that vein, it's really nice when folks who are not developers by day come and give talks. We've had some great talks by designers and from business people who are talking about, maybe other aspects of building or of marketing or selling apps, and again that's not something I'm going to do, but it really helps me to understand how apps succeed and flourish in the marketplace nowadays, and what best practices are in other fields.
Tim: I think our best attended talk ever was the one about design and implementation for the Apple Watch. It was a joint engineering and design talk back in January '17, early in the year.
Brent: Do you remember who did the talk?
Tim: That was Curt Clifton and David Huang.
Brent: That's a powerful duo right there! No doubt! Speaking as we did a few seconds ago of Liz Marley, she asks, how many servers are in your closet at home?
Tim: Oh, that's a loaded question. I think right now… There was just an electronics recycling event a couple of weeks ago, so the number has dipped a bit. I think there are four powered on and another two or three sitting idle, but it's definitely down from the heyday when it was close to a dozen.
Brent: That's a lot of dang servers! So why all the servers, what are you doing with all these machines? Are you mining crypto currency?
Tim: I'm not mining crypto currency. I think my electric company would have more to say to me if I were.
Brent: My follow up question was going to be — do you have squirrels in wheels running your electricity?
Tim: So like I said, I knew I wanted to get into computing at an early age, and then it's been a hobby of mine for a while, and one of the ways it manifests is I'll come in and write code all day, so when I go home I don't necessarily want to be writing more code to unwind, so instead, sometimes I like to see, I think nowadays we would call it devops or sysadmin work. I kind of like to experiment and play around with hosting some of my own services, so a couple of my websites are hosted out of the house, there's a mail service that I use that I host, and of course it's not super reliable right, like if the power to the internet goes out to the house it's going to go down, so I wouldn't use it for business purposes, but for signing up for mailing lists here and there, it's perfect.
Tim: I have a source control, I use GitLab. I've really gotten into Docker in the last month or two. That turned out to be really helpful, just serendipitously I needed to work with Docker three weeks after I learned it on my own, so.
Brent: It's funny how often that happens.
Tim: It was a neat coincidence.
Brent: So my question, I guess I'm a listener. I do, I listen to every episode, so it's a listeners question.
Brent: My question is, why all the beers?
Tim: All the beers. In addition to having a computing hobby, I tend to be a bit of a completionist in a lot of things that I pick up.
Brent: You know there are a lot of beers, so being a completionist is...
Tim: I'm working on it. I found this app a few years ago, it's called Untappd, and in the tradition of app naming at the time, it was spelled without the 'e'.
Brent: Naturally.
Tim: And it's one of those where you can go and, you're drinking a beer and you can just type in the brewery, and the name and it pops up a list of suggestions, all crowd sourced, and you can pick it and say, here's what I think of it, give it a rating, describe the flavor, say where you bought it, who you're drinking it with, that sort of stuff and after a little while I noticed that it started keeping statistics of how many beers I've had and how many were unique, brand new that I had never had before. It'll give you flavor recommendations as well, and say, last time you had this beer you rated it at four stars or two and a half stars and you have it again, think about not having it, what have you, but my friends and I noticed that you can look at each other's beer counts.
Brent: Of course, it's a social app.
Tim: Yeah, so this got competitive pretty quickly
Brent: I have to ask what are your actual numbers here? Total beers is…?
Tim: Total's about 1500 and of those the uniques are about 1200.
Brent: That's pretty high, that's a great ratio
Tim: Yeah.
Brent: You're not repeating beers much.
Tim: No, and like you said, there's a lot, and so I always feel really good when I'm at somewhere that the beer is listed as out of production or something, cause what that tells me is that I get to drink one of the last of these and that no one else I'm competing against can check it in.
Brent: Nice. So, do flights count?
Tim: Oh, flights absolutely count.
Brent: Cause you've tasted it and that's enough.
Tim: There's I little field in there for serving style and one of the options is Taster, so people try to guilt me about it, you didn't have a full pint of that, but I say no, no, no, it's a taster.
Brent: It seems that's going to be a lifelong thing, because you're not going to reach the end of the beers, no matter how completionist you are.
Tim: Yeah, there's always somewhere new to go, always something new. New breweries popping up.
Brent: I've got a friend. His opening is pushed back I think till August, but it will be a new brewery in Ballard coming up.
Tim: Excellent! One of my favorite stories about finding a new place is, my fiance came home one day from work and said, "Hey, do you want to go on a beer adventure?" So, "Well, tell me more," and she goes, "Well I'm driving home and I notice that there's this garage warehouse store that's open and it's got a banner hung across it, says Dirty Couch Brewing." We've never heard of this place and it's not a tasting room or anything, it's just a warehouse. It's a Friday afternoon, what else am I going to do? So we walked down there and sure enough there's a guy just with a folding table and a couple of open bottles of beer pouring tasters out of his stock.
Brent: Was it good or did it taste like a dirty couch?
Tim: It was really good. It was maybe the most unfortunate name for a brewery that I've visited in Ballard, but the beer was really good. They're exclusively sour beers.
Brent: Okay, you're a fan of sour beers.
Tim: Yeah, there was a barrel-aged sour they had that I really liked.
Brent: What's barrel-aged mean?
Tim: As it's fermented or once it's close to done, they'll take the beer and seal it in a barrel that had been previously used to age some kind of liquor.
Brent: So it could be whiskey or something.
Tim: Yeah, this one might have been sherry.
Brent: Does it then pick up some notes from what had been there?
Tim: A little bit, yeah. I mean certainly the flavor is mostly baked in from what the beer is fermented with, but it will definitely be influenced by the wood in the barrel.
Brent: So, Sounders game today. You going to it?
Tim: Oh yeah.
Brent: We're recording, listeners, on April 24th, so there might not be a game when this comes out, but...
Tim: But today it's San Jose.
Brent: San Jose. Bay area, they're terrible though, right?
Tim: Not as good as the Sounders!
Brent: Okay, that's what matters.
Tim: Sounders have been pretty good this season. Didn't do so hot this past weekend but, other than that I think it's one of the best starts in the league in quite a while.
Brent: Good! So that's association football, right?
Tim: … yes?
Brent: Isn't that what they call it? In earlier episodes I remember teasing Kristina and I think Curt over "association football" as the name.
Tim: Probably. I'm from the Midwest. All I was ever raised to call it was soccer.
Brent: Go to every game?
Tim: Go to as many as I can. I've got season tickets I've had for quite a while. That was another thing that coworkers got me into. There was a big group of folks here at Omni that would go to every game and over time I'd be borrowing tickets and then be buying tickets and eventually realized I was going to well more than half of them, so I thought all right we'll just get season tickets and that block has kind of dwindled of late, but I've still got the tickets and we still make it down to just about every one we can.
Brent: We'll wrap it up then. Thanks Tim. How can people find you on the web?
Tim: People can find me at my blog at timekl.com or on Twitter @timothyekl.
Brent: I'd also like to thank our intrepid producer, Mark Boszko. Say hello Mark!
Mark Boszko: Hello Mark.
Brent: Mark always tries to mimic exactly how I say "hello Mark."
Brent: Say, Hello Mark.
Mark: Hello Mark.
Brent: And especially I want to thank you for listening. Thank you. Music!
SFX: [MUSIC PLAYS]