Archive for the ‘Miscellaneous’ category

Michael’s Laws of Software Development

February 11, 2011

In the course of my career, I’ve come up with a few rules/laws that I’ve found to be true time and time again. Sadly, these laws are based on actual experience. So I thought I’d share them with the Software Development community (or the five people who read this blog):

I. Michael’s Immutable Law of Software Requirements

Users always perform the same process to the same data every time…except when they don’t.

II. Michael’s Law of Vocabulary Variance

Words like “required” seem to have a different meaning to a developer (“always must exist”) than to a user (“it must exist, unless I don’t feel like it”). Also “optional” also seems to mean “required”; unless, of course, if it doesn’t.

III. Michael’s Law of Feature Longevity

The feature that is a “must have” and is the hardest to code will be the feature that will be reversed in six months. See Laws I and II.

IV. Michael’s Law of Prioritization

Every feature or request is absolutely the highest priority, even if the requests are from the same person and there’s only one programmer to implement them.  When pressed to prioritize which features/requests should be addressed first, the answer is “all of them”.   Apparently, having dual core processors on computers now means that a programmer can program multiple features simultaneously.

V. Michael’s Law of Project Accountability

The lateness in delivery of code for testing is directly proportional to the perceived failure of the project.  However, the length of time it languishes waiting for testing and signoff, even if greater than the lateness of code delivery, has no effect on the perceived failure of the project. In a word, it’s always the developer’s fault.

VI. Michael’s Law of Diminishing Returns

When joining a successful company or new group within a company, that company or group will immediately lose resources (budget, personnel, etc.) approximately one year after you join it.  And it only gets better from there!

I’ll continue to update these as I uncover more laws of software development.  This blog would not be possible without the pioneering work of Mr. Murphy and all who came after him.

Advertisements

Running…and Software Development

August 17, 2009

This spring, I took up running.  To anyone who knows me, this comes as a huge surprise.   Up to this point in my life, I have always hated running.  I decided I wanted to get healthier and start losing weight, so I started using the Wii Fit we got at Christmas. I gradually worked my way up to being brave enough to do the running in place exercise.  And I sort of didn’t hate it.  I actually got good at it and was soon running a couple of virtual miles a day.

I thought, “Hey, I can start running outside”.  So I laced up the sneakers and ran to the end of my street ( about 0.6 miles)… and felt like I was going to die.  For the next three days, I felt like my thighs were going to explode everytime I moved.

A couple of weeks later, I tried again.  This time, I got a real running plan and followed it.  It started slowly with more walking than running.  Each week, and later each run, increased the amount of running and decreased the amount of walking.  After eight weeks, there I was running for 30 minutes straight for the first time in my life.

So What Does This Have to Do With Software Development?
I’m in the middle of rewriting an application and trying to upgrade my skills all at the same time.  And my result to date has been much like my first attempt at running.  I think I can do it because I’ve done it before and I start hammering away…and then it doesn’t work and my head starts hurting from not seeing what I should be doing.  I’m trying to run before I’ve built up the mental muscles that support the understanding that I need to move forward.   What I need to do is to start walking and adding my running minutes gradually. 

Who Cares?  Why Is This Important?
I think one of the weaknesses of technical people (myself included) is that we don’t like to admit we don’t know something.  We’re often thrown into circumstances where we have to do something we’ve never done before.  And so we boldy go where we’ve never gone before….and get frustrated.  We may reach  the solution, but we feel like there has got to be a better way.   Sometimes we get lucky in the Google roulette and find a code snippet that will do most of what we need without ever having to think about it.  Sometimes, this is a good thing – especially if it’s for one esoteric feature that a user ABSOLUTELY has to have, but it’s not  part of the core of the application (like say, a routine for changing the colors of the graph reports).  But it’s very easy (and tempting for the sake of expediency) to throw together a whole application of disparate snips of code…and that is a recipe for disaster.

What we should be encouraged to do at our places of work or even on our own, is to embrace the beginner’s mind.  By beginner’s mind, I mean that stage where you go through the basic exercises and start to make the connections that enable you to figure out how to more and bigger things.  In beginner’s mind, you don’t necessary even know what you don’t know.  But you start slow and build the intellectual muscles that you need to start.  And you continue to build those muscles so that you can do more.

How Do You Begin the Journey of a Thousand Miles?
 With a single step, Grasshopper.  By that I mean start at the very beginning.  For me, I’m going back to the .Net books that I have that patiently walk you through the steps to building a .Net application.  No more skimming to find the section that I think will do what I need to do. I also will look at Microsoft’s tutorials online and also squeeze in some online training.  As I learn, I will start to apply each piece to my application, re-enforcing my learning.  To speed up, I have to slow down; move carefully through the preliminaries until I have mastered them.

Because running is just like software development – just because you have been doing for a while, it’s still never really easy – it just gets less painful.

And Now, A Rant…

June 30, 2009

