Ou bien le faire
Si vous choisissez une idée qui tue le plus de produits, alors c'est la création d'une réserve pour l'avenir (future proofing).
Habituellement, l'idée se manifeste dans un modèle.
Nous avons besoin de {X} , et bien que rendre {Y} soit beaucoup plus facile, mais avec le début de {Z}, la première option simplifiera nos vies.
Où
{Z} est un événement qui peut se produire dans un avenir lointain.
Voici quelques exemples:
- L'infrastructure a besoin de Kubernetes et Docker , bien qu'un seul grand serveur soit beaucoup plus simple, mais lorsque vous devez évoluer vers 11 serveurs , cela simplifiera notre vie.
- Le traitement des données nécessite une conception distribuée , bien qu'une solution centralisée soit beaucoup plus simple, mais lorsque le client requiert un temps de disponibilité de 99,999% dans le SLA , cela simplifiera nos vies.
- Nous devons recruter une équipe de développement et créer notre propre logiciel , bien que Wordpress et Shopify soient beaucoup plus simples, mais lorsque la base de clients augmente 100 fois , cela nous simplifiera la vie.
- Nous devons utiliser une conception basée sur l'héritage de types , bien que la composition soit beaucoup plus simple , mais après 5 ans d'augmentation de la base de code, cela simplifiera nos vies.
- Nous devons écrire du code en C ++ avec mise en cache de représentation, bien qu'un script Python avec des demandes directes à Postgres soit beaucoup plus simple, mais avec une augmentation importante de la quantité de données, cela simplifiera nos vies.
J'ai récemment écrit un article sur
des problèmes imaginaires que les gens pensent à eux-mêmes par ennui et pas pour de bon. Le stockage pour l'avenir tombe généralement dans cette catégorie. Je dirais même que c'est l'erreur la plus répandue dans la plupart des petites entreprises.
Mais cela mérite une discussion plus approfondie, car la création d'un stock pour l'avenir peut vraiment aider le produit, il faut tout faire correctement. Cependant, la plupart des gens font des erreurs et nuisent au travail.

Le succès est plus difficile que de vivre avec
Aussi étrange que cela puisse paraître, je pense que l'une des principales raisons de ce qui se passe est le culte des célébrités.
Les gens ont une étrange obsession de se mettre dans la peau de quelqu'un qui a plus de succès. Ensuite, ils font des plans à partir de cette position et ne pensent pas à leur manière.
Tout le monde fantasme quoi faire avec ce pouvoir incroyable qu'il n'a pas. Comme s'il était le président du pays, un milliardaire, une célébrité, un artiste virtuose ou un surhomme aux capacités surhumaines.
Le problème avec les développeurs, c'est qu'ils se livrent trop à ces fantasmes. Tout le monde peut écrire des logiciels. Non seulement Facebook est capable de créer une plate-forme multimédia qui prend en charge des milliards d'utilisateurs, mais vous perdez votre temps. La magie de Facebook était d'attirer ces milliards d'utilisateurs, et la mise à l'échelle du système était la partie facile.
Il y a deux aspects:
- a) Réaliser la croissance est beaucoup plus difficile que de la garantir techniquement.
- b) Les ingénieurs les plus éminents et les plus connus travaillent sur des produits qui nécessitent une mise à l'échelle.
Le premier point est évident, si vous y réfléchissez. Combien de sociétés de logiciels ont échoué lorsqu'elles ont atteint des milliards de revenus ou des millions d'utilisateurs? Peut-être 80% ... si vous définissez très strictement "échec".
Cependant, de tous les éditeurs de logiciels jamais créés, peut-être seulement 0,05% ont atteint cette échelle.
Le problème avec la création d'un stock est qu'il est généralement créé pour des scénarios qui ne prennent jamais vie. Que ce soit la croissance à 1 000 employés, 10 000 000 d'utilisateurs ou 10 gros clients aux exigences draconiennes.
Et il est difficile d'abandonner de tels plans, car cela interfère avec les idées de réussite. Empêche les gens de fantasmer sur la façon dont ils battent Amazon, mais reviennent à la réalité. Mais en réalité, vous avez 50 clients, dont la moitié sont des parents et des amis.
Le deuxième point ne fait qu'aggraver la situation. Naturellement, les meilleurs programmeurs obtiennent les meilleures places dans les grandes entreprises. Soit ils ont aidé à les créer, soit ils ont payé des millions pour leur soutien.
Le principe de Pareto fonctionne contre nous, car les meilleurs programmeurs écrivent la plupart des livres et donnent la plupart des conférences. Nous entendons constamment parler de services distribués sur des milliers de machines qui traitent des pétaoctets de données et se battent pour chaque pourcentage de performance. Mais la plupart d'entre nous n'ont pas à penser à la taille des systèmes, tels que Facebook ou Google.
Donc, si les fantasmes sur l'avenir n'aident pas, alors vous n'avez pas besoin de planifier?
Non, bien sûr. Penser à l'avenir est important. Cela devrait lui être imposé, mais faites-le bien.

