[SC]()

iOS. Apple. Indies. Plus Things.

10 Years of Hacks and Fixes: A Retrospective of My First Decade of Coding

// Written by Jordan Morgan // Mar 21st, 2023 // Read it in about 7 minutes // RE: The Indie Dev Diaries

This post is brought to you by Emerge Tools, the best way to build on mobile.

In what seems like the fastest decade of my life, I realized that this year, I’ve been in the programming workforce for a decade. Though, my coding journey starts earlier than that — at around 2008 I believe, but as far as being paid to do this stuff?

Yep, 10 years now.

Instead of taking you down memory lane with a 4,000-page Iliad of my observations, I thought I’d just spill out the first thoughts that stuck out when thinking about the last decade of programming “professionally” (i.e. – at a job). These thoughts below go more or less in chronological order, starting around 2013 to today.

I Was Mesmerized by Technology

Like anything in life, it appears that the things really worth doing are the things you are truly interested in. Things that really excite you. For as long as I can remember, technology has always been that for me. From the moment my dad plopped down a Super Nintendo on our kitchen table in 1992, I was enamored.

As I played Mega Man X over and over again, a seed was planted. While I thoroughly enjoyed the game, I started to wonder—how is it actually working? How was it made? Can anybody do something like this?

In short, a burst of creativity was planted in my psyche at a very young age, and I believe that was a foundational event for me. It never left. As I grew older and, of course, the iPhone was released my senior year in High School – I started to wonder if I could somehow be involved in the tech world.

At first, I came across Gamesalad - which is still around today! I credit this little W.Y.S.I.W.Y.G. editor for truly making my passion take off. It was the first time I thought of something, and then made it! Now that I had a taste of making something for iOS, I simply wanted more.

And so—I did what most people did in 2007, I went to a book store and bought a book over iOS programming. And I didn’t get a lick of it, like…at all. I couldn’t comprehend how anybody could really do this coding stuff. Why were the terms function and method used interchangeably? Are they different? The same? Extrapolate that thought out to decidedly more difficult concepts, such as collections or the difference between an array and a set. I wasn’t getting anywhere. This is the part where things got hard.

Which leads me to my next thought.

I Needed School

For my learning style, books and video courses just weren’t doing it. And for one simple reason – I needed to talk to someone at length about the questions that I had. I couldn’t learn the basics by myself.

Enter Ozarks Technical Community College. I enrolled in their C.I.S. program and within a few years (all of my general education was already finished) I had my associates degree all buttoned up. But not only did I get it, I was good at it, too! I was near the top of my class, even though it was a school smack dab in the Mid West, I was proud of that. Missouri isn’t the epitome of technology, but none-the-less, the education I received was top-notch.

Taking a very hands-on approach with an emphasis on building things, I had a good portfolio to show potential employers when I graduated. I could talk trade-offs, the good parts, the hard parts – that was a magnificent resource to have as a new grad.

The lesson here is that, even though there is a vast number of resources out there to learn, sometimes the traditional route might be just what you need. I have a ton of respect for the “self-taught” developer – but I quickly found out I was never going to be one of those. I required someone to really dig in and simply teach me, face-to-face.

I Learned The Basics And Went With It

About a year into my education, after I had the basics and foundational knowledge of programming (loops and iteration, variables, data types, control flow, etc.) I began to realize I could teach myself new things. This was probably the most exciting time in my burgeoning career.

Why?

Because now, I was able to go back to those iOS programming books and I knew what the heck I was doing! Objective-C was not so hard to learn anymore, and I was truly able to teach myself iOS development. Those of us who have been doing this for a long time seem to take this for granted a bit, but it’s quite remarkable that in our industry, we can learn virtually any piece of it if we need to.

Did you start in the front end world? You could learn iOS. Did you start in the Java world? You can cross over to Android. Did you start with an emphasis on a back end discipline? You could learn Unity.

The list goes on and on. In fact, this is a common question I get from those who are interested in programming—”Should I learn X or Y?” and the answer is really…learn any of them! You can generally pick up anything else later.

