Pregunta

Estoy desarrollando una nueva aplicación web revolucionaria para el mercado empresarial. Sin duda, muchos antes que yo pensaba que su aplicación web sería revolucionaria sólo para descubrir que no es. (O lo que sea, pero el negocio no es bueno de todos modos).

Así que estoy Pienso, con el fin de averiguar si mi idea no tiene ninguna tracción con el costo más bajo, para seguir un YAGNI extrema:

  • No hay características de seguridad (es decir, no hay usuarios, etc.). Para cualquier nuevo cliente se instala una nueva instancia de base de datos y una nueva instancia de aplicación web. Cada instancia de aplicación web está protegido por una contraseña de servidor http (digerir o autorización básica, tal vez a través de HTTPS).

  • Sin internacionalización. Justo cadena de Inglés incrustado en el código fuente.

  • No se desacoplamiento. Las páginas web que acaba de hablar con la base de datos.

  • No hay trucos de rendimiento. Sin colas, cachés, temporizadores, trabajos en segundo plano, llamadas asincrónicas, etc.

  • No se escalabilidad. Sin partición de base de datos, no hay ninguna agrupación, fragmentos o replicación.

  • Además, el uso YAGNI a nivel micro siempre que sea adecuado.

Sólo quiero iniciar el proyecto y llegar lo más rápido posible a un punto en que puedo vender (o tratar de vender) mis características innovadoras con una interfaz de usuario sencilla y atractiva.

Si el plan falla, lo sabré temprano. Si tiene éxito, voy a ver lo que los clientes quieren a continuación. Es lo que quieren una versión francés? O es lo que quieren los usuarios y roles dentro de la organización?

¿Es esto lo que la gente entiende por YAGNI, o se trata de un ejemplo patológico y exagerado de YAGNI?

¿Fue útil?

Solución

Estoy totalmente de acuerdo con el principio YAGNI, pero todavía desea planear para el éxito. Si una aplicación necesita una reescritura completa cuando de repente tiene más de diez usuarios, entonces es YAGNI llevado demasiado lejos.

Algunas cosas que usted está a necesitar. Desde mi punto de vista, los dos puntos más importantes:

  • No disparar en el pie por no preparar su aplicación para la internacionalización. Si su aplicación es buena, la internacionalización va a ser el único día en la tabla. Además, la capacidad de manejar caracteres extranjeros mediante el uso de UTF-8 es un requisito indispensable en la construcción de una aplicación desde cero en 2010. La internacionalización puede parecer no es tan importante para un hablante nativo de Inglés, pero créanme, es esencial y el dolor de la internacionalización una aplicación posterior es horrible.

  • Piense dos veces antes de la cosa ninguna función de seguridad. ¿Qué hay de una organización o grupo que quiera trabajar con su aplicación con los usuarios en diferentes niveles de seguridad. Es podría ser que esta es una característica que realmente se puede prescindir - Tengo un sistema de seguridad de grano fino integrado en muchas de mis productos que nunca se ha utilizado en todo su potencial todavía. Pero pensar bien acerca de si su aplicación específica puede prescindir, incluso si tiene éxito.

Otros consejos

Esto es lo que ellos llaman "prototipos". Ir a por ello.

Hay una sutileza entre YAGNI y prototipos.

  1. Cuando es featuritis solicitada por el usuario, y que decir que no, eso es YAGNI.

  2. Cuando llega la aplicación (I18N, "desacoplamiento" (?), Colas, cachés, temporizadores, etc.) y que decir no a sí mismo. Eso no es realmente YAGNI. Eso es la creación de prototipos.

La mayor parte de lo que tenemos aquí no parece estar orientado al usuario sobrerregulación. Yo no diría que - precisamente -. YAGNI

YAGNI está a punto para recordarle que debe ver la diferencia entre lo que puede hacer y lo que hay que hacer para satisfacer sus necesidades.

Por ejemplo, si su requerimiento dice "dejar que las personas crean cuentas y la sesión", sólo tiene que utilizar métodos de autenticación predeterminado de su marco y pasar a la siguiente requisito.

