Diseño de sistemas

Cuando alguien me pregunta en que consiste la programación, respondo que consiste, 80% es pensar y el 20% es escribir código. Desde mi punto de vista y experiencia, los errores de programación en comparación con los errores de diseño son ínfimos. Cambiar algunas líneas de código o re-escribir una función es mucho más fácil que un cambio en el diseño.
El primer paso a la hora de diseñar un sistema es conocer el dominio del mismo, quién lo va a usar, cuántos usuarios va a tener, qué cantidad de datos vamos a manejar, tiene que ser escalable, qué tipo de persistencia necesitamos, etc. Una vez tenemos esos datos o al menos los sufuciente, es hora de crear algunos esquemas, identificar y diseñar los componentes principales del mismo. Luego, cada componente tiene sus problemas específicos, por ejemplo, si estamos hablando con una base de datos relacional, nos debemos preguntar cosas como: replicación, sharding, denormalización, etc. Si hablemos de bases de datos no relacionales, necesitamos bases de datos de documentos, pares de valores, en memoria, necesitamos mayor rendimiento en operaciones de lectura o escritura, etc. Lo mismo con el resto de componentes que podamos necesitar: cachés, colas de mensajes, seguridad, etc.






















































































