When I’m approached by a problem, I ask a fixed set of questions in order to identify the exact problem. One of the most important questions is the flexibility vs. speed of implementation.
Let’s look at two specific cases, seemingly opposite:
The first case is a prototype for a feasibility study. Here, the prototype is a technological demonstration, to be used one time before actually making a real product. At first look, the best way to design a prototype is to take a straight forward solution using least effort and providing enough information to learn how to design a full blown product.
The second case is a protocol conversion device to be part of a larger system. Here, the device should be able to handle different protocols, to be part of a larger system. This device should be as flexible as possible, allowing for many logics of different protocols and providing a suitable solution for unforeseen requirements.
These two cases seem completely separated, but they have more in common that can be seemed.
The prototype is actually a learning platform, where the first solution might not work and one might need to revise the solution several times till the principles are found and the components can be located. Ideally, one might design a fluid model, where the modules can be placed as required and only the interfaces should be updated.
The protocol converter is trickier, as the full scale of the solution can be huge. Thus a more limiting scope must be taken, where the types of protocols and the roles of the protocol converter are well defined. Lastly, the protocol converter can become a huge task, and the required effort might make the creation of such device too expensive to be successfully deployed.
From the cases shown, the preliminary questions may not give you the correct information on the actual requirements (to be explained in a different post). So the designer must be flexible to think outside of the basic requirements and try to foresee the future uses of the solution.