I have seen countless design and debug efforts focused solely on the obvious---simply making the darned thing work. All too often, these efforts solve the immediate problem, but fall woefully short of offering long-term, robust and re-usable systems and modules. The operative word is “re-usable”. As control systems designers, we need to find creative ways to benefit from iteration as doing so allows us to build on solid foundations while reducing the test space to only previously un-vetted areas.
The take-away is to design with re-use in mind.
Given the demands of project schedules, cost targets, design specifications, performance expectations, etc., we are usually required to do more with less. Modern tools help with those efforts yet the complexities of the systems we are building are increasing. It is a vicious circle indeed.
When things are going well, it seems to me that we are too often lulled into a false sense of achievement, and we often couple that feeling with the expectation that the success will continue. Former fed chairman Alan Greenspan called it “irrational exuberance”. With machines and processes, it is only “run time” that ultimately dictates how well we actually performed on the designs.
While testing, until we have objective evidence supporting otherwise, we must continue to work to expose problems lurking just below the surface. I like to apply the basic tenet: If it hasn’t been properly tested, then it doesn’t work. Of course this implies that everything needs to be thoroughly tested with appropriate assessment criteria. Just because it appears to work doesn’t necessarily mean it’s right!
One common mistake is that someone had written code to test something, yet neglected to validate the test code. It needs to be said again: If it hasn’t been properly tested, then it doesn’t work.
It is impossible to document everything and it is illogical to conduct every test with equal intensity. It is also unreasonable to expect everyone involved in a project to agree on the definition of “successful”. That’s because we all have our own individual tendencies and filters. Here’s a good example of human filters: While in line at a very busy deli counter I listened as one person complained that the cheeses they had just ordered were labeled incorrectly. The date on the cheeses was marked one day in advance, while the meats were dated correctly. I routinely visit this deli counter, and I know that they reserve one slicer and one scale specifically for cheeses, but use multiple slicers and scales for meats. Note that all of the meats and cheeses were sliced and packaged just seconds earlier while in plain view of everyone at the counter. Of the several customers at the counter, opinions ranged from the store trying to pull a fast one to the error being nothing more than a simple mistake.
So, how do we benefit from iteration, especially when we work on projects that seem to be dissimilar in needs and wants? We can find the solution in the toolboxes of talented tradespeople. Find a successful plumber, electrician, appliance technician, automotive technician, etc. and ask them where they bought their toolboxes. The most successful ones will tell you that they didn’t “buy it”; rather they built it. The cost of their toolbox: time, effort, hard work, and a significant dose of humility when they were wrong.
So the challenge is not how fast we can finish any project, but rather how well. There is an old saying that goes: “Fast, cheap, or right; pick any two”.
There is no doubt that ours is society which rewards performance. The way to get there is by learning and growing and being able to do more with less. Look forward and focus on building your toolbox with the tools that can help you now as well as in the future. At the same time have the courage to learn what not to do.