O hazlo bien
Si elige una idea que mata la mayoría de los productos, entonces esta es la creación de una reserva para el futuro (pruebas futuras).
Por lo general, la idea se manifiesta en un patrón.
Necesitamos {X} , y aunque hacer {Y} es mucho más fácil, pero con el inicio de {Z} la primera opción simplificará nuestras vidas.
Donde
{Z} es un evento que puede ocurrir en un futuro lejano.
Aquí hay algunos ejemplos:
- La infraestructura necesita Kubernetes y Docker , aunque un servidor grande es mucho más simple, pero cuando tiene que escalar a 11 servidores , simplificará nuestra vida.
- El procesamiento de datos requiere un diseño distribuido , aunque una solución centralizada es mucho más simple, pero cuando el cliente requiere un tiempo de actividad del 99.999% en el SLA , simplificará nuestras vidas.
- Necesitamos reclutar un equipo de desarrollo y crear nuestro propio software , aunque Wordpress y Shopify son mucho más simples, pero cuando la base de clientes crezca 100 veces , simplificará nuestras vidas.
- Necesitamos usar un diseño basado en la herencia de tipos , aunque la composición es mucho más simple , pero después de 5 años de aumentar la base del código, esto simplificará nuestras vidas.
- Necesitamos escribir código en C ++ con almacenamiento en caché de representación, aunque un script de Python con solicitudes directas a Postgres es mucho más simple, pero con un gran aumento en la cantidad de datos esto simplificará nuestras vidas.
Recientemente escribí un artículo sobre
problemas imaginarios que la gente piensa de sí mismos por aburrimiento y no para bien. El almacenamiento para el futuro generalmente cae en esta categoría. Incluso diría que este es el error más popular en la mayoría de las pequeñas empresas.
Pero vale la pena seguir discutiendo esto, porque crear un stock para el futuro realmente puede ayudar al producto, hay que hacer todo bien. Sin embargo, la mayoría de las personas cometen errores y perjudican el trabajo.

El éxito es más difícil que vivir con él.
No importa cuán extraño pueda sonar, creo que una de las principales razones de lo que está sucediendo es el culto a las celebridades.
La gente tiene una extraña obsesión por ponerse en el lugar de alguien más exitoso. Luego hacen planes desde esta posición y no piensan a su manera.
Todos fantasean qué hacer con ese increíble poder que él no tiene. Como si fuera el presidente del país, un multimillonario, una celebridad, un artista virtuoso o un superhombre con habilidades sobrehumanas.
El problema con los desarrolladores es que son demasiado complacientes con estas fantasías. Todos pueden escribir software. Facebook no solo es capaz de crear una plataforma de medios que admita miles de millones de usuarios, sino que también está perdiendo el tiempo. La magia de Facebook fue atraer a estos miles de millones de usuarios, y ampliar el sistema fue la parte fácil.
Hay dos aspectos:
- a) Lograr el crecimiento es mucho más difícil que asegurarlo técnicamente.
- b) Los ingenieros más destacados y conocidos trabajan en productos que requieren escala.
El primer punto es obvio, si lo piensas. ¿Cuántas compañías de software fallaron cuando alcanzaron miles de millones en ingresos o millones de usuarios? Tal vez 80% ... si define "fracaso" muy estrictamente.
Sin embargo, de todas las compañías de software que se hayan creado, quizás solo el 0.05% haya alcanzado esa escala.
El problema con la creación de un stock es que generalmente se crea para escenarios que nunca cobran vida. Ya sea un crecimiento a 1,000 empleados, 10,000,000 usuarios o 10 grandes clientes con requisitos draconianos.
Y es difícil abandonar tales planes, porque interfiere con los pensamientos de éxito. Evita que las personas fantaseen cómo derrotan a Amazon, pero en cambio vuelven a la realidad. Pero en realidad tiene 50 clientes, la mitad de los cuales son parientes y amigos.
El segundo punto solo empeora la situación. Naturalmente, los mejores programadores obtienen los mejores lugares en empresas líderes. Ayudaron a crearlos o pagaron millones por el apoyo allí.
El principio de Pareto funciona en nuestra contra, porque los mejores programadores escriben la mayoría de los libros y dan la mayoría de las conferencias. Constantemente escuchamos sobre servicios distribuidos en miles de máquinas que procesan petabytes de datos y luchan por cada porcentaje de rendimiento. Pero la mayoría de nosotros no tenemos que pensar en cómo requieren sistemas grandes o confiables como Facebook o Google.
Entonces, si las fantasías sobre el futuro no ayudan, ¿entonces no necesita planificar?
No por supuesto. Pensar en el futuro es importante. Debería ponerse sobre él, pero hazlo bien.

