Welcome back to The Making of a Development Team, where I get to interview my teammates and show what we are made of. I rounded up 14 fellow Detroit Labbers to talk about what they do, what they love, how they got here, and what makes them tick.
For today’s post, I interviewed iOS developer Jeff Kelley to talk about how he got started, powering through iOS before there was any help on Stack Overflow, and his advice for developers working to make it. Some of the things that I admire most about Jeff are his attention to detail, his incredible punning skills, and his ability to help others and mentor. He is one of our most experienced iOS developers, a regular on the speaking circuit, and has written a book (with two editions) on Apple Watch.
You graduated from the University of Michigan with a degree in Philosophy, and from my feverish Googling, it covers such topics as ethics, epistemology, metaphysics, philosophy of language and mind, philosophy of science, and aesthetics. How do you think your undergrad education has helped you develop apps for people?
There’s one you didn’t find, which is symbolic logic. You could argue that ethics could add to it as well. There’s a way of ordering your thinking logically.
I don’t know that I have ever had a passion for philosophy, so I don’t think that studying it has necessarily helped me build apps for people. Initially, I wanted to be a French teacher, but I had lost interest in that, as well as political science. Eventually, you have to pick a major and try to graduate, and I took an intro to philosophy class with an awesome teacher. It was a lot of writing, which is something that I am good at. Somewhere in the mix, I took an intro programming class, which was really the easiest class I ever took.
What got me the most interested in programming would have to be my job in the Fishbowl.
Let’s back up to freshman year. I had to get a job on campus, so I started applying for different jobs here and there. The first job I got was as a nude model for the art department. I got a robe and showed up for my first day, but as luck would have it, all of the art classes that required nude models were at the same time as my classes, so I never actually got to model. I was in the system but it never happened. The job that I got and actually worked at was in the Fishbowl, the computer lab in Angell Hall, refilling the printer with paper, and helping people who didn’t know how to print from Word.
There was a giant orange cone with a sign that said ‘stapler.’ And the number one question? “Where is the stapler?” It was an overnight shift, so I would do all of my coursework at work because usually, I was not doing anything. I was hired my junior year as a temp in the administration department, and that then led to a full-time offer my senior year. It was really nice to have my first job after college lined up right away. I never had the postgrad “what the hell am I doing with my life?” problem, and I am forever thankful.
We’ve talked before about your interest in Apple Watch, specifically, the book that you wrote on development for it. I want to go back a bit and talk about your work with iPhone.
Okay.
You started working on iOS at the beginning. How would you say that it has evolved from a developer point of view?
Every year they do things to make your life as a developer better. Looking back to when I started, there are things that are very easy to do now that took 10x longer back in its infancy. I went to the 2008 WWDC where they announced the iPhone. There were no books, there were no Stack Overflow answers about it. You would go to Stack Overflow and search iOS, which would show you posts about Cisco. At the time, Cisco owned that name. Now there are so many resources to help get things started.
There’s also Swift. Not that it’s easy now, but there are more resources and there are things that are laid out better in the development tools.
When I was starting out, I was doing freelance work on the side when I worked at U of M. The first app that I got paid to build was for the company where my father-in-law worked. They needed a bug tracker for an internal app that they used. It worked fine, but I was nervous about it tanking, so I wanted to do a really good job. I was trying to get more clients, so I was selling half of the time and working the other.
Another app that I worked on was for a company that wanted to pitch apps to school districts. My job was to make a demo app for a school district, but the guys that owned the company were very unclear about what they really wanted, and they didn’t have a designer, so I spent most of my time trying to make the app not look terrible. Because I am not a designer, I used their colors, and I was like, “Well, ok, here, in a grid, are the sections of the app.” It was a very 2008 app, screen with a grid of icons, it really was not great. I don’t think it really did much for them.
I realized that I wasn’t selling them an actual app — I was selling a sales tool. Sales tools are all design and no actual code. That experience is why I do not do freelance. I need to work where there are salespeople AND designers. You have to know your own strengths.
What has been your favorite improvement to iOS thus far? What has made it fun? What do you love about being a developer?
I don’t have much to compare to because I started as an iOS developer, and I don’t know about switching to Android. All I can compare with is what it used to be like developing for iOS. The biggest change between now and then has probably been all of the ways that the compiler can help you avoid writing code. Memory management is done for you now. There’s a lot of things that you can do that write the code for free, whereas before it would be a huge pain in the ass.
You’re one of our more experienced developers here at Labs, but how did you cut your teeth?
When I was at U of M, there was a guy there who used to run the Mac department who would do a weekly “Let’s learn how to program in C!” course. We would do little C projects at a coffee shop. The tool that I used for my job there was Radmind, and it used C, so learning it was incredibly helpful. If I wanted to fix a bug, I would have to do it myself because there was no team with dedicated time to actively fixing Radmind bugs. Submitting patches to Radmind was my first collaborative software development experience. It was the first time that I showed other people my programming work. That same guy and I, in my last six months working there, were part-time helpers on the U of M iPhone app. And that is where I first learned about story cards and agile methodologies.
Those were the super-early days of iOS, and that was when I first started learning about concurrency and multithreading.
We can’t talk about specific clients, but what has been your favorite feature/app to build?
I worked on an app that would let you visually build your food. There’s a sad ending to this story (well, sort of), but initially the client wanted to build an iPad app that had 3D graphics. At the time, my only experience with 3D graphics was on another app where I wrote in a day and was very sick, so I didn’t recall a lot about how it worked.
When building an app with 3D graphics, at least at the time, if something was wrong it would just show a black screen. So I had to go from that point to being able to show what they wanted on an iPad. When we first started, it was supposed to run on the first-generation iPad, which was not a strong device, and another program that our client was considering used Unity, which would bloat the app. My version could be dropped in like an individual view. We went to demo, and it was like a house of cards. The build broke at the airport, and while I was frantically trying to fix it, our flight was delayed enough so that we were going to miss the meeting. Luckily, this delay gave me enough time in my hotel to implement the final touches and make it look better, faster, and more streamlined. That extra time ended up being very instrumental, and the client was blown away. Then we shipped, it was awesome.
It was stressful learning something new on a crazy deadline for a big client, but I crushed it. I was so proud. I had built a system where I could draw a thing in the 3D world and draw other things that would interact with it. I had to pull a physics engine (Pixar uses this for movement) to make the other objects move around according to the laws of physics. The app shipped in April, and… here comes the sad ending… in June, at WWDC, SceneKit for iOS was announced. This library specifically allows you to position 3D objects. The total development time that I had just done manually would be 5x to 10x less.
Luckily at that WWDC Xcode introduced really awesome debugging capabilities that allowed me to troubleshoot the 3D code I wrote.
What advice do you have for developers trying to make it?
You get mysterious black boxes in programming. If you ever have a line in your code that’s a mystery, where you don’t know why something works/doesn’t work, or works only under certain conditions, spend a day figuring it out. I have an advantage because I started developing so early on the OS. I had to do everything the hard way. After crawling through the underbelly, building features that now have libraries available, I have a deep understanding of how every little thing works. So, my advice is to dig in for a day, and see why a thing works.
You’ve given the “Dark Arts” talk about security and its importance over the years. What made you so interested in security, and how did you learn?
Security was part of my job at the University of Michigan, basically protecting people from themselves. There were policies we had even then that would seem good now, like assault, creepers, etc.
Here are a few examples. Users would log into a Mac at the lab, and there would be a user’s folder for that person each time they logged in. The user’s folder is the folder for your account. At one point, people could see that folder and know who was at that computer before them. If you were looking to follow someone you could log into computers in an area and follow a pattern. This was a problem, as you can imagine. To circumvent that issue we would move the user’s folder into a hidden location that every user couldn’t see. The folder would still be there, but it was invisible.
I realized that there is a thing at U of M which is AFS space. When you login, it doesn’t sync to the machine. It’s just a drive, so when you login you can get an access token. I realized that if I logged in as an admin, I could go in as someone else and use their token. So, all anyone would have to do is figure out how to get admin rights and look at someone else’s information. I made a script that deleted that token at the end of a session. I had 900 Macs that I was in charge of.
I also maintained a certificate authority, and all of the traffic from our server to our computers was encrypted. All the servers had their own certificates., When code signing came out for iOS apps, it was certificate-based, so I was ahead of the curve on understanding how it works. Taking these precautions, reading about security breaches, and seeing just how awful people online actually are definitely made me want to ensure that people were more secure.
There are rings of people who will basically trade people. The deeper you dive down that hole, the more you see what people can do, and the dangers that are posed to women especially. Cover those cameras. The reason I give the “Dark Arts” talk is because I want to give everyone three or four things that they can do to protect themselves. It raises the bar enough that someone won’t necessarily be an easy target.
What have you hacked on lately?
I’ve been working on a silly library called IRLSize. Essentially, it takes the dimensions of, say, text on the screen, and translates that into inches, or, how large it would be in real life. We initially used it for a watch project. Before the Apple Watch came out we pitched a watch app, but needed to show the client what the app would look like. So, what this library allowed us to do was simulate a watch app, to the scale of the watch, on an iPhone screen. How big is this thing? How big is this part of the screen? Or you can say, “Make this thing exactly this size.” So I just recently uploaded a beta version of IRLSize. iOS 10 has a new library for measurements, and one of the types of units of measure is length.
What’s next for you? You’re a seasoned developer, how do you plan to grow next?
I would like to do more product development ideas.
Lightning Round!
What did you eat for breakfast today?
I had a dark chocolate peanut and almond granola bar and a lot of coffee.
What was the last movie you saw?
Finding Dory.
If you had one item in the zombie apocalypse, what would it be?
A lightweight portable ladder. Zombies suck at climbing…. If you have a lightweight one you can put it against a fence, climb it, and then take it with you. I mean, you have a gun, which is a limited by bullets available, a bat with nails would be good, but that’s too close. Honestly, the biggest problem you have is getting away, so with that type of ladder you have a nice lightweight thing.
Worst decision you ever made?
Sophomore year of college, I drank a lot of pop. Mountain Dew had a contest to win an Xbox 360 before anyone would be able to buy the system. I won, which was awesome, but there was so much anticipation for this thing, that I could have easily sold this for $5,000, paid off my car, had money for college. Something practical that would have made my life easier for at least a short amount of time. What did I do? I played it.
Best advice you’ve ever gotten?
There’s a guy I worked with at U of M named Rodger. He was very instrumental in giving me opportunities when I started working. He told me once that you have to be your harshest critic and your biggest cheerleader. Some people sit around and wait for the promotion fairy, but don’t do anything to better their situation. So you can’t just sit there and do nothing and hope that the system will do something. The squeaky wheel gets the grease — all that kind of stuff.
Thanks Jeff! Stay tuned next week when I talk to delivery lead Kelsey Hilbers.