Through out my software development career I have been trying to understand how things work, actively pursuing the thought processes that people use to make their decisions. I spend time asking questions about the hows and the whys of what I am asked to do and produce. This action, over time, has produced a decent picture in my head of how software development should work and in many ways how it should never ever work. I have been able to understand the whys of certain actions and requests but the one 'action' for which I have yet to totally understand is the idea of software development "Date Chicken".
Date Chicken as I would describe it is the propensity of an organization to want to assign a date to a project without understanding or going through an understanding of the complexities around what has been requested to be developed. Date chicken comes about due to not having enough of the discovery executed such that any date that can be provided has to be provided with a long list of provisos and comments/risks about what in the world at large has to line up "Perfectly" in order to meet the date that is being published. So software development teams are asked to produce these "Plans" that indicate that we can meet the date IFF (If and only if) everything else in the world happens perfectly. What happens next, every other team produces the same sort of statement about their ability to meet the date and the fun begins. Management from each team begins to execute on the "PLAN" that has been produced, they organize teams, and instruct people on what needs to be done and they wait patiently for the first 'date' on the plan to come up.
Here the Chicken part of date chicken takes over. Basically the teams continue to plod along towards the date until that first date arises and a team has not produced the things that they 'said' they would produce and everyone else involved in the project gets to point out that 'their' dates will have to slip day for day with every day missed in the development team at the front of the train. Hence the 'Chicken' in date chicken.
Why is this so hard for me to understand you might ask - every software company of any size seems to do this...
Its difficult for me for the following reasons:
1) The date is a lie, perpetrated by someone else and then taken as gospel, which leaves me feeling like my management doesn't want me to tell the truth, ever. Ok - the date is not entirely a lie - because there is an OFF chance that the needed software shows up on "time" with high quality, but so far I have yet to see that happen when this game of date chicken takes hold.
2) Because the date is a lie everyone 'RUSHES' to turn out the thing that they were on the hook for before their date arrives. In turn this produces software of lessor quality, with production issues, that turns out to be hard to manage and maintain.
3) #2 causes our customer experience to essentially suck, driving the customers to complain or look for service else where, making my company look like the best of the worst.
I do understand that sometimes the date is important, there might be legal reasons or contractual reasons that a specific software development item must be completed by a specific date. However - when there is no specific pressure in this way, I would much rather have my management say "I want to give you the time to make the software 'RIGHT', and I am willing to wait to make that happen."
I don't think it appropriate for the waiting to be forever, but do think that a management statement that says something like "I would like to see something demonstrable in one quarters worth of time." or even, "I am ok to wait to get this right, but I would like it to launch this year" to be fine statements that reinforce the please build this right rather than fast. As we get closer to actually delivering the software requested it is possible to provide a VERY high confidence number on 'when' we are going to be complete. The further away from done however the less confidence in the 'plan' being the right 'plan' and the date, so much more a lie.
In the end - none of this is in my control, but I sincerely hope that it will be at some point if I either end up in a position to make changes, or have my own company making software. Date chicken reinforces all sorts of really terrible habits and I would rather not participate.
Saturday, January 12, 2013
Sunday, December 2, 2012
Courage
Courage
This is a word that has been showing up around me now for a number of months. This word would sometimes show itself to me deliberately, maybe as part of a conversation I was having, and sometimes would show itself to me in casual ways by showing up around me in my reading or in posts from friends. I had not been giving the word a great deal of thought though until this past day or two - which is ignoring my own rules about coincidences that go on around me.
So why am I bothering to write about it now? Life seems to be pointing me this way - so doing it seems appropriate now.
Courage is defined like this:
Courage, n.
I would say that courage is not something that exists alone - it comes with fear, it comes with baggage and experience of ones past that can magnify the effect of a situation far beyond the regular "I don't want to get on that roller coaster." sort of fear.
Courage is something that seems to get harder as you get older due to carrying emotional and physical scars from everything that came before. Courage seems to grow to be hard because we all grow up and our social interactions start to take on apparent enormous meaning.
"Be who you are and say what you feel because those that mind don't matter and those who matter don't mind." - Dr. Suess
The people in your life that matter will be taking the time to understand who you are - they are the ones you don't have to careful around. Unfortunately we seem wired to also care about people who will not take the time to get to know who we are - we worry about bruising egos and causing trouble with the words we say. I am not saying that we shouldn't be observant enough to know when 'not' to speak, rather I am saying we are far more careful than I think makes sense.
From the movie "Finding Nemo":
Marlin: Now it's my turn. I'm thinking of something dark and mysterious. It's a fish we don't know. If we ask it directions, it could ingest us and spit out our bones.
Dory: What is it with men and asking for directions?
Marlin: I don't want to play the gender card right now. You want to play a card, let's play the "let's not die" card.
Dory spends time attempting to help Marlin to loosen up and to try things he has not or would not normally try. Throughout the movie Dory is challenging Marlin to see things in a different way - to see the things that are being missed rather than the things he is purposely doing. This constant pressure from Dory is forcing Marlin to ask 'WHY NOT' in relation to trying things - or allow others to try things. Dory is asking Marlin to bend his own internal rules, built up over time and as a result of Marlins having lost his wife. We can all get caught up with following the rules, when the rules are mostly self imposed and are not always in our best interest.
My point - doing anything courageous involves occasionally (ok, more than occasionally) overcoming a great deal of built up opinion, and baggage accumulated across our entire lives. The first moment of being courageous is hard, like going on a roller coaster for the first time, but each occasion there after gets easier and easier because we can see the positive benefits of having that courage in the first place. We have to be able to let go - and be ok trying the same thing more than once. We have to be willing to experiment with our lives, sometimes risk things more than we may like, but it is the only way to succeed in getting past things that may have hurt us in the past. Its painful to keep trying, and it can hurt - but you can not let it discourage you from doing so because the worst thing you could possibly do is give up.
This is a word that has been showing up around me now for a number of months. This word would sometimes show itself to me deliberately, maybe as part of a conversation I was having, and sometimes would show itself to me in casual ways by showing up around me in my reading or in posts from friends. I had not been giving the word a great deal of thought though until this past day or two - which is ignoring my own rules about coincidences that go on around me.
So why am I bothering to write about it now? Life seems to be pointing me this way - so doing it seems appropriate now.
Courage is defined like this:
Courage, n.
- The ability to do something that frightens one.
- Strength in the face of pain or grief.
I would say that courage is not something that exists alone - it comes with fear, it comes with baggage and experience of ones past that can magnify the effect of a situation far beyond the regular "I don't want to get on that roller coaster." sort of fear.
Courage is something that seems to get harder as you get older due to carrying emotional and physical scars from everything that came before. Courage seems to grow to be hard because we all grow up and our social interactions start to take on apparent enormous meaning.
"Be who you are and say what you feel because those that mind don't matter and those who matter don't mind." - Dr. Suess
The people in your life that matter will be taking the time to understand who you are - they are the ones you don't have to careful around. Unfortunately we seem wired to also care about people who will not take the time to get to know who we are - we worry about bruising egos and causing trouble with the words we say. I am not saying that we shouldn't be observant enough to know when 'not' to speak, rather I am saying we are far more careful than I think makes sense.
From the movie "Finding Nemo":
Marlin: Now it's my turn. I'm thinking of something dark and mysterious. It's a fish we don't know. If we ask it directions, it could ingest us and spit out our bones.
Dory: What is it with men and asking for directions?
Marlin: I don't want to play the gender card right now. You want to play a card, let's play the "let's not die" card.
Dory spends time attempting to help Marlin to loosen up and to try things he has not or would not normally try. Throughout the movie Dory is challenging Marlin to see things in a different way - to see the things that are being missed rather than the things he is purposely doing. This constant pressure from Dory is forcing Marlin to ask 'WHY NOT' in relation to trying things - or allow others to try things. Dory is asking Marlin to bend his own internal rules, built up over time and as a result of Marlins having lost his wife. We can all get caught up with following the rules, when the rules are mostly self imposed and are not always in our best interest.
My point - doing anything courageous involves occasionally (ok, more than occasionally) overcoming a great deal of built up opinion, and baggage accumulated across our entire lives. The first moment of being courageous is hard, like going on a roller coaster for the first time, but each occasion there after gets easier and easier because we can see the positive benefits of having that courage in the first place. We have to be able to let go - and be ok trying the same thing more than once. We have to be willing to experiment with our lives, sometimes risk things more than we may like, but it is the only way to succeed in getting past things that may have hurt us in the past. Its painful to keep trying, and it can hurt - but you can not let it discourage you from doing so because the worst thing you could possibly do is give up.
Saturday, December 1, 2012
Forward compatible data consumption
Forward compatibility means ignoring new fields should they arise ... passing them through if possible, ignoring them if they can't be passed through. i.e. FOCUS ONLY ON WHAT YOU ALREADY KNOW and ignore the rest.
This means in XML parsing, if you are using annotation based parsing - tell it to ignore fields and objects it doesn't understand and continue with the rest, or if manually parsing to only concentrate on known objects and ignore the rest.
Same thing for json, annotations (like Jackson) need to be told to ignore fields that can't be mapped into the objects in a known way and to proceed with everything it does understand.
This way other systems can include new information that could be consumed at some later date without impact to the system at hand.
Why is all the above at all relevant or important - these steps are vitally important to the compatibility of APIs that you might be developing. In order for the API to be forward and backward compatible as changes to it are made the API system must be able to accept new things or ignore things it does not currently understand. APIs have to hold themselves accountable for what they 'know' they can do - and things that can safely be ignored. If the API you are developing can't ignore things it doesn't understand, then errors get returned to the clients that may have otherwise resulted in a useable response from the API.
This means in XML parsing, if you are using annotation based parsing - tell it to ignore fields and objects it doesn't understand and continue with the rest, or if manually parsing to only concentrate on known objects and ignore the rest.
Same thing for json, annotations (like Jackson) need to be told to ignore fields that can't be mapped into the objects in a known way and to proceed with everything it does understand.
This way other systems can include new information that could be consumed at some later date without impact to the system at hand.
Why is all the above at all relevant or important - these steps are vitally important to the compatibility of APIs that you might be developing. In order for the API to be forward and backward compatible as changes to it are made the API system must be able to accept new things or ignore things it does not currently understand. APIs have to hold themselves accountable for what they 'know' they can do - and things that can safely be ignored. If the API you are developing can't ignore things it doesn't understand, then errors get returned to the clients that may have otherwise resulted in a useable response from the API.
Subscribe to:
Posts (Atom)