I Interviewed Very Well—How?

Thankfully, I interviewed very well once I had graduated. One of the biggest takeaways I had from feedback was “You are someone our team would like to work with”, or “You seem willing to learn and appear upbeat”, etc.

No matter your personality, introvert or extrovert, you can really get a leg-up in interviews by doing this OneNeatTrick™️: Be honest and human!

The sense I got early on is, even though it’s normal to be nervous for those first interviews, people will gravitate towards the interviewee who smiles, isn’t afraid to say they don’t know an answer, laughs a bit and is generally someone who is having a good time. Even within the context of a high-pressure situation, such as interviewing for a job.

I’ll always remember a remark I had when I landed a coveted internship at my school. There was only one slot open, and it was an $8.50 job to create a web app internally for teachers. I had overheard one of my teachers bring aside two students to offer them an interview. After class, I asked if I could be considered (another lesson – don’t be afraid to be politely assertive for opportunities) and he agreed.

Long story short, I got the job, and it was mentioned that it wasn’t even a close decision. My passion to learn and the excitement to build something isn’t something you can fake, and if you have it – it’s a massive asset.

I Absolutely Sucked at “Test” Exams

Here’s the kicker, though. When I interviewed for my first job out of college, I sucked at all the aptitude tests. In fact, I got what amounts to a “D” grade on most of them. In my area, .NET and SQL are prominent. Many of these tests dealt with writing custom SQL queries, and, well—I wasn’t good at that yet.

So, I didn’t do hot on the four or five tests I took. And yet, in all of those cases save for one, I had job offers. And that is because, I believe, of my previous blurb. They knew I was willing to learn.

In a way, I think this thought would still hold. If I had to do a whiteboard interview with someone watching me, I would freaking melt. I don’t do well in that environment, with someone hovering over me. And it’s weird because that’s not how we work in the real world anyway. But I digress. If you’re a new grad, try not to sweat those tests too much – they are looking more at the person than the programmer.

It goes to show that they don’t really reflect your worth. I had several “big” projects I could show employers in my portfolio, things I had built myself. A can-do attitude armed with a bit of work to show will usually trump a bad showing on those screening tests.

I Thought I Would Be Fired Immediately

I’ll always remember my first task at my first job. I had to add a checkbox that would filter out some data driven by a SQL query. It took me over two weeks.

Looking back, it could’ve been done in two hours.

But this was the first time I was thrown to the beast! A massive, 15-year-old code base. New processes and ways of doing things. I was on a lake trip with my wife towards the end of that two week span, and I remember telling her I wasn’t confident if this career was going to work out for me. I was stressed to the point of wondering how I would provide for my family if I were to be let go.

But, it worked out. A mentor helped me through it, I asked for help, and eventually, it got done. What a roller coaster! I remember being at a pitiful low, immediately rebounding to a resounding high. Every so often, that’s programming for ya. It can humble you quick, and pick you right back up and make you feel like a superhuman creator.

Funny enough, I ran into the person who hired me at that first job a few weeks ago at my son’s wrestling practice. We were reminiscing about the old days, and I mentioned how I was grateful to get the opportunity to work there, even though people were applying with more experience. Long story short, (and allow me to toot my horn here, just momentarily) he mentioned that I quickly became one of their best and most versatile developers. I grew considerably in my time there, and I grew quickly.

If you’re having a hard time initially at your job, keep at it. I promise you, you’re going to learn a lot and improve.

I Learned to Prioritize What I Really Wanted

After nearly three years at that job, I realized my iOS opportunities there were going to be sparse. While me and two other developers were really the only ones who worked on it – I had to be pulled off on other projects, mostly dealing with ASP.NET.

And I quickly realized—iOS was super fun for me. ASP.NET was, well, not.

If I was going to be programming for my career, I wanted to work on what I wanted to work on. And with the rise of remote jobs, I was able to do so. Even following a fairly massive raise, I set out to find a job where I could iOS full time.

If you can, find what really makes you tick and try to work on that. I know it’s not always possible, and look – sometimes we simply have to do some stuff we may not particularly enjoy, but by-and-large if you can work on the tech stack you like, do it!