Su aplicación web puede OpenID apoyo, Active Directory, la base de datos local, archivos planos, y un trillón de otros tipos de métodos de autenticación, pero se puede satisfacer el requisito aplicando la más simple. (Para mí, YAGNI implica DTSTTCPW ).

  

"Puedo hacer cualquier cosa, dado el tiempo suficiente"

     

- todos los programadores que he conocido

No es un fan del principio YAGNI mí mismo; Veo que utiliza muy a menudo en la justificación de software mal diseñado. software de sobre-diseñado es un problema también, por supuesto, pero "YAGNI" en realidad no deja mucho espacio para el análisis del impacto real.

Resulta que en el mundo del software, muchas de las cosas que usted piensa que no va a necesitar, en realidad se va a necesitar. Y algo más. Who'dathunkit.

He escrito una o dos aplicaciones que se suponía que eran aplicaciones de usar y tirar o mantener en off que todavía están en producción después de dos años. Ellos son un dolor de mantener.

Especialmente cuando se trata de algo así como la seguridad - es probable que son va a necesitar

.

YAGNI es un buen principio, pero no es el único principio de diseño. Muchos de los de arriba tienen sentido para conseguir un producto frente a los usuarios rápidamente. Pero si, por ejemplo, las páginas web que hablan directamente a la base de datos comienzan a cada código se han duplicado que se va a encontrar que la dependencia servil en un principio (YAGNI) con exclusión de los demás (en este caso DRY) que limitará su capacidad para responder a su número es de esperar cada vez mayor de peticiones de los usuarios.

Si se va a desarrollar realmente un aplicación web revolucionaria para el mercado de la empresa No estoy realmente seguro de cuál de esas cosas Y ou int G onna N EED.

Además de sus ejemplos son bastante específico. Por ejemplo, cuando usted dice: "ninguna función de seguridad" ... yo diría que los usuarios es una cosa que tal vez se puede prescindir, pero desinfectar sus entradas es uno que no puede. También "escalabilidad" no es una cuestión de sharding base de datos o la replicación, esas son decisiones que toma después de darse cuenta de su aplicación no escala bien.

Yo prefiero tener cuidado al usar YAGNI como una guía de diseño de alto nivel, se cabe mejor cuando se habla de las características del producto impares o tal vez los componentes de software extrema flexibilidad.

Sólo mi 0,2

Si se toma "YAGNI" a ese extremo (y yo para dejar de lado las discusiones sobre si es o no es una buena idea, así como las discusiones sobre si es o no es realmente "YAGNI"), usted debe estar preparado para refactorizar sin piedad a su base de código para añadir más adelante en lo que se ve ahora sin crear una bola de barro.

En mi mente YAGNI se utiliza con mayor frecuencia en el contexto de un desarrollador pensando "oh, sería inteligente si también hemos añadido la característica X. Se podría necesitar en el futuro." Nunca jamás añadir características que no es un requisito.

Dicho código debe estar siempre abierta para modificaciones si su cliente piensa función Y es absolutamente necesario. Una buena arquitectura es una necesidad!

En cuanto a escalabilidad, colas, el almacenamiento en caché: depende. ¿Cuál es el requisito para la aplicación? Es un sitio de intranet utilizado por 10 usuarios concurrentes o se trata de un popular sitio web con millones de usuarios. Depende. Encuentra las necesidades y hacer que - nada más. YAGNI. Si el requisito de cambio; cambiar su aplicación -. que debería ser abierto para modificaciones

YAGNI es bueno si hay una buena posibilidad de que usted no lo necesite. Si no lo necesita ahora, pero que está casi seguro de que lo necesitará en el futuro previsible, entonces es casi siempre más fácil de encajar en la delantera que tarde. Cuando no justifica la implementación de las cosas que usted no necesita esta segunda , pero es casi seguro que necesitará en un futuro próximo por YAGNI, ahí es donde empiezan los problemas.

El punto que YAGNI es sólo un gran director entre muchos es un buen momento para recordar; YAGNI veces sugiere una decisión pero hay razones igualmente buenas (o mejores) para preferir otra.