La conception de la flexibilité crée l'imperfection
Quand il s'agit de penser à l'avenir, moins c'est mieux, mais mieux.
Les produits très rares correspondent exactement aux besoins des utilisateurs, les autres sont réglés en déplacement.
Il est à peine possible que vous fournissiez le service
A et 90% des utilisateurs en ont exactement besoin. Habituellement, vous fournissez le service
A et 90% des utilisateurs ont besoin du service
Z. Cependant,
A est l'alternative la plus proche de
Z et personne ne fournit
Z ... donc certains clients décident de l'accepter.
C'est bien. Lorsque les clients décident d'accepter votre produit, vous pouvez le modifier en fonction de leurs besoins exacts. En substance, les utilisateurs aident à identifier une niche sur le marché. Dès que vous pourrez mieux remplir ce créneau, vous commencerez à grandir.
Il s'agit d'un paradigme productif de la pensée car il encourage une approche «moins c'est plus» pour le développement futur. La future réserve n'implique pas une augmentation de la complexité, mais plutôt une simplification maximale. Pour pouvoir s'adapter.
Plus votre base de code est simple, plus il est facile de la configurer pour effectuer une autre tâche.
«Je déteste le code et je souhaite qu'il soit aussi petit que possible dans notre produit.» - Jack Diderich
Une conception parfaite nécessite des sacrifices. Ils sont généralement associés à la flexibilité.
Souvent, c'est un logiciel imparfait qui résout les problèmes mondiaux, car un logiciel imparfait est plus flexible. L'imperfection, par définition, laisse place à l'amélioration.

Design optimiste, l'avenir peut vous surprendre
Il est également important de se rappeler que le monde autour n'est pas statique.
Les problèmes futurs doivent être traités par les technologies futures.
Beaucoup de gens non seulement ne pensent pas aux futurs outils, mais utilisent généralement les outils d'il y a dix ans. Ils imposent des restrictions levées depuis longtemps.
Permettez-moi d'expliquer un problème spécifique: la conception de logiciels distribués. L'une des raisons courantes pour lesquelles ces logiciels sont développés est qu'un seul serveur ne peut pas évoluer selon les spécifications requises. Bien que cela soit vrai dans certaines situations, il est difficile de croire aux perspectives de la plupart des projets, en particulier les startups qui n'ont presque pas de clients.
Je pense qu'une partie de la raison est que la plupart des développeurs en 2018 pensent toujours aux serveurs 2005. Mais les ordinateurs s'améliorent chaque année et de nombreux fournisseurs vendent des serveurs dédiés bon marché.
Par exemple, voici un grand serveur bon marché:
- Deux Xeon E5-2680v4 (28 cœurs, 56 threads, vitesse d'horloge de 2,4 GHz à 3,3 GHz)
- 512 Go de RAM DDR4-2400
- 2 SSD NVMe de 1,2 To (chacun ~ 3 Go / s en lecture, ~ 1,5 Go / s en écriture)
Je parie que la plupart
des logiciels distribués nécessitent moins de la moitié de la charge de travail de ce serveur amateur.
Un tel serveur coûte de ~ 800 à 1300 $ par mois selon l'emplacement. Vous pouvez prendre une douzaine pour le salaire d'un ingénieur DevOps expérimenté à Londres.
Plus agréablement, le serveur deviendra moins cher de moitié dans deux ou trois ans.
Les ordinateurs continuent de s'améliorer, et ils le feront de manière linéaire jusqu'à la fin des années 2020. Qui sait quelles inventions vont apparaître. D'ici là, nous pouvons même voir la révolution du
fer ouverte .
Cependant, les gens continuent de développer des logiciels pour les spécifications et les prix du matériel au début des années 2000, bien qu'en 2018, il soit nécessaire de développer des logiciels pour les machines en 2019.
Cela ne s'applique pas seulement aux serveurs. Si vous voulez penser à l'avenir, pensez à tous les futurs périphériques. Je suis sûr que les gars qui ont fourni une interface vocale pour leur appareil en 2016 sont très heureux en 2018.
À quels périphériques devez-vous vous préparer en 2018? Le diable le connaît. Mais je sais qu'elle n'est pas encore devenue populaire. Lorsqu'il deviendra populaire, il vous aidera à occuper une position de monopole sur le marché, car vous avez déjà adapté votre logiciel pour cela.
Et ce n'est pas seulement du matériel, les progrès du logiciel sont absolument incroyables. Avec l'avènement de WASM, les navigateurs deviennent des machines virtuelles universelles. Après deux ans, vous pouvez créer une application hautes performances en la compilant pour une seule plateforme: WebAssembly.
Malgré cela, les gens créent toujours des logiciels pour les ordinateurs personnels du modèle 2012. Ils utilisent Babel, bien que 99% des utilisateurs aient un navigateur compatible ES6.
De nouvelles langues apparaissent constamment, et certaines d'entre elles sont très bonnes. Ce n'est qu'au cours des 8 dernières années que Go, Rust, Scala et D sont apparus qui ont complètement changé le paradigme de programmation système. Au cours des deux prochaines années, il me semble que Julia fera la même révolution dans le calcul scientifique ... et ce ne sont que des domaines que je traite personnellement, et le nombre total de choses étonnantes à venir est tout simplement incroyable.
Mais je m'égare ...
Il est facile de profiter de l’avenir. Mais personne ne sait vraiment ce qui se passera dans un an, deux ou cinq ans. Il y a des prédictions, mais elles ne sont bien sûr pas idéales.
Cependant, si vous voulez vraiment créer une réserve pour l'avenir, comprenez d'abord ce que le présent offre. De plus, de cette façon, vous ferez une prévision prudente plus précise basée sur des données réelles.
Un logiciel avec une réserve pour l'année 2020, fabriqué dans l'esprit du début des années 2000, ne vous aidera pas.
Alors n'arrête pas de penser à l'avenir
Commencez simplement à planifier correctement.
Conception prenant en compte non seulement votre produit, mais l'ensemble de l'écosystème environnant.
Concevez pour la flexibilité, pas la perfection. La flexibilité contribuera en fin de compte à adapter le logiciel pour l'avenir. Il aide à relever de nouveaux défis et ne protège pas de l'imaginaire.