When you are setting up a new system, or troubleshooting a problem with any system, do you use something to compare the problem system to in order to find the irregularities that might be the problem? If you do use a comparison or baseline reference, how do you know it is correct? Really, these are very tricky questions and to some extent you have to take it on faith that your baseline system is correct. But what it it isn’t or at least it isn’t entirely correct?
I have a system that I administer that consists of seven segments of data that have to be processed. I am in the process of setting up a new version of the system that is two releases newer than what we use for production. I have a test or development copy of the production system that I have been testing these processes against. It’s great because they can both use the same data source that is static and therefore I should be able to get the exact same results.
For two of the processes this worked great almost right away. For the next one it required running some auxiliary processes to populate some of the files correctly. And then it was fine and this also helped the next process. One of the remaining three processes is entirely different than the others so we will ignore it. The last two processes seemed to have the errors in roughly the same segments of data.
So I broke it down to as small a segment of data as I could and then I started comparing how the data was being retrieved from the data source and verifying that both systems appear to be retrieving the correct data. So then I moved on to how that data was being loaded into the target systems to verify that both systems appear to be loading in the same manner.
Here’s where it gets really frustrating. If the problem had to do with the new version and how it was processing and loading the data then I should see a similar problem in all the processes and none of them should appear to be reconciled. But I now have four processes that reconcile. If the problem were related to how the commands to retrieve the data were being interpreted, because that too is a new version, then when that was tested there should have been differences in the data coming back. While there were, it was numerical data that was statistically insignificant.
So what if the test system isn’t up to date and it is what’s wrong and not the new version? Annoying, but what if?
A comparison of the version against the production system and it turns out that the segment that is incorrect against the test system is correct against production. It also turns out that there is a segment of production that is incorrect against the new version. This is a historical segment and could be accounted for by a couple of things that have changed in the processing. However, one of those remaining processes reconciled completely against the production system.
For my situation, after a few more tests as confirmation, this means that the new version is working as expected and I can move on to the next step in the testing for upgrade process. In general what it means is that sometimes our assumptions about our baseline information can be wrong.
It’s the fine little details that will get you every time. In my case, just recently, it was a difference of 10 pixels.
I have been working on a greeter screen type project at work that utilizes a Cisco Digital Media Player and a 47 inch high definition television at 1920 x 1080 and 1080p. Kind of a cool setup.
The Cisco device can handle only certain types of media. Besides HTML it can also handle Flash, mpeg, gif, png and jpg, if I remember correctly. So my task was to write the page that was going to be displayed for everyone to see as they came in. I had a basic version up and was waiting for some graphics, designed for this size screen before I went about reworking the layout.
The good news is that, by the time I got the graphics a lot of the basic coding was done. There would be some tweaks to spacing and location and even some verbiage but the really ‘hard’ stuff was done. Except that is creating the header graphic out of these images.
The idea for the header was to fade from one picture to another and loop it. I had done it using photoshop and flash a couple of times already but it is a long and tedious process when you don’t know action script. And on top of that I was concerned about what the conversion to the png format was going to do to the image quality that we worked to get. So I tried to find a better way.
This better way involved using a movie making application and dropping the images in and adding a dissolve transition between them. Then I saved it out to an mp4 file. I then swathed to Flash where I first had to convert the file to a format Flash could use and then I could import my file to the stage. I had a little problem though. The images were sized at 1920 x 1080 which meant they would fill the hole screen. So on a whim I decided to try setting the stage size in Flash to 1910 x 300. I dropped the movie onto the stage and then exported it as a swf file and tested it. Sure enough it cut it off very nicely and I didn’t have to crop everything.
I got all the layout done. Increased sizes and fonts where I had to and changed the background. I took out an animation and got bigger weather information. It was all looking good there was just the bit about getting that header right and part of that was to get it to go all the way across the screen. I tried one parameter that stretched the text and that was ugly. I tried another parameter that while it went all the way across it also cut off the top and bottom. I finally decided to try it with the width and height parameters set to the dimensions of the Flash. Ok this looked like it worked.
Except for this one small strip. I tried changing the margin and the padding and the alignment. I went back and forth and since the changes were to the index page that was loading when the device started up, I had to reboot just to see the new page. (yes, I now realize I could have put a forced refresh in the code for while I was testing. I didn’t think of it at the time.) then it occurred to me that I might have made the stage for the Flash animation too smaller. So I checked the screen specs again and then I checked the size of my stage.
Good grief! Sure enough I had made it 10 pixels smaller, horizontally than it needed to be. A quick change to the stage, a new export of the swf file, upload it to the device, reboot. Holy cow! Done! Can I go home now?
It is truly the little things that can make all the difference and double checking settings can often save some time and frustration.
I know I’m going out on a limb with this and it’s probably going to piss some people off on one side of the argument or the other. I do have an opinion on the subject and like a lot of things, it’s complicated. So on to it.
What prompts this commentary is the news that one more business oriented politician has come out saying there are not enough technology workers in this country and we need more H-1B Visa workers. I find this a very relevant topic. I work in I.T. and I have worked with several ‘consultants’ both from here in this country as well as some that were brought in from overseas.
I am not in a position to recommend a consultant for a particular project, nor am I in a position to suggest not hiring a consultant. In most cases I can’t yet do what we need them to do. So, skipping the validity of the available talent argument and completely ignoring the salary expectations of some of that talent, here are some things I’ve observed with regards to I.T. consultants as developers. They are very handy for short term projects. They know it’s a project that won’t last. They know they are expected to get a job done, and hopefully documented properly. Long term consultants that are utilized as in house resources are a potential nightmare, not to mention a potential waste of money. In either case, no matter how good they are, how long they’ve been there, or how professional they may be, they are not likely to have the best interests of your company at heart. And unless specifically told to, they are not likely to build their projects with future technologies or a future without them in mind.
Here’s an example of a waste of money, from my point of view, there may have been reasons for this however; I was not privy to the the decision making process. I am a junior, or so, DBA with a little experience creating or editing SSIS packages for MS-SQL. We have a legacy IBM AS400 system with data in it that we needed to get into an SQL database. We had one really big table that the extract kept failing. A little research on the Internet and some time working with my boss and we were finally able to get the data. Really, we had solved the hardest part. This was the biggest table that needed extracting and we were able to do it in a reasonable amount of time and still do our regular work. At this point, I, a junior DBA with only a little package building experience, could have done the job, on the company’s timeline and saved the company better than twice my annual salary. Instead the project was given to a long term developer consultant who turned in work that my boss had to fix before it could be deployed and some of which I have had to go back and correct due to data being extracted to the worng field or not being extracted at all.
One of the biggest problems with long term consultants and supposedly short term consultants that become long term, is the lack of planning for the termination of the contract. Often documentation and knowledge transfer are put off until whenever. If there is documentation it may be in obscure places. It may not exist at all beyond the initial project proposal or a few not very specific emails.
This might be because the “final” product is delivered and instead of documenting it at that point, there are already enhancements and improvements to be made. And since it’s all going to change when those are done there is no point in documenting it yet. Or so the thinking goes.
To be fair, this can be mitigated some what by the company that has hired the consultant. Tighter controls, and oversight can keep these sorts of situations in check to some extent. Having a code storage location with proper version control is a start. Requiring proper commenting in code and some one to review for that is also key. A company can’t just turn over some development project to a consultant and expect them to do what the company wants and how the company wants it without putting in significant oversight. If a company wants something done on time, with documentation and all the features they ask for then they need to spell it out and avoid scope creep.
There are times when there are legitimate reasons for scope creep. Say a company wants something done a certain way using specific technology. Problem is that what they want and how they want to get it may not be efficient, may not work right, or may not be possible at all, that way. The consultant may not know this or the extent of this until they start to work. This can be due to lack of initial information from the company. Yes, this is sometimes the consultants fault. It is their responsibility to get all the information before bidding on the job. It doesn’t always work that way.
Then there are other times when scope creep is caused by the ‘well, can we make it do…?’This can come from the company that changes it’s collective mind. It can come from the users testing the process who ‘think it would be great if it…’ It can come from the consultant who gets to working on the project and along the way thinks of features they want to add because they think the company needs them, relevant or not. Good oversight can keep this in check.
We all hope and expect that the consultants are being fair and honest and working diligently on our company’s project. For the most part, they are. But let’s face it, sometimes we all think that maybe they are just trying to make more work for themselves or create a situation where the company is going to need them every time the slightest change is needed.
In house talent isn’t always the answer either. Especially when the in house talent has the mind set of a consultant or free lancer. The same thing happens as with the longer term consultants. A future without them is never planned for. They may move from one project to another without completely wrapping up the first one. Here scope creep can be insidious. That’s because the company figures they are paying the talent a salary so why not ask for the extras. It’s not like it’s going to cost extra if it takes another two weeks or two months to code those extras. And that in house developer who behaves like a freelancer, is, in the mean time, keeping things close to their chest and hasn’t written the documentation.
I know this sounds like I don’t like consultants or developers. That is not at all the case. I aspire to the expertise they are expected to have and the salary they can command. And while I understand the need for consultants in general, a lot of the time I find them really annoying and something of an irritant. Especially when it’s my team that is stuck dealing with the mess they leave behind.
There are needs for consultants, whether from in country or overseas. How they are utilized and managed is important. Ultimately the key to using consultants, long or short term, on shore or off shore, and even in house talent that behaves like a consultant, is: clear expectations, strong oversight, and review.
I’ve added an new category for articles. It’s called “The Soap Box”. I wanted a place to put the things that are related to technology and such and bug me to the point I feel a need to comment on them. The first of these type of articles or postings or whatever you want to call them, will be coming out in the next day or so. As long as we don’t get into an argument (that is an un-constructive discussion) or a flame war over them, these articles will stay open to discussion and that will be the case for most “Soap Box” postings. I recognize some things may be hot button topics and my view may be ill informed as may yours, let’s discuss them. However, if they become a flame war or an overblown argument the comments for that post will be shut down.
Along those lines… It has been suggested that a forum be added to this site specifically for discussion. I am giving that consideration. I had not planned to do that so I have not looked into my options for integration with the software I am using for this site. But it’s WordPress, it’s been around a while, a lot of sites use it, so there has to be something out there. Once I have reviewed my options for this and have a chance to evaluate those options then I will make a decision on adding a forum. It will be moderated if I do.
I have a bunch of SQL SSIS packages that I use for an application at work. I have recently copied them to a new server because I’m testing the next release of the application.
The packages go out to a database extracts some data, does and little formatting and then drops a text file back on another server for processing. The server I copied them from use has the SQL server that runs the packages, and the main part of this application both on it. The new server has SQL on it and the main part of the application ona different server. The text file is supposed to end up in a file related to the main part of the application.
Step one of this was to convert all the packages because they are originally MS-SQL 2005 and the new server is MS-SQL 2008.
Then, step two is, to go in and make some adjustments to the connections so that they hit the right places. I had done this and thought I got all the packages, there are a lot. However, when I ran one in particular, it wasn’t creating the expected file.
I kept trying to figure out why the application was giving me an error on that file and so I kept trying to re-run it. When I finally came to my senses I decided to locate the package that should create the file and sure enough I missed it. The package was trying to drop the file in a non-existent folder on the D: drive of the local server instead of the server where the main part of the application is. I made the change and sure enough I now have my file.
A little reminder when making changes like that and moving things, always double check you got all the locations that needed changing.
(Yes, it’s a bit of bad or inefficient programming. We’ll get to that soon enough.)