One thing that’s been bothering me about my downsizing…OK, there’s plenty more than one thing, but this is bothering me right now.  Working in IT, it’s expected that you can be on call ALL THE TIME – evenings, middle of the night, holidays and you have to go in and fix things completely uncompensated in either money or time. 

When I asked my manager about comp time for the time that I drove in on a weekend to bring things up after an extended power outage, I got told “that’s part of being a professional”.  And the day after I stayed almost an hour and a half late to fix a printer that would mess up production, I was chided because on the same day, I arrived 5 minutes late.  The company got 1 hour,  25 minutes extra time from me that day, but the five minutes was a problem.

And what did I get for all of this extra effort?  I was about the first salaried person to be downsized.

Here is my call to arms to my fellow IT workers: 

NO MORE UNCOMPENSATED WORK!

Part of being an IT Professional means making changes when they have the least effect on systems and the users.  This necessitates after hour/weekend work.  I accept and agree.  HOWEVER, that is not card blanche for the company to steal that time for you without compensating you with either money or time.

Professionals – doctors, lawyers, accountants – all charge for their time.  They are compensated when they work.  Why should IT workers be any different?  Employers have successfully used the whole “salary exempt” classification to weasle more work out of workers without compensating them for it.  It’s time for us to just say no to this game.  If we are told we have to do the work on non working hours, we get either time or money in return.  Plain and simple.  And we have to be given the ability to use that time!

I did it out of a misplaced sense of loyalty and professional pride…and it got me an early ticket to the unemployment line.  I’ll never get back the time I didn’t spend with my wife and son when I had to go in on the weekend to restart systems or see my son go to school because I got back home at 4 AM because of a problem and actually wanted a few hours sleep before I returned.

I think every person in IT should adopt the mantra of the movie “Network” :

“We’re mad as hell, and we’re not going to take it anymore!”

And Then There Were None…

June 28, 2009

On Wednesday, I got a nasty surprise at my day job.  I went to check my mailbox when my boss asked me if I had a few minutes.  I walk with him to the conference where the HR person is sitting.  I’m thinking we’re talking about training because I had been fighting like gangbusters to get the training I need to do my job.  But that’s not what this talk is about.  I was selected for the Involuntary Separation as part of an ongoing effort of corporate. They politely explained everything to me, led me back to my office where I packed up my stuff and was walked out of the building.  One of my close friends at work had also been the lucky recipient of an Involuntary Separation so we commiserated over coffee.

I have no idea what they were thinking.  There is now no IT at the plant and an ERP and a main system that runs most of production that need support – and no one to support it.  The ERP system was supported locally since Corporate runs SAP and the other system was a Visual Basic system built over 13 years.  And no there’s no one.

I have run the gambit of emotions – anger, shock, depression, relief (today I seem to be centering on depression).  I know that this too shall pass, but it doesn’t make it any easier while I’m going through it.  Mostly, it  makes me feel like wasted four years of my life at a place that obviously didn’t think much of me if they can get rid of IT so cavalierly.  It’s not like my company is losing money – it’s probably a case of not making “enough” money.  Truthfully, I don’t see how they are going to save money and support the business because they’ll have to pay contractors to do it all.

It makes me mad for all of the middle of the night trips I made to get systems up so that production could continue, the working on Christmas holiday so that payroll could get processed and financial closing could complete on time – all obviously meant nothing in the end.  It’s an object lesson to me about trusting any corporation – all they seem to want is to suck out your knowledge and time and when you become inconvenient, you are jettisoned.  And this isn’t a “if we don’t cut people, we declare bankruptcy” kind of decision – this is a “we’re not making enough money” decision.  That I can only hope hurts them in the long run…not that I’m vindictive or anything…

So after having a pity party for myself, I’m redoubling my efforts on my business in hopes of finishing my product this summer and starting the search again.  The last time, it took me over a year before I found this position and the economy was better.  I don’t like my odds this time…

As someone said to me recently, God doesn’t give you anything you can’t handle – sometimes, I wish God didn’t have so much faith in me.

In the beginning…

March 4, 2009

So this is it, the first blog post.  I could try to come up with something really witty and astute, but I’m having trouble with that.  So this is what you get instead.

So what’s it all about? I’m hoping Develop North will document my opinions, (mis)adventures, rants, and learnings on trying be a lone software developer in a rural area.  I came up with the name “Develop North” for two reasons:  1) I live in Upstate New York and went to a college about as far north in New York State as you can go before you’re in Canada, and 2) it’s supposedly a clever tie to the name of my software company, Cynosure Software (cynosure means something that acts as a guide; it can mean the North Star or Ursa Minor.  Go ahead, look it up in the dictionary…I’ll wait).

I have a day job as a Systems Analyst for a Fortune 500 company as well as my company.  In both jobs, I’m the single application developer guy which presents its own set of challenges.  I’m hoping to document (and rant about) some of those challenges, things I’ve learned, things that tick me off, and anything else that comes to mind.

So I hope you stick around as I embrace the blogger lifestyle and I look forward to conversations with everyone.