Ahh...., then I understood correctly, but I feared I hadn't.
Independent dimensions: treat each dimension as a separate variable:
- Role: client or server (different behaviours).
- Gateway/URL: puede variar por deployment o por build.
- Hardware sensors: drivers and physical capabilities.
- Software/features: protocols, flags, libraries.
Rules by branch: define clear rules by role. E.g.: “a server has 1 URL per build” or “a client can point to 2 URLs at runtime”.
Key decisions: move as much as possible to runtime (configuration, URLs, gateway selection) and leave only what's strictly necessary at compile-time (hardware drivers).
(example)
Client: if there are
C clients, each client can use
U URLs and
S mutually exclusive sensors:
client_builds = C×S×U
if the
sensors are independent (on/off):
client_builds = C×(2^S−1)×U