From The Archives: Lessons Learned
From the archives celebrates the good and bad of my journey in software development. It's a chance to dredge up hundreds of hours of older work. Some I am proud of, some not. But it's with self reflection that we get to understand how far we have come.
Lessons Learnt From My First Software Deployment (circa 2013)
As a second year university student I didn’t expect that I’d have the opportunity to write and deploy a software solution into a corporate environment for years, especially into an environment where that software was likely to be used regularly. As luck would have it however I came across the opportunity to do just that and it was a fantastic learning experience.
To provide some background I work in a small family run business, they’ve been extremely flexible about my hours to ensure that I have enough time during the week to study. They’ve been aware of my area of study for some time and casually approached me to see if it was possible for to create software that integrated with their invoicing package to retrieve information they just weren’t able to retrieve given their program’s current implementation. I spent the following evening on Google and determined that it definitely could be done so I went back to work with information on how much unlocking 3rd party access to the software cost, what I thought I would be able to deliver and then provided them with a fixed price for three “licences” of the product. The software came cheap because it was a good chance to learn and I didn’t want the company to shy away from the idea and have me not be given any real opportunity to code something that wasn’t an assignment.
I settled on writing the program in Java, I know a lot of people have problems with Java but it seemed like the simplest implementation for various reasons. I work in the office regularly and I knew I would be responsible for deploying the software anyway so setting up the correct JRE and adding the PATH variables to the windows machines in question didn’t seem like much of a hassle. I got to work the next night learning how to correctly connect to the software in question and wrote some basic queries to see the results being returned by the database. By the end of the evening I had a working UI producing results into a JTextArea, they weren’t the right results, but they were results! Another night passed and I’d upgraded my UI to use a JTable instead of a JTextArea as it made formatting easier and looked more professional, I altered the required queries so that they actually produced the required data output and felt chuffed with myself before heading to bed.
I proudly strutted into work the next day and installed the software nice and early that morning, I’d even left notes on the Staff’s desk to inform them that the new software had been installed, as it was a Saturday no one would have a chance to see the software in action till Monday and I wanted everyone to know I was the one that wrote the code. Monday rolled around and I decided to show someone in the office how the program worked, I’d not actually tested it on the work machines yet but my code was sound so there was no worry about it producing the wrong results. I fired up the program set a date range for my query and hit submit…
Either time was standing still or my query was taking a LONG time……57 seconds later (I found this out later by re-timing it with a stop watch) my query was complete. They were quite impressed what used to take them about 5 minutes by the guess and check method now only took 57 seconds, that was still a completion time of about 20% of the original time. I sheepishly mentioned that I’d look at the query time and pretended my software didn’t exist for the rest of the day. I was embarrassed at its performance and even though work was happy with it, I knew that I didn’t deserve the payment for the performance of the application.
I was able to resolve the problem the following night and have the program now return results is a worst case time of 4 seconds (after multiple tests), now not only am I much happier with my product but I feel I earned ever penny of my asking price.
So what did I learn from this project?
- Always test your software, always! Of course I tested my code, I tested it more than any self respecting programmer should, what I didn’t do was test the program in its actual environment.This was a bit tricky because I still had to do my job during work hours and find a way to test it out of hours but this is still something I over looked.
- Never run your software for the first time with someone looking over your shoulder, although the software didn’t spontaneously set the computer on fire it was embarrassing to see such long query times.
- Really understand the problem, no really, are you sure you understand it? For the most part I did understand my problem, in fact I still believe I was more than qualified to write the application that I did. The problem I faced wasn’t an implementation problem it was overlooking the way the office had organised its data and more specifically how it stored the data on networked drives, a simple problem that was easily fixed but should have been avoided had I have had a little more experience.
If anything this software has given me the motivation to expand on its feature set and given me the opportunity to potentially release it to a wider range of clients rather than just the one business. A venture that will sadly have to wait until the end of this university semester (not long now).
It was still a great opportunity and a fun little learning experience.
This first "From The Archives" might be a little self serving. On reflection this software was wildly successful. I know that the software I made was only retired 6 months ago when a newer version of the customers accounting software made this process obsolete. Despite a shaky start having my first piece of paid work, in a commercial setting no less, run for 6 years was testament to how hard I worked on that project.
What was your first project like? Let me know on Twitter!