Personal Projects

Besher Al Maleh
4 min readNov 1, 2018

--

(this article was originally posted here on Oct 15, 2018)

I think there is great value in working on your own projects while learning, as opposed to just reading books and following tutorials. It helps you put what you’re learning to practice and further cements that knowledge.

I watched a TED talk recently about how you can learn anything in 20 hours. One of the points the speaker brought up was that you should learn just enough to correct yourself, then start practicing. It’s an interesting concept, and I think working on a personal project can really help with this.

Acquiring knowledge about a skill can actually become a form of procrastination if you don’t start putting this knowledge into practice. You want to get started building stuff, breaking it, fixing it, and then breaking it again, as I believe this is where the crux of learning occurs.

About 6 months after I started learning programming (via books and online video tutorials), I came up with an idea for a macOS app that could help me out at my daily job as an IT support specialist in a corporation.

The app I had in mind would connect to the Active Directory (a directory of 80,000 users in our case) and display relevant information about the user I’m trying to help (their access rights, software licenses, group membership, pw expiration, VPN status, etc.)

This is all information that was already available to the support staff, but there was no quick, centralized way to access it. You had to use a different service or portal to access different bits. My idea was to group up all of this information and make it available at a glance. Ideally the app would take no more than 10 seconds to fire up and look up a user.

This seemed like a farfetched idea to me at first. I wasn’t sure it was even possible to connect to the Microsoft ActiveDirectory from a macOS app, let alone build a macOS UI (something I’d never done at that point) and display the results. So I started researching.

I put a lot of effort into this research, because I had a tangible purpose. I wanted to build an actual product that would make my job easier, and I had a clear idea about what it would do. Problem is, I had no clue how it would do it. And so I spent many nights reading about Terminal and the command line, shell scripts, dscl localhost commands, an arcane art called Regex, running all of that stuff in Swift, building macOS UIs, etc.

A week later I had a vacation coming up, but I wasn’t flying anywhere (that year I had accumulated a ton of vacation days from working weekends). So I spent that week at home building the app I had been researching. I still vividly remember that one night when I was wrestling with Xcode, trying to get the app to talk to our company’s Active Directory. Everything about the app depended on that connection, and I still wasn’t sure if that was even possible.

On that night, when I finally saw a response from the Active Directory in Xcode’s console log, I literally jumped out of my chair and started screaming in joy (sorry neighbours!). Yes, the response I got was an error message (my request wasn’t structured properly), but it was a response nonetheless. That meant I could communicate with the Active Directory. That meant this project is actually doable! It’s hard to describe how good that moment felt, when you finally see results after bashing your head against the wall for a long time. This is probably very cheesy, but I call it a Dark Souls moment, because to me it felt similar to finally beating a Dark Souls boss after hours of trying. (this is a game famous for being punishing to newcomers)

When I look back at that week I took off from work, I find it amazing how much time I spent coding. I was nearing 14 hours of coding on some days. There’s just no way I would spend that much time per day following someone else’s video tutorials or book instructions. But because I was working on my own idea, a project I was heavily invested in, I didn’t mind staying up until 5am coding away. It was hugely motivating, and my procrastination magically disappeared during that week, especially as I started seeing results. Once I had the end in sight, I just didn’t wanna stop.

The project was a success. I received many feature requests that I ended up implementing over the next 2–3 months. My colleagues loved it, and it ended up being downloaded over 400 times (I shared it with IT teams globally within our organization).

I will make a post in the future discussing the technical details of the project and how I built the app. Here’s a demo + the source code if you’re curious what it looks like:

https://github.com/almaleh/LionSearchDemo

--

--