Once again I have found myself really struggling with what seems to be conflicting requirements for an application currently being developed. I have blogged on more than one occasion here that to create an application which “hides” the complexity of its workings from its users is no trivial task, yet I believe, one that is truly worth the effort. Providing flexibility for users can also be a challenge during development if the developer is “looking ahead”.
By “looking ahead” what I mean is that the developer might be working on a custom application with a particularly narrow functionality focus, yet be very aware that the functionality desired now will probably NOT fit the needs in the future, perhaps as soon as a few months. While in the program where possible it may be desireable to build in the functionality desired for the future, but somehow “turn it off” for the current application iteration. Doing this of course assumes a long-term commitment to the application and maintenance of it.
A common way to create an application which can be “flexible” in this manner is through the use of what might be called “switches” — or another term I’ve seen used is “parameters”. These have proven to be quite effective — to a point at least. There does come a point in time I believe that the value of “switches” is no longer useful. I actually worked with some software where there were so many “switches” to be set (they bragged about having over 4000!), that a week of “training” in setup was required. Unless the application is going to be used in a large environment with a dedicated IT department that would be (IMO) excessive. Additionally this software had many dependencies built into those “switches” – i.e. if parameter 2003 is set to true, then 3014 and 4002 must be set to false.
As with so many things in software development, there are always tradeoffs, as well as a multitude of considerations. I believe that the more of these types of considerations that are taken into account throughout the entire development life cycle, the better will be the resultant software.
Perhaps I’ve had my head buried too deeply into code over the past 4 years or so, but it wasn’t until this morning that I became aware of this unfortunate event playing out less than 100 miles from my home. Since I blog only here, don’t have a MySpace, rarely purchase on-line and seldom visit anything other than a site immediately related either to a project I may be involved with or might become involved with, I guess one could say that I lead a sheltered life!
The case came to my attention as the result of reading the latest Sunbelt Security News – a newsletter which I follow with some regularity, and my generally inquisitive nature. Anyway, in case you have also had your head into too much code, the case in short (very short) is this – Julie Amero was a middle school substitute teacher who had the unfortunate experience of having the computer she was on begin showing pornographic pictures. She was charged and convicted with felony charges of impairing the morals of a child, with sentencing delayed (…since it appeared that perhaps not all aspects of the case were solid). Her conviction was thrown out and she was granted a new trial. On November 21, 2008 her saga ended with a guilty plea to disorderly conduct . She lost her teaching credentials, her health has been compromised, and paid a $100 fine.
What happened to her in that classroom reminded me of an incident I experienced a few years back when I got a frantic call from a woman on her workstation who just couldn’t get rid of pornographic popups that just kept coming at her. She was frantic! She was not a “knowledgeable” computer user, she had no idea what to do! In her case, what was discovered was that some member of the nightime cleaning company had decided to make use of the company high speed connection and to access porn sites, the result was a compromised PC – left ready for its next user to experience.
Now, clearly I do not know all the facts related to the Amero case, but that this happened surely is tragedy, as well as another example of the need to remain constantly vigilant regarding keeping anti-virus and malware under control and updated.
I’ve just recently read a couple of posts in a newsgroup which reminded me of a few nightmares I’ve created for myself as a result of taking a shortcut (or two). One of the situations was regarding changes made to a working server (…and of course one doesn’t want to reboot said server after simply adding some software — especially when the software doesn’t specify rebooting). The story I read went something like this: a few months ago a demo application program was loaded onto the server, the system was not rebooted after install, all programs worked fine – newly installed demo and existing programs – and they continued to work until the system was rebooted.
It seems that in this case there were “updates” loaded onto the system which upon the reboot replaced the working versions of the dll’s with incompatible versions. The “demo” program had been reviewed months ago, determined that it wasn’t desired, but left on the system anyway. By the time of the system reboot the consultant called in to address the problem was of course told “Nothing has been changed!” Yes, we did have to take the system down for an extended power outage — but it booted fine – “…no errors…”.
It took a team 2 1/2 days to establish the cause of the problem – that being that at the time the “demo” software was loaded certain dll’s were being “used” and therefore would not be replaced until the next reboot of the system. By the time that reboot happened nobody ever suspected that the “demo” software load was the cause of the problem.
Had the system been rebooted after the install the “issue” and its cause would have been immediately identified. Months later, that wasn’t the case. The shortcut? Not rebooting after the install. The nightmare? 2 1/2 days of anguish with printing not working. The solution? Reboot after loading new software.
How many times have you heard “I have an easy request for you…” from either users or the non-technical manager with no concept of what it takes to create an integrated software application? Most of us that have been up and down the development block have experienced this I’m sure, and also for many of us the request has actually been easy! 🙂 What a relief when it is!
But then … there are those other times which fall into a couple of different categories. The first category is the category where as the developer, after looking at the request more closely you determine (much to the dismay of the requestor) that to accomplish the task will really require some major changes – lots of work – and of course that also means time and money! After close consideration the idea for the change is either re-designed and re-considered, or scrapped.
Then there is the second category — I call it the “…seemed like a good idea at the time…” category. This is the project which is stated very simply, and upon further investigation as the developer you decide that it will in fact be a great enhancement to the program, and will not take much to implement. WRONG! This is the killer project! Not until getting into the finite details of the application do you realize that it is a monster! After spending double the time you expected on the project with no definitive end in sight reality has hit hard!
Very simply, the requirements were over-simplified, the review before the project was over-simplified, and the execution anything but over simplified. Oh well, chalk it up to just another day in the world of software development. Cheer up, there’s another project coming along right after you finish this one – if you ever do that is!
I’ve never really established what phenomenon is at work come December but it seems that throughout my time as a software developer and IT manager, December has always been a particularly busy month. This December has been no exception, although not all of the “busy-ness” has been due to programming that I’m invo0lved with.
At least some measure of the activity has often been around getting new equipment configured and the application installed, users created and all the various pieces of “technicality” that goes along with adding or replacing a server. Come December many are able to “lighten up” their workloads and enjoy the holiday season with long lunch hours, after work “get-togethers” with co-workers, extra time off (catching up on vacation time not taken), or just plain “easy going” for a while.
However, IT never sleeps! This economy which is demanding that we do more with less surely won’t help those of us in IT have an easy December. What there is for us to do, however, is to just make the very best of whatever “breaks” we get during this holiday time — and enjoy every minute of the time. One of my earliest employers used to quip “Work hard, Play hard!” — I’m up for that as soon as I figure out when play time starts! 🙂
There is no end to the need for backup(s). I’ve been chided on numerous occasions for always taking the safe route — which basically in my book is don’t change ANYTHING without being sure you have a backup. Backups take time — but it is time well worth taking! Especially if you have to make a change in the middle of a workday — being safe is the only way to go in my opinion.
So, by now you are probably figuring that I had an “incident” to spark my flurry of writing on of all things — backup! If you guessed that, you would be 100% correct! By once again being what some have called “over cautious” about ensuring up-to-date backup I have been able to rescue a customer from disaster. Their nightly backup was “old”, and rather than take any chance with “something” going wrong, I insisted in making a backup of their critical data before doing what “should” have been a “safe” maintenance function.
Well, the “safe” maintenance function failed — for reasons unknown! (…aren’t they always?”). However, the fact that the maintenance function failed was not apparent — in fact it looked like all was back to “normal”, mission accomplished — until the next day when a user went to run a report and the requested data was “missing”. Further investigation revealed that the table was in fact missing some 60,000 records — a disaster for this client!
Fortunately, because I took the “safe” route, I was able to recover the missing records and combine them with the “new” records added during the 24 hours that it was thought all was back to normal. End result — apparently no data lost. Moral of this true story — backup, backup, backup!
There’s an old saying that goes something like “There is no rest for the weary!” to which I have been known to rephrase to “There is no rest for the independent developer!”. The intro to my blog states “This blog deals with the questions and challenges of providing users with quality “custom” software programs…”, and over the past 15 months of writing this blog I’ve worked hard to stay at least somewhat on-target with that stated objective. This weekend has actually made it easy for me to write my last blog post for this month — having provided me much in the way of “subject matter” to substantiate my “There is no rest …” statement(s) earlier.
This has been a weekend filled with activity for me — and opportunity to correspond via email(s) with clients for whom I’m working. Now, while I have had plenty of communication with said clients, the good news is that because all of the communication has been via email, it has truly been un-obtrusive and no threat to my efforts in creating a work-life balance that works for me. In each case, the issues communicated have not been of a nature requiring an immediate response — hence they have not been disruptive.
Truly in this day and age of technology and ever-present communication channels, we who are independent developers working from our homes have to fight hard to maintain work-life balance. It is very easy to be suckered into working through a weekend, holiday, anniversary — you name it! However, we do not have to be a slave to the communication when it comes in the form of emails — I think of them as a quitely soft arrival (I keep sound turned off so that I don’t hear them arrive – unless I’m willing to know). I look at them only when I’m ready to — some weekends I never look, most of the time I see them within a couple of hours after receipt.
I, like many other independent developers I know, seldom are not working on a weekend — and our client customers (many of whom are also working on a weekend) know it. Using email as an un-obtrusive means of communicating works — and the end result is a high service level and opportunity for work-life balance that works. Seems like a win-win situation to me!
I seem to go through this on a regular basis — feeling as though I am buried in paper. Even though I am an independent software development consultant by trade, in trying to keep up with various requirements for accounting, tech articles which apply to my professional needs or personal items such as health records — it seems that a mountain of paper piles up each month. Then, as I go through the months accumulation, invariably at least some of that monthly accumulation ends up being added to the stack of “save for future reference” that may be an accumulation of selected monthly paper. The cycle never seems to end.
It is then that I realize once again that I have choices! (Choices are a MARVELOUS thing!). One of those choices is that I can throw away most everything, and then either access on-line as needed, or just do without — or hope that I can remember enough about something that came across my desk to be able to search it out and come up with it. I’ve been working on this method over the last couple of days!
Recently I have been incorporating scanning functionality into many of my customers applications. The functionality has proven very productive for my customers, and they love it! Therefore I certainly have another choice — i.e. buy some kind of “document management” software and scan. What a novel concept — using the very technology I use every day! Hey — I could also create my own custom “document management” system and have just what I need available at all times – once scanned that is.
Bottom line is this however, by the time my day is through there is neither interest or energy left to dig into either a project to learn some new software, or, to actually create something for myself. I continually wonder what’s wrong with this picture! Here I am, a reasonably technically savvy application developer, and yet I continue to work at least somewhat in the dark ages! The fact is that I can either choose to work 24/7 and at best inefficiently produce, learn or otherwise develop what I need — or — I can choose to create some kind of work-life balance. I choose to balance thank you!
While doing some cleanup yesterday I ran across my “spare” bumper sticker which I purchased at a Ben & Jerry’s a few summers ago. At the time I purchased 2 of the stickers because I loved the message so much – 1 for the car I was driving then, and 1 for my next car. The time has come – next warm day I’ll clean the car (…or at least the bumper!) and install the bumper sticker. “If it’s NOT fun – Why do it?” has really been very much a part of me all my life.
Even in my early career in manufacturing production control I expressed my thoughts very freely to my co-workers. Imagine my surprise when it came back to haunt me when an employee I hired a few months previously walked into my office and told me something like this — “It’s not fun — so I’m not doing it any more! I’ll be gone in 2 weeks!” That was an eye opener!
Each time I see the phrase I’m reminded that indeed I do have choices to make. As frustrating and difficult as IT (Information Technology in ths case) is, and as strong as my love / hate relationship with IT is, I remind myself that I am fortunate to have the choice of doing IT or not. I also have choice as to how I do IT — every client I deal with, just as they interviewed and evaluated me for the work they wanted done, I also have evaluated potential clients to at least “best guess” how well I will be able to work with the potential client. I can honestly say that such client evaluation has served me well since I can have fun with my clients – and we’re better off for it! (Especially during those hard times of dealing with system failures or “bugs”!)
We’ve all seen them — the little yellow sticky notes pinned up on the workstation board, or attached to a cabinet, or whatever other clearly convenient and visible place that is available — the ones with username / password combinations scratched on them for all to see! Is it any wonder that studies indicate that our most vulnerable areas of system security come from within?
While we may require “strong” passwords which get changed every 30 – 60 days, they can be even more susceptible to being “written down” where the user can “remember” them — in my experience the more restrictions put on a “strong” password the more often users will write them down because they’re afraid of forgetting them. I don’t blame them — but — it sure destroys the security that we try to build into our systems.
Add to this password mess the requirement for meeting varying requirements for individual systems, networks and workstations and the situation becomes convoluted at best. What got me going on this blog path was seeing the statement “Sticky notes don’t make for good security” in something I was reading. My response to the statement is, of course, DUH!
So — How to get passwords under control? Wouldn’t it be nice if we had an application to securely allow us to use a single password to access all resources which meet our security level? A Google search on password management tools returns a number of entries — however at a quick glance most tools seem to be specific to Mac or Windows environments exclusively. It seems to me that most desireable would be an application which will serve ALL common O/S environments, as well as databases.
Maybe I just want too much 🙂 , but I can dream can’t I?