I previously worked for a company called LKQ, which specialized in selling aftermarket car parts.
My job was working on their IT Help Desk, taking calls from other LKQ employees across the country to assist in troubleshooting their computer-related issues.
Coding wasn't part of the job description, but I couldn't help myself in using what I was learning in college at the time in order to make my job easier.
In this article, I'll showcase a few of these scripts and applications.
To start with my need for efficiency, I looked at the job we did the most often and attempted to find a way to do it faster.
Easily the most common job we had to do was unlock user accounts when they had attempted too many password attempts. Once they were locked out, as a security measure they had to call us in order to get more chances to try again. Unlocking these accounts was done through Active Directory, the user account control service that Microsoft offers.
Normally, unlocking was done through an Active Directory tool, but this tool was quite old and tended to be slow in searching for a user, then clicking through their profile to finally hit a button to unlock them. This was one click too many for me, so I started doing some research.
Turns out, Microsoft provides a library to interact with Active Directory components through C#. Piece of cake.
The hard part, then, was understanding how this library works. I started out with writing a test application named MultiADSearcherTest. This program would simply just search Active Directory and display some user information in order to ensure I was actually doing it correctly.
The library was a little complicated, but I managed to figure it out. Here's a code example:
Very simple and clean, I managed to get it working. Now I just needed to take it a step further and create the QuickADUnlockTool.
Instead of using the slow and inefficient Active Directory application, this script now just runs through a command line. All I had to do was enter the username of the user and the script did the rest.
Now, mind you, both of these scripts are several years old now, and I think it's a good look at how far I've grown in my own skills as a software engineer.
This script worked and all, drastically improving my workflow, but there are a few bad coding practices I made here.
The most glaring issue is the loop. The program is designed to loop, allowing you to continuously enter new usernames without closing the script. I should have used a purposeful infinite loop, something like for(;;)
, but I must have been afraid to do something like that. Instead, I used a goto
jump right at the end that jumps back to the start. In order to quit, you had to manually kill it with CTRL + C, and this was by design. I wasn't aiming to sell this code or make it perfect; I just needed it to work. This is something I would outgrow as I continued my education.
The real takeaway here is my ability to very easily learn something new; my university classes were not teaching me how to manipulate Active Directory with C#; I did that completely on my own by reading documentation and tutorials on how it all worked.
This project was one of the most exciting that I developed, and has quite the story behind it.
By this point, I had written multiple scripts and even a few actual Windows applications in order to improve my workflow.
My boss attended a meeting hosted by the Vice President of IT. At one point during this meeting, the VP gives an open request, asking for an application he called the Employee Recogonition Portal. This portal would be a website where other employees could submit nice things about their co-workers. The idea would be that the boss of that employee could look up all the recognizations an employee had recieved and use it for whatever purpose they desire, like a promotion or something.
My boss then sent me an email asking if I could create something like that, and I said sure. At the time, I was learning ASP.NET in my college courses, so this seemed like it was pretty easily in the realm of possibility.
During my downtime I worked on the application, building it in ASP.NET. There was a couple of hurdles in the design I needed to overcome, though.
First was the layout of the website. I already knew HTML and CSS, so I made a little mockup of what it might look like so I could show it to my boss. You can see it here:
If you don't know about ASP.NET, I'd like to let you know that it requires a web server in order to work properly. So don't try and click on the buttons on that page: they won't do anything meaningful. Aside from that, I'm also constantly reminded that I'm not that great of an artist. The CSS of this first draft page wasn't amazing, but was improved upon later.
This concept page did impress my boss though, and encouraged me to keep working on it.
I improved it by using the knowledge I gained from QuickADUnlockTool and implemented the ability for the program to automatically get your Windows sign in, so it already knew who you were. Then, you were able to search Active Directory using someone's name, and did a lot of work in making sure that the average person could use this application. This wasn't just a little script that I would be personally using anymore; it was expected that other, not tech-savvy people could utilize this. I made a lot of effort into the searching page, making sure that, no matter what, you could find the person you were looking for.
Unfortunately, as I mentioned, this code requires a special web server to run it, so I cannot show you what the actual page looked like. I can, however, show you the code of the search page:
The Search page had a lot of notable features. Firstly, I was able to dynamically create an HTML table object to display the list of search results in a nice and neat format, easy to read. Since it searched Active Directory, I could very easily grab the username, real name, and the location that an employee worked at and display it so the user searching would know with certainty that they could find the person they were looking for.
Near the bottom had a lot of quality of life features; for example, if your search only returned one result, then we knew that that had to be the person you searched for, so it would skip the selection process and put you straight into the data entry page. If your search generated multiple results, then the dynamically created table also had dynamically created buttons allowing you to easily select who you wanted.
Once you selected someone, you were redirected to a page to enter your recognition comment. I also managed a SQL server where the submissions were stored and could be retrieved later. The idea was that I would make a second application for managers to use in order to retrieve the information from the database.
Creating this application put me on the radar of our office's software engineering department. They invited me for a shadowing day where I spent a day learning how they do their job and all that. It ended with them actually interviewing me for a junior software engineer position and offering me the job.
Unfortunately, I had to turn down the job because it conflicted with my desire to continue my education further. Nonetheless, I can say that, even when I didn't have a Software Engineering degree at the time, I was offered a job due to how good my coding skills were.