Wednesday, April 24, 2013

Documentation....A huge hassel.


I once failed a class because I did not create any documentation to go with the program I had coded. The class was Business Programming - C++. The only assignment for the entire class was to build a database backed program. I choose to do a bookstore inventory program. I wrote the program during the final weekend of classes. When my professor went to grade it, it crashed. I didn't think he would try to enter a string when I was asking for a number. Why would he do that? Because end users would do that, that's why. He gave me an F, not because the program crashed. He expected it to crash. He gave me an F because I didn't provide documentation on how to recover from a crash, or any documentation on how to use the program. I thought it was obvious. NOTHING is obvious to a user, lesson learned.
As I progressed through school, documentation was always a key part of whatever programming, web design, or software development class I was taking. Comments in code? Better be there, or points off your assignment. Wireframes for your webpage....half of the assignments for one of my classes.
At one of the jobs I've had, I asked if there was any documentation for the program I was going to be working on. I was laughed at. For another project the user manual was five years old, which is way out of date, and I was told that there was no point in referring to it at all.  I'm sure that this is not the case at every company, but most of my co-workers seemed to think that this was totally normal.
I think that documentation is a very important part of a project. This is why a significant portion of some classes are spent on how to do documentation correctly. I really wish we had a design document for my current project. Not so that I know what I'm supposed to do doing, I already know that, but so that I can point to it and say, "this is why the program was created this way". Documentation takes time to create though, and time is money. I work in what I feel is a volatile environment, one where changes to program requirements seem to happen on a regular basis. This is not a productive environment to code in, at all. This is usually the result of the customer not knowing exactly what it is they want, or the lack of a design document and a process to go through to get something changed on it. But what’s done is done and there isn't really a good way to go back and fix it. Not without moving backwards, which is something you never want to do. It kills morale, and in the case of doing contract work, makes it seem like you've wasted time and money. So the solution is to keep trucking forward.
So why don't we start doing documentation? Spend a little less time on coding in order to get our documentation to where it should be? Because of the volatile environment. Trying to document something in such an environment is a bit of a time waster. I know because I tried. I wrote on documentation on a process. It took me between a week and a week and a half to get it the way I wanted (wasn't the only I was working through, so less than 40 hours). Within a month, it was out of date and needed to be updated. Now, do I spend another week to change it, just to have it go out of date on me again? The process it was documenting was a relatively minor one, and would only eat up a day of my time to explain or show how to set something up. We have a pretty small team and this process wouldn't have to be gone through many times by the same person. So, it was decided that this particular piece of documentation was more trouble than it was worth.
I'm not saying that documentation isn't important. I think it's extremely important in getting a project off the ground. However, once a project has gained some stream, the usefulness is diminished to the point where the time spent to create new documentation hampers the ability to make progress. The classes I took where we were forced to create wireframes for our web applications or programs before we started working on any actual code were dead on. Not just with how important documentation is, but at what stage it should be done. In the beginning of the project, on the upstream, where changes are easy to make because there isn't much to change. It should be part of the overhead cost of doing a project, not an ongoing cost, because the ongoing cost is so much more expensive.
So...documentation is good, as long as it’s done as soon as possible and isn't subject to change very often. Otherwise, it’s really more trouble than it’s worth, as out-of-date and wrong documentation is often worse than no documentation at all since it can lead people astray and waste their time. And time is money.

Tuesday, April 16, 2013

Almost a whole year later...

It's been almost a year since I've graduated from UCF and started working at my current job. The academic world and the professional world of programming are similar but different at the same time.  I still know many people who are still in college studying programming (or soon will I hope). They are sometimes baffled by the way things are done where I work as opposed to how things are done in the classroom. This isn't to say that the classroom way is wrong, or that the way its done where I work at is wrong, they are just different. This is mostly because of the priority shift of what is ideal in the classroom setting as opposed to the more realistic or "cheaper" way things are done in the workplace. I'm just going to sum up some of the differences I've noticed thus far here and in the future go into further detail of each. These are my own unique experiences and I'm sure aren't the same everywhere.

1) Documentation....often an assignment itself leading into another assignment in school. A huge hassle no one has time for where I work.

2) Group Projects....in school if one person doesn't pull their weight, it seriously sucks for the whole team. Where I work, as long as you do what you're supposed to be doing...you're golden.

3) Silly mistakes.....they happen and are expected in school. At work....at best they seriously annoy your coworkers.

4) Time management and Organization....all those classes about college success you thought were useless to get through college, pay attention because after college these skills and habits can really save your bacon.

This post and the ones that follow are more about general purpose development and not isolated to writing code. If you're looking for code I'll get back to it one day. This post was really to try to get me back into writing stuff, hence the lack of content here.