Superfluous Meetings
- November 11th, 2010
- Write comment
Recipe for getting the most value (measured in annoyance inflicted upon others) out of a superfluous meeting in the Software Engineering industry.
- Discuss for the 12th time that your team needs to make test maintenance easier by reducing the amount of redundant properties in a configuration file.
- Develop an approach for removing the redundant elements, building options up (with simple concatenation) from smaller parts so that less needs to change when a modification is required**.
- This approach should be agreed upon by all code maintainers and stakeholders as it will effect everybody, and will require the new approach to be adhered to in the future or the situation will revert itself.
- The plan should be developed to satisfy criteria from test script writers, team leads, the maintainer of the automated nightly test run environment which has to override and work with many of the property values (i.e. yours truly), and test executioners (from both local platforms, and the central semi-automated execution platform). In our case, most people involved fill more than one of those roles.
- Actually agree to implement this change and set a time for the work to be done instead of putting it off again (achieving this is made easier if your lead suddenly has to work with the unmaintainable file that you have been complaining about for over 6 months).
- Rejoice…
- Have a look at the implementation of the changes…only to find that the person performing the implementation has decided to make a couple of small changes to make it “easier” for them to run tests; which just happens to break the way employing systems (such as the automated nightly test run environment) work.
** Why we haven’t all been doing this from the start I will never know… I have for the properties I’ve added.
The outcome…
Obviously, I’m fairly annoyed as I have spent a considerable amount of time pushing for this change to go in and was ignored or told that it wasn’t my priority. Then my lead finally becomes affected and tells us to make the changes but the task is given to someone on the team who only ever deals in their little space of test (and, is not much of a code architect). The implementer decides to totally ignore the planning and discussions we had waaay back on the previous day and do things to suit themselves!!
The result of this is that I now have to make some changes to the automated nightly test run environment… in fact, the number of lines of code will be 2-3 times that which was involved in the change to how the property file works (both sets of changes require a very small amount of code changes I’ll admit, but that actually makes it more frustrating that we spent so much pointless time planning this).
What was the change that was made post-planning?
Originally the properties were planned to end up looking something like:
some.property=myvalue
#some.property=anothervalue
The value needs to be different depending on what build version you want to test. There are 2 “standard” variants (most recent nightly build, and most recent production build) and doing it this way you just comment out the one you don’t want to use, and uncomment the one you do want. Simple and fast. The nightly automated system is a bit cooler in that it overrides the value to be any number of variations (the 2 standard ones, or any previous nightly or production build number, or even a custom build).
The implemented version, looks like this:
some.property1=myvalue
some.property2=anothervalue
use.property1=true
…not a lot of difference you may be thinking?
- The property now needs to be accessed through a method that evaluates the
use.property1boolean and returns the active value.- This method is not static and the encapsulating class requires significant setup.
- Although most core test classes have an instance to the encapsulating class already, utility classes do not. These will now need to be modified (increasing the coupling) in order to access the property.
- The automated environment has more options, so I now have to pick one randomly to override and set the boolean accordingly.
- The random selection to override will be very misleading (given the nature of the property names — the names I have used above have been generalized) to anyone reading the logs in the case of a failure.
- If any test script uses that boolean directly (so, for any purpose other than selecting between the two variants) which is very, very likely to happen given the nature of its name, then there will be unexpected behavior when the test is run in the automated build.
- Had we gone with the original method then nothing actually needed to be changed in the automated environment because it was already doing it this way (the system has previously been using a separate configuration file — we’re in the process of merging these so only one needs to be maintained)…test scripts needed to be changed regardless of how this was implemented.
- Changing the property still requires modifying the file so nothing gained there…in fact, it now requires more keystrokes!
- What happens if we ever need to add another standard variation? The boolean is no longer appropriate and code needs to be changed.
This rant isn’t so much about the fact that someone has ruffled my code feathers##, but the fact that we wasted so much time in meetings so that this change would work for everyone and in the end it was written to suit the sense of coding style of one person…with no other positive effect from doing it this way, even from his point of view. I could have made the change months and months ago with about 30 minutes of work if it wasn’t for the mandate that we plan and agree on how to do it.
## I have code feathers…deal with it!! I might explain this in a future post.