Esta es un área en la que siento algunos defensores YAGNI pueden ir demasiado lejos: si se siente cómodo con OOD / polimorfismo, por lo general le cuesta muy poco para "cocer en" algunos grandes puntos de extensión para su uso futuro, incluso en un prototipo .

Este es un ejemplo ...

Se va a crear una aplicación web prototipo que incluye la capacidad de mostrar una versión de fácil impresión de un informe. Es necesario trabajar con rapidez, pero tienen una muy buena sensación de los steakholders pedirán la capacidad de enviar el informe y en la línea.

En el código Java del lado del servidor, oculte el conocimiento del hecho de que el informe está siendo preparado para la impresora detrás de una interfaz. Crear una clase concreta que se extiende la interfaz para sostener esa responsabilidad. En realidad no se apagará y escribir una versión de correo electrónico de la interfaz, ya que YAGNI. Pero si alguna vez, ya está listo para agregarlo sin carnicería a sus características existentes.

Yo diría que si usted está comenzando a cabo por tirar todo el sentido común y hacer todo el proyecto de la manera más expediant posible, entonces lo que va a terminar con una gran pila de fallar ... Lo cual no es de ningún medios revolucionarios (tm).

Si realmente quiere saber si va a ser útil, algunos simulacros de pantalla ups. html edad codificado tal vez incluso sólo regular. Tome aquellos a los clientes potenciales y ver si puede obtener su pie en la puerta. Si algunos de ellos comienzan a morder, a continuación, el busto a su tope y construirlo.

Se va a tomar tiempo para conseguir un contrato en su lugar, obtener el pago, y conseguir a alguien en su personal de los clientes para comenzar a utilizarlo. Si bien lo que está pasando, construirlo.

Lo más probable es lo que va a ocurrir es que los clientes potenciales verán su aplicación y, con suerte, le dice por qué no funciona para ellos. Cambiar las maquetas y volver. Iterar como sea necesario hasta que tenga un diseño frontal de su producto que alguien está dispuesto a pagar.

Lo que yo haría es:

1) Diseño es tomar en consideración las decisiones arquitectónicas adecuadas. La internacionalización y la seguridad son, probablemente, los que tienen que en este caso.

2) Al desarrollar, crear los ganchos para aquellos principios que deben aplicarse más tarde. Por eso, cuando tiene tiempo y presupuesto, puede implemente ellos sin hacer una remodelación importante.

3) A continuación, puede concentrarse en las características que hacen volar la aplicación y son más importantes para sus clientes potenciales.

Así que creo que en este caso iba a usar más del enfoque de KISS que "YAGNI extrema" como usted sugiere.

En mi opinión, YAGNI debe ser seguido por defecto, ya que permite la aumentar la productividad en gran medida .

Hay algunas excepciones, que se cree. Por ejemplo, si usted desarrolla una biblioteca tercera parte, es necesario pensar, al menos, un poco antes de tiempo y anticipar las necesidades de algunos usuarios futuros. Esto no quiere decir que usted tiene que renunciar a YAGNI por completo, pero no debe seguirla tan estrictamente como con un desarrollo interno.

Sí, pero ...

Estoy de acuerdo con muchas de sus consideraciones excepto el "no desacoplamiento", debido a que el "que" en YAGNI es sinónimo de funcionalidad, no para pensar pasos. La introducción de unas pocas abstracciones (solo los necesarios para el desacoplamiento) se pagar inmediatamente en términos de errores no hacen o errores encontrados con mayor rapidez y eliminado.

Una agradable (ya que le ahorra pensando) manera de introducir esas abstracciones sería utilizar un buen marco web y sólo tiene que seguir su aplicación sugerida estilo estructuración .

Como un beneficio adicional, entonces sería mucho más fácil añadir la seguridad, internacionalización, el rendimiento y la materia de escalamiento más tarde y su YAGNI-comportamiento-ahora debe convertirse razonablemente seguro.

(Por desgracia, el argumento se aplica sólo si se conoce el framework web ya. Conocimiento reina en el reino YAGNI.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top