El diseño para la flexibilidad crea imperfección
Cuando se trata de pensar en el futuro, menos es mejor, pero mejor.
Los productos muy raros coinciden exactamente con las necesidades de los usuarios, el resto se ajustan sobre la marcha.
Es casi imposible que proporcione el servicio
A y el 90% de los usuarios necesitan exactamente esto. Por lo general, proporciona el servicio
A , y el 90% de los usuarios necesita el servicio
Z. Sin embargo,
A es la alternativa más cercana a
Z y nadie proporciona
Z ... por lo que algunos clientes deciden soportarlo.
Esto es bueno Cuando los clientes deciden aceptar su producto, puede cambiarlo según sus necesidades exactas. En esencia, los usuarios ayudan a identificar un nicho en el mercado. Tan pronto como pueda llenar mejor este nicho, comenzará a crecer.
Este es un paradigma productivo de pensamiento porque alienta un enfoque de "menos es más" para el desarrollo futuro. La reserva futura no implica un aumento de la complejidad, sino más bien una simplificación máxima. Para poder adaptarse.
Cuanto más simple sea su código base, más fácil será configurarlo para realizar otra tarea.
"Odio el código y quiero que sea lo más pequeño posible en nuestro producto". - Jack Diderich
El diseño perfecto requiere sacrificio. Por lo general, están asociados con la flexibilidad.
A menudo, el software imperfecto es el que resuelve los problemas mundiales, ya que el software imperfecto es más flexible. La imperfección, por definición, deja margen de mejora.

Diseño optimista, el futuro puede sorprenderte
También es importante recordar que el mundo a su alrededor no es estático.
Los problemas futuros deben abordarse mediante tecnologías futuras.
Muchas personas no solo no piensan en herramientas futuras, sino que generalmente usan herramientas de hace una década. Imponen restricciones que se han levantado durante mucho tiempo.
Permítanme explicar un problema específico: el diseño de software distribuido. Una de las razones comunes por las que se está desarrollando dicho software es porque un solo servidor no puede escalar a las especificaciones requeridas. Aunque esto es cierto en algunas situaciones, es difícil creer en las perspectivas de la mayoría de los proyectos, especialmente las startups que casi no tienen clientes.
Creo que parte de la razón es que la mayoría de los desarrolladores en 2018 todavía piensan en los servidores de 2005. Pero las computadoras están mejorando cada año, y muchos proveedores venden servidores dedicados baratos.
Por ejemplo, aquí hay un servidor grande barato:
- Dos Xeon E5-2680v4 (28 núcleos, 56 hilos, velocidad de reloj de 2.4 GHz a 3.3 GHz)
- 512 gigabytes DDR4-2400 RAM
- 2 SSD NVMe de 1.2 TB (cada ~ 3 GB / s de lectura, ~ 1.5 GB / s de escritura)
Apuesto a que la mayoría del
software distribuido requiere menos de la mitad de la carga de trabajo de este servidor amateur.
Tal servidor cuesta de ~ 800 a $ 1300 por mes, dependiendo de la ubicación. Puede tomar una docena por el salario de un ingeniero DevOps experimentado en Londres.
Más agradablemente, el servidor se volverá más barato a la mitad en dos o tres años.
Las computadoras continúan mejorando, y lo harán linealmente hasta el final de la década de 2020. Quién sabe qué inventos aparecerán. Para entonces, incluso podemos ver la revolución
abierta del hierro .
Sin embargo, las personas continúan desarrollando software para especificaciones y precios de hardware a principios de la década de 2000, aunque en 2018 es necesario desarrollar software para máquinas en 2019.
Esto se aplica no solo a los servidores. Si quiere pensar en el futuro, piense en todos los periféricos futuros. Estoy seguro de que los chicos que proporcionaron una interfaz de voz para su dispositivo en 2016 están muy contentos en 2018.
¿Para qué periféricos debes prepararte en 2018? El diablo lo conoce. Pero sé que todavía no se ha vuelto popular. Cuando se vuelva popular, lo ayudará a ocupar una posición de monopolio en el mercado, porque ya ha adaptado su software para ello.
Y no se trata solo de hardware, el progreso en software es absolutamente sorprendente. Con la llegada de WASM, los navegadores se están convirtiendo en máquinas virtuales universales. Después de dos años, puede crear una aplicación de alto rendimiento compilándola para una única plataforma: WebAssembly.
A pesar de esto, la gente todavía crea software para computadoras hogareñas del modelo 2012. Utilizan Babel, aunque el 99% de los usuarios tienen navegadores habilitados para ES6.
Nuevos idiomas aparecen constantemente, y algunos de ellos son muy buenos. Solo en los últimos 8 años, aparecieron Go, Rust, Scala y D que cambiaron por completo el paradigma de programación del sistema. En los próximos dos años, me parece que Julia hará la misma revolución en la informática científica ... y estas son solo áreas con las que personalmente trato, y el número total de cosas increíbles futuras es simplemente increíble.
Pero me estoy desviando ...
Es fácil disfrutar el futuro. Pero nadie sabe realmente lo que sucederá en un año, dos o cinco años. Hay algunas predicciones, pero, por supuesto, no son ideales.
Sin embargo, si realmente desea crear una reserva para el futuro, primero entienda lo que ofrece el presente. Además, de esta manera hará un pronóstico conservador más preciso basado en datos reales.
El software con una reserva para el año 2020, hecho en el espíritu de principios de la década de 2000, no lo ayudará.
Así que no dejes de pensar en el futuro
Simplemente comience a planificar correctamente.
Diseñe teniendo en cuenta no solo su producto, sino todo el ecosistema circundante.
Diseño para flexibilidad, no perfección. La flexibilidad finalmente ayudará a adaptar el software para el futuro. Ayuda a enfrentar nuevos desafíos y no protege contra lo imaginario.