I Improved In Ways I Did Not Expect

After a decade of coding on the job, you’d think I would say something similar to “I am waaaaay better at programming!” but honestly, I doubt that’s necessarily the case. No doubt, I have learned and improved a lot.

But, the ways I’ve improved the most, and what, I believe, has made me valuable, is not so much that I’m a master, elite programmer – it’s the other stuff I can do that help projects move along and turn out well that I’ve become good at.

I have an annoyingly precise eye for iOS platform features, and what makes a great iOS app. I’ve learned so much about design, and the human beings we make software for. I’ve learned why accessibility is critical, and should never be an afterthought. I know a lot more about trade-offs, and communicating those types of things across not only my team, but other teams, too. I could tell you why something that seems easy is hard, or why something that seems like a good idea might turn out to be a bad one. And, well, I’m always quick to own up to my mistakes because we absolutely all will make them.

More than anything, I’ve become fairly skilled at navigating people, in a sense, and truly displaying a high degree of empathy towards them and their situations. If you can try to see things from their perspective, it goes a long way. Such a tale as old as time, I suppose. Coding is never the hard part, it’s the people, emotions, and egos that you have to learn to work with. In short, we are all human – so be a nice person to work with.

So, have I become a much better programmer in the academic sense? Of course! But also, well - probably not as much as you’d think? I’m certain a new grad from an Ivy League school would run circles around me in LeetCode. I would probably crater literally any whiteboarding interview. But I can do what really counts: write effective and reasonable code, be easy to work with, point out things we could improve on, and help keep everyone in the loop.

Your Family is Most Important

I’ve been extremely lucky, all things considered. I’ve worked at Buffer now for coming on 8 years, and that is quite a long time in the tech world. In some ways, my job experience has been unique from plenty of traditional iOS posts. I’ve worked with one other person virtually this entire time. I have enjoyed that, though, as being a small, nimble team carries plenty of advantages.

More than anything, though, Buffer has let me be there for my family. It has unbeatable work-life balance. With four-day work weeks, I’ve been able to take my kids to school on Fridays. I would otherwise have missed out on this. I cherish all the fun conversations I’ve had with them on the way, and I adore hearing about their school day when I pick them up.

When I went through a major health scare, they let me take off all the time I needed. No questions asked. I’ve taken three weeks off in December for as long as I’ve been there, and it’s my favorite thing to do all year (I’m a Christmas nut 🎅🎄).

Look, changing jobs isn’t easy. Finding “the right one” is even harder. But if you can, try to end up at a place where you are thought of as a person, cliché as it sounds. There is a reason I’ve been at Buffer so long, and one of those key reasons is that it allows me to be around my family a lot, and watch my kids grow up. I work to provide for them, I don’t live to work.

I Look Forward to Doing This For a Long Time

Encouragingly, I look forward to doing this for a long time. Programming never gets old to me, I simply enjoy it. And, when you have to work for a long time, I would submit to you that the simple act of enjoying your career is a massive life hack to living a healthier, balanced life.

There will always be days when you’re in the trenches, and it’s not as fun. But a true interest in your career will eventually carry you through (this advice doesn’t apply to burn out, an entirely different topic). When I’m not at work, I enjoy making my own apps. Of course, I’m writing a five book series over iOS too. I couldn’t do something like that unless the subject endlessly fascinated me. And it does.

Plus, the landscape is constantly changing. How you wrote an iOS app in 2013 is nearly unrecognizable to today. The languages change. The tooling changes. The frameworks come and go. And then, there are major shifts that occur. Presently, that’s GPT-4. Who knows what it will be a decade from now.

For some, that’s stressful. Me? I think it keeps me on my toes.

Final Thoughts

What a decade it has been. I’m thankful to be in this industry, and it’s done so much for me. I can’t help but think that if I could go back and do it again, I’d probably just choose the same route. Here’s to the next decade of programming!

Until next time ✌️

···

Spot an issue, anything to add?

Reach Out.