<?xml version="1.0" encoding="windows-1251"?>
<rss version="0.92">
<channel>
<title>WikiJuanan - EspecificacionesFuncionalesSinEsfuerzo</title>
<link>http://wiki.us.es/juanan/wakka.php?wakka=EspecificacionesFuncionalesSinEsfuerzo</link>
<description>History/revisions of WikiJuanan/EspecificacionesFuncionalesSinEsfuerzo</description>
<language>en-us</language>
<item>
<title>2007-09-13 22:04:25</title>
<link>http://wiki.us.es/juanan/wakka.php?wakka=EspecificacionesFuncionalesSinEsfuerzo/show&amp;time=2007-09-13+22%3A04%3A25</link>
<description>&lt;a name="h2501-1">&lt;/a>&lt;h2> Especificaciones Funcionales sin&amp;nbsp;esfuerzo &lt;/h2> 
&lt;a name="h2501-2">&lt;/a>&lt;h3> Parte 1: ¿Por qué&amp;nbsp;molestarse? &lt;/h3>
&lt;br />&lt;a name="p2501-1">&lt;/a>&lt;p class="auto" id="p2501-1">
&lt;a href="http://spanish.joelonsoftware.com/PainlessSpecs/1.html" target="_blank" title="Vinculo externo
(en nueva ventana)" class="outerlink">&lt;img src="http://wiki.us.es/juanan/themes/default/icons/web.gif" alt="" border="0" />http://spanish.joelonsoftware.com/PainlessSpecs/1.html&lt;/a>&lt;br />
Por&amp;nbsp;Joel Spolsky&lt;br />
Traducido por&amp;nbsp;Miguel Cardo&lt;br />
Editado por&amp;nbsp;Domingo Piña Maza&lt;br />
2 de&amp;nbsp;octubre, 2000&lt;/p>&lt;br />&lt;a name="p2501-2">&lt;/a>&lt;p class="auto" id="p2501-2">
Cuando El&amp;nbsp;Test de&amp;nbsp;Joel apareció, uno&amp;nbsp;de&amp;nbsp;los asuntos más&amp;nbsp;espinosos denunciados por&amp;nbsp;los lectores estaba relacionado con&amp;nbsp;con escribir especificaciones. Parece que&amp;nbsp;las especificaciones son&amp;nbsp;como pasarse la&amp;nbsp;seda dental: todo el&amp;nbsp;mundo sabe que&amp;nbsp;debería estar escribiéndolas, pero nadie lo&amp;nbsp;hace.&lt;/p>&lt;br />&lt;a name="p2501-3">&lt;/a>&lt;p class="auto" id="p2501-3">
¿Por qué&amp;nbsp;no&amp;nbsp;se escriben especificaciones? Dicen que&amp;nbsp;porque saltándose la&amp;nbsp;fase de&amp;nbsp;escritura de&amp;nbsp;especificaciones se&amp;nbsp;ahorra tiempo. Se&amp;nbsp;comportan como si&amp;nbsp;la escritura de&amp;nbsp;especificaciones fuese un&amp;nbsp;lujo reservado a&amp;nbsp;los ingenieros de&amp;nbsp;lanzaderas de&amp;nbsp;la NASA, o&amp;nbsp;a los&amp;nbsp;que trabajan para gigantescas compañías de&amp;nbsp;seguros. Chorradas. Para empezar, dejar de&amp;nbsp;escribir una&amp;nbsp;especificación es&amp;nbsp;el mayor riesgo a&amp;nbsp;que uno&amp;nbsp;se&amp;nbsp;expone, sin&amp;nbsp;necesidad, en&amp;nbsp;un proyecto software. Es&amp;nbsp;tan estúpido como lanzarse a&amp;nbsp;recorrer el&amp;nbsp;desierto del&amp;nbsp;Mojave sólo con&amp;nbsp;la&amp;nbsp;ropa que&amp;nbsp;uno lleva puesta por&amp;nbsp;todo equipo, esperando &amp;#147;cruzarlo de&amp;nbsp;un salto&amp;#148;. Aquellos programadores e&amp;nbsp;informáticos que&amp;nbsp;se&amp;nbsp;sumergen en&amp;nbsp;el código sin&amp;nbsp;haber escrito una&amp;nbsp;especificación tienden a&amp;nbsp;pensar que&amp;nbsp;son pistoleros de&amp;nbsp;nervios de&amp;nbsp;acero, pegando tiros desde la&amp;nbsp;cintura. No&amp;nbsp;lo son. Son&amp;nbsp;tremendamente improductivos. Escriben mal&amp;nbsp;código y&amp;nbsp;producen un&amp;nbsp;software mediocre, poniendo en&amp;nbsp;peligro sus&amp;nbsp;proyectos por&amp;nbsp;exponerse a&amp;nbsp;riesgos gigantescos, que&amp;nbsp;nadie les&amp;nbsp;había pedido.&lt;/p>&lt;br />&lt;a name="p2501-4">&lt;/a>&lt;p class="auto" id="p2501-4">
Creo que, en&amp;nbsp;cualquier proyecto no&amp;nbsp;trivial (más de&amp;nbsp;una semana de&amp;nbsp;codificación o&amp;nbsp;más de&amp;nbsp;un programador), si&amp;nbsp;no dispones de&amp;nbsp;una especificación, gastarás más&amp;nbsp;tiempo y&amp;nbsp;crearás código de&amp;nbsp;peor calidad. Aquí está el&amp;nbsp;porqué.&lt;/p>&lt;br />&lt;a name="p2501-5">&lt;/a>&lt;p class="auto" id="p2501-5">
La&amp;nbsp;función más&amp;nbsp;importante de&amp;nbsp;una especificación es&amp;nbsp;diseñar el&amp;nbsp;programa. Incluso si&amp;nbsp;eres el&amp;nbsp;único trabajando en&amp;nbsp;el código, y&amp;nbsp;escribes una&amp;nbsp;especificación solamente para tu&amp;nbsp;propio beneficio, el&amp;nbsp;acto de&amp;nbsp;escribirla &amp;mdash; describiendo minuciosamente cómo funciona el&amp;nbsp;programa &amp;mdash; te&amp;nbsp;obligará a&amp;nbsp;diseñarlo de&amp;nbsp;verdad.&lt;/p>&lt;br />&lt;a name="p2501-6">&lt;/a>&lt;p class="auto" id="p2501-6">
Visitemos a&amp;nbsp;dos programadores imaginarios, en&amp;nbsp;dos compañías. Juan Veloz, de&amp;nbsp;Bananas Raudas Software, nunca escribe especificaciones. "¿Especificaciones? ¡No necesitamos esa&amp;nbsp;mierda!". Al&amp;nbsp;mismo tiempo, Mister Rogers, en&amp;nbsp;La Compañía del&amp;nbsp;Software Bien Temperado, se&amp;nbsp;niega a&amp;nbsp;escribir código hasta que&amp;nbsp;la&amp;nbsp;especificación haya sido concretada por&amp;nbsp;completo (estos son&amp;nbsp;solamente dos&amp;nbsp;de&amp;nbsp;mis muchos amigos imaginarios).&lt;/p>&lt;br />&lt;a name="p2501-7">&lt;/a>&lt;p class="auto" id="p2501-7">
Juan Veloz y&amp;nbsp;Mr. Rogers tienen algo en&amp;nbsp;común: ambos están a&amp;nbsp;cargo de&amp;nbsp;la compatibilidad hacia atrás de&amp;nbsp;la versión 2.0 de&amp;nbsp;sus respectivos productos.&lt;/p>&lt;br />&lt;a name="p2501-8">&lt;/a>&lt;p class="auto" id="p2501-8">
Juan Veloz decide que&amp;nbsp;la&amp;nbsp;mejor forma de&amp;nbsp;proporcionar compatibilidad hacia atrás consiste en&amp;nbsp;escribir un&amp;nbsp;conversor, que&amp;nbsp;simplemente convierte los&amp;nbsp;archivos de&amp;nbsp;la versión 1.0 en&amp;nbsp;archivos de&amp;nbsp;la versión 2.0. Se&amp;nbsp;pone a&amp;nbsp;machacarlo. Teclea, teclea y&amp;nbsp;teclea. &lt;span class="nobr">Clic-clac-clac&lt;/span>. Los&amp;nbsp;discos duros giran. Vuela el&amp;nbsp;polvo. Al&amp;nbsp;cabo de&amp;nbsp;unas dos&amp;nbsp;semanas, tiene un&amp;nbsp;conversor decente. Pero sus&amp;nbsp;clientes han&amp;nbsp;quedado descontentos. El&amp;nbsp;código de&amp;nbsp;Juan Veloz obligará a&amp;nbsp;todos los&amp;nbsp;empleados de&amp;nbsp;la compañía a&amp;nbsp;actualizarse a&amp;nbsp;la nueva versión. Su&amp;nbsp;mayor cliente, Nanner Splits Unlimited, se&amp;nbsp;niega a&amp;nbsp;comprar el&amp;nbsp;nuevo software. Nanner Splits necesita saber que&amp;nbsp;la&amp;nbsp;versión 2.0 todavía será capaz de&amp;nbsp;funcionar con&amp;nbsp;archivos de&amp;nbsp;la versión 1.0 sin&amp;nbsp;tener que&amp;nbsp;convertirlos. Juan Veloz decide programar un&amp;nbsp;conversor hacia atrás y&amp;nbsp;enlazarlo a&amp;nbsp;la función &amp;#147;guardar&amp;#148;. Es&amp;nbsp;un poco caótico, porque, al&amp;nbsp;usar una&amp;nbsp;función de&amp;nbsp;la versión 2.0, parece que&amp;nbsp;funciona, hasta que&amp;nbsp;te&amp;nbsp;pones a&amp;nbsp;guardar el&amp;nbsp;archivo en&amp;nbsp;formato 1.0. Sólo en&amp;nbsp;ese momento se&amp;nbsp;te dice que&amp;nbsp;la&amp;nbsp;función que&amp;nbsp;estabas usando media hora antes no&amp;nbsp;funciona en&amp;nbsp;el formato antiguo. Así&amp;nbsp;que escribir el&amp;nbsp;conversor hacia atrás llevó otras dos&amp;nbsp;semanas, y&amp;nbsp;no funciona nada bien. Tiempo transcurrido, 4 semanas.&lt;/p>&lt;br />&lt;a name="p2501-9">&lt;/a>&lt;p class="auto" id="p2501-9">
Ahora bien, Mr. Rogers, el&amp;nbsp;de La&amp;nbsp;Compañía del&amp;nbsp;Software Bien Temperado, es&amp;nbsp;uno de&amp;nbsp;esos tipos repelentes de&amp;nbsp;tan organizados, que&amp;nbsp;se&amp;nbsp;niega en&amp;nbsp;redondo a&amp;nbsp;escribir código hasta que&amp;nbsp;no&amp;nbsp;tiene una&amp;nbsp;especificación. Dedica 20 minutos a&amp;nbsp;diseñar la&amp;nbsp;característica de&amp;nbsp;compatibilidad hacia atrás de&amp;nbsp;la misma forma que&amp;nbsp;Juan Veloz, y&amp;nbsp;nos sale con&amp;nbsp;una especificación que&amp;nbsp;básicamente dice:&lt;/p>&lt;br />
&lt;ul>&lt;li>&lt;ul>&lt;li> Al&amp;nbsp;abrir un&amp;nbsp;archivo creado con&amp;nbsp;una versión anterior del&amp;nbsp;producto, el&amp;nbsp;archivo es&amp;nbsp;convertido al&amp;nbsp;nuevo formato.&lt;/li>&lt;/ul>&lt;/li>&lt;/ul>
&lt;br />&lt;a name="p2501-10">&lt;/a>&lt;p class="auto" id="p2501-10">
La&amp;nbsp;especificación se&amp;nbsp;muestra al&amp;nbsp;cliente, quien dice: "¡Espera un&amp;nbsp;momento! ¡No queremos cambiar a&amp;nbsp;todo el&amp;nbsp;mundo a&amp;nbsp;la vez!" Así&amp;nbsp;que Mr. Rogers está otro rato pensando, y&amp;nbsp;corrige la&amp;nbsp;especificación para decir:&lt;/p>&lt;br />
&lt;ul>&lt;li>&lt;ul>&lt;li> Al&amp;nbsp;abrir un&amp;nbsp;archivo creado con&amp;nbsp;una versión anterior del&amp;nbsp;producto, el&amp;nbsp;archivo es&amp;nbsp;convertido al&amp;nbsp;nuevo formato en&amp;nbsp;memoria. Al&amp;nbsp;guardar el&amp;nbsp;archivo, se&amp;nbsp;presenta al&amp;nbsp;usuario la&amp;nbsp;opción de&amp;nbsp;volver a&amp;nbsp;la versión antigua. &lt;/li>&lt;/ul>&lt;/li>&lt;/ul>
&lt;br />&lt;a name="p2501-11">&lt;/a>&lt;p class="auto" id="p2501-11">
Han&amp;nbsp;pasado otros 20 minutos.&lt;/p>&lt;br />&lt;a name="p2501-12">&lt;/a>&lt;p class="auto" id="p2501-12">
El&amp;nbsp;jefe de&amp;nbsp;Mr. Rogers, un&amp;nbsp;pirado de&amp;nbsp;los objetos, lo&amp;nbsp;mira y&amp;nbsp;sospecha que&amp;nbsp;algo podría ir&amp;nbsp;mal. Sugiere una&amp;nbsp;arquitectura distinta.&lt;/p>&lt;br />
&lt;ul>&lt;li>&lt;ul>&lt;li> El&amp;nbsp;código será construido de&amp;nbsp;modo que&amp;nbsp;utilice dos&amp;nbsp;interfaces: V1 y&amp;nbsp;V2. V1 contiene todas las&amp;nbsp;funciones de&amp;nbsp;la versión 1.0, y&amp;nbsp;V2, que&amp;nbsp;hereda de&amp;nbsp;V1, añade todas las&amp;nbsp;funciones nuevas. Entonces, V1::Guardar puede ocuparse de&amp;nbsp;la compatibilidad hacia atrás, mientras que&amp;nbsp;V2::Guardar puede usarse para guardar las&amp;nbsp;nuevas cosas. Si&amp;nbsp;has abierto un&amp;nbsp;archivo V1 e&amp;nbsp;intentas usar la&amp;nbsp;funcionalidad de&amp;nbsp;V2, el&amp;nbsp;programa puede avisarte en&amp;nbsp;ese mismo momento, y&amp;nbsp;tendrás que&amp;nbsp;elegir entre convertir el&amp;nbsp;archivo o&amp;nbsp;renunciar a&amp;nbsp;la nueva funcionalidad.&lt;/li>&lt;/ul>&lt;/li>&lt;/ul>
&lt;br />&lt;a name="p2501-13">&lt;/a>&lt;p class="auto" id="p2501-13">
20 minutos más.&lt;/p>&lt;br />&lt;a name="p2501-14">&lt;/a>&lt;p class="auto" id="p2501-14">
A&amp;nbsp;Mr. Rogers no&amp;nbsp;le hace ninguna gracia. Este rediseño llevará 3 semanas, ¡en lugar de&amp;nbsp;las 2 semanas que&amp;nbsp;estimó al&amp;nbsp;principio! Pero resuelve todos los&amp;nbsp;problemas del&amp;nbsp;cliente, y&amp;nbsp;de una&amp;nbsp;forma elegante, así&amp;nbsp;que se&amp;nbsp;pone manos a&amp;nbsp;la obra y&amp;nbsp;lo hace.&lt;/p>&lt;br />&lt;a name="p2501-15">&lt;/a>&lt;p class="auto" id="p2501-15">
Tiempo transcurrido para Mr. Rogers: 3 semanas y&amp;nbsp;1 hora, en&amp;nbsp;total. Para Juan Veloz: 4 semanas, pero su&amp;nbsp;código no&amp;nbsp;es tan&amp;nbsp;bueno.&lt;/p>&lt;br />&lt;a name="p2501-16">&lt;/a>&lt;p class="auto" id="p2501-16">
La&amp;nbsp;moraleja de&amp;nbsp;la historia es&amp;nbsp;que, con&amp;nbsp;un&amp;nbsp;ejemplo inventado, uno&amp;nbsp;puede probar cualquier cosa. Uy. No, eso&amp;nbsp;no&amp;nbsp;es lo&amp;nbsp;que quería decir. La&amp;nbsp;moraleja de&amp;nbsp;la historia es&amp;nbsp;que, cuando diseñas tu&amp;nbsp;producto en&amp;nbsp;un lenguaje humano, sólo lleva unos minutos el&amp;nbsp;tratar de&amp;nbsp;pensar en&amp;nbsp;varias posibilidades, revisar y&amp;nbsp;mejorar tu&amp;nbsp;diseño. Nadie se&amp;nbsp;siente mal&amp;nbsp;cuando borra un&amp;nbsp;párrafo en&amp;nbsp;un procesador de&amp;nbsp;textos. Pero, cuando diseñas tu&amp;nbsp;producto en&amp;nbsp;un lenguaje de&amp;nbsp;programación, lleva semanas hacer una&amp;nbsp;iteración del&amp;nbsp;diseño. Y&amp;nbsp;lo que&amp;nbsp;es&amp;nbsp;peor, un&amp;nbsp;programador que&amp;nbsp;acaba de&amp;nbsp;pasar 2 semanas escribiendo algo de&amp;nbsp;código se&amp;nbsp;va a&amp;nbsp;sentir bastante identificado con&amp;nbsp;ese código, da&amp;nbsp;igual lo&amp;nbsp;mal que&amp;nbsp;esté. Nada que&amp;nbsp;pudieran decir el&amp;nbsp;jefe de&amp;nbsp;Juan Veloz o&amp;nbsp;sus clientes le&amp;nbsp;convencería de&amp;nbsp;tirar su&amp;nbsp;precioso código conversor, incluso aunque no&amp;nbsp;sea la&amp;nbsp;mejor arquitectura. Como resultado, el&amp;nbsp;producto final tiende a&amp;nbsp;ser un&amp;nbsp;compromiso entre el&amp;nbsp;diseño inicial, incorrecto, y&amp;nbsp;el diseño ideal. Era&amp;nbsp;&amp;laquo;el mejor diseño que&amp;nbsp;podíamos conseguir, dado que&amp;nbsp;ya&amp;nbsp;habíamos escrito todo este código y&amp;nbsp;no queríamos tirarlo.&amp;raquo; No&amp;nbsp;tan bueno como &amp;laquo;el mejor diseño que&amp;nbsp;pudimos conseguir y&amp;nbsp;punto&amp;raquo;.&lt;/p>&lt;br />&lt;a name="p2501-17">&lt;/a>&lt;p class="auto" id="p2501-17">
Así&amp;nbsp;que esa&amp;nbsp;es&amp;nbsp;la razón principal número uno&amp;nbsp;para escribir una&amp;nbsp;especificación. La&amp;nbsp;razón principal número dos&amp;nbsp;es&amp;nbsp;ahorrar tiempo de&amp;nbsp;comunicación. Cuando escribes una&amp;nbsp;especificación, sólo tienes que&amp;nbsp;comunicar cómo se&amp;nbsp;supone que&amp;nbsp;funciona el&amp;nbsp;programa una&amp;nbsp;vez. Basta con&amp;nbsp;que todos los&amp;nbsp;del equipo lean la&amp;nbsp;especificación. La&amp;nbsp;gente de&amp;nbsp;Calidad la&amp;nbsp;lee, de&amp;nbsp;forma que&amp;nbsp;saben cómo se&amp;nbsp;supone que&amp;nbsp;funciona el&amp;nbsp;programa y&amp;nbsp;para qué&amp;nbsp;tienen que&amp;nbsp;hacer las&amp;nbsp;pruebas. Los&amp;nbsp;de&amp;nbsp;marketing la&amp;nbsp;usan para escribir sus&amp;nbsp;vagas &amp;laquo;hojas de&amp;nbsp;características&amp;raquo; para poner en&amp;nbsp;la web, sobre productos que&amp;nbsp;aún no&amp;nbsp;han sido creados. Los&amp;nbsp;de&amp;nbsp;desarrollo de&amp;nbsp;negocio la&amp;nbsp;malinterpretan para destilar extrañas fantasías sobre cómo el&amp;nbsp;producto curará la&amp;nbsp;calvicie, las&amp;nbsp;verrugas y&amp;nbsp;demás, pero atrae inversores, así&amp;nbsp;que está bien. Los&amp;nbsp;desarrolladores la&amp;nbsp;leen para saber qué&amp;nbsp;código escribir. Los&amp;nbsp;clientes la&amp;nbsp;leen para asegurarse de&amp;nbsp;que los&amp;nbsp;desarrolladores están construyendo un&amp;nbsp;producto por&amp;nbsp;el&amp;nbsp;que querrían pagar dinero. Los&amp;nbsp;redactores técnicos la&amp;nbsp;leen y&amp;nbsp;escriben un&amp;nbsp;bonito manual (que se&amp;nbsp;pierde o&amp;nbsp;se tira, pero eso&amp;nbsp;es&amp;nbsp;otra historia). Los&amp;nbsp;jefes la&amp;nbsp;leen de&amp;nbsp;modo que&amp;nbsp;pueden aparentar en&amp;nbsp;las reuniones de&amp;nbsp;jefes que&amp;nbsp;saben de&amp;nbsp;qué va&amp;nbsp;la historia. Y&amp;nbsp;así sucesivamente.&lt;/p>&lt;br />&lt;a name="p2501-18">&lt;/a>&lt;p class="auto" id="p2501-18">
Cuando no&amp;nbsp;tienes una&amp;nbsp;especificación, toda esta comunicación sigue ocurriendo, porque tiene que&amp;nbsp;haberla, pero es&amp;nbsp;ad hoc. Los&amp;nbsp;de&amp;nbsp;Calidad juguetean un&amp;nbsp;poco con&amp;nbsp;el&amp;nbsp;programa, y, cuando algo les&amp;nbsp;parece extraño, van&amp;nbsp;e&amp;nbsp;interrumpen a&amp;nbsp;los programadores una&amp;nbsp;vez más&amp;nbsp;para preguntarles otra estupidez sobre cómo se&amp;nbsp;supone que&amp;nbsp;funciona la&amp;nbsp;cosa. Además del&amp;nbsp;hecho de&amp;nbsp;que esto arruina la&amp;nbsp;productividad de&amp;nbsp;los programadores, los&amp;nbsp;programadores tienden a&amp;nbsp;dar la&amp;nbsp;respuesta que&amp;nbsp;se&amp;nbsp;corresponde con&amp;nbsp;lo&amp;nbsp;que escribieron en&amp;nbsp;el código, en&amp;nbsp;lugar de&amp;nbsp;la &amp;#147;respuesta correcta&amp;#148;. Así&amp;nbsp;que los&amp;nbsp;de&amp;nbsp;Calidad están en&amp;nbsp;realidad probando el&amp;nbsp;programa contra el&amp;nbsp;programa en&amp;nbsp;lugar de&amp;nbsp;probar el&amp;nbsp;programa contra el&amp;nbsp;diseño, lo&amp;nbsp;cual sería, ejem, un&amp;nbsp;poco más&amp;nbsp;útil.&lt;/p>&lt;br />&lt;a name="p2501-19">&lt;/a>&lt;p class="auto" id="p2501-19">
Cuando no&amp;nbsp;dispones de&amp;nbsp;una especificación, lo&amp;nbsp;que ocurre con&amp;nbsp;los pobres redactores técnicos es&amp;nbsp;lo más&amp;nbsp;divertido (tristemente hablando). Normalmente, los&amp;nbsp;redactores técnicos no&amp;nbsp;tienen tanta influencia política como para poder interrumpir a&amp;nbsp;los programadores. En&amp;nbsp;muchas compañías, si&amp;nbsp;los redactores técnicos caen en&amp;nbsp;el hábito de&amp;nbsp;interrumpir a&amp;nbsp;los programadores para preguntarles cómo se&amp;nbsp;supone que&amp;nbsp;funciona algo, los&amp;nbsp;programadores van&amp;nbsp;a&amp;nbsp;sus jefes y&amp;nbsp;les lloran sobre cómo son&amp;nbsp;incapaces de&amp;nbsp;terminar nada por&amp;nbsp;culpa de&amp;nbsp;estos [calificativo borrado] redactores, y&amp;nbsp;si podrían por&amp;nbsp;favor mantenerles lejos, y&amp;nbsp;los jefes, tratando de&amp;nbsp;mejorar la&amp;nbsp;productividad, prohíben a&amp;nbsp;los redactores técnicos desperdiciar ni&amp;nbsp;un segundo más&amp;nbsp;del precioso tiempo de&amp;nbsp;sus programadores. Es&amp;nbsp;fácil saber de&amp;nbsp;qué compañías se&amp;nbsp;trata, pues los&amp;nbsp;ficheros de&amp;nbsp;ayuda y&amp;nbsp;los manuales no&amp;nbsp;te dan&amp;nbsp;ninguna información que&amp;nbsp;no&amp;nbsp;puedas deducir de&amp;nbsp;la pantalla. Cuando ves&amp;nbsp;un&amp;nbsp;mensaje en&amp;nbsp;la pantalla que&amp;nbsp;dice:&lt;/p>&lt;br />
&lt;ul>&lt;li>&lt;ul>&lt;li> ¿Desea activar el&amp;nbsp;soporte &lt;span class="nobr">LRF-1914&lt;/span>?&lt;/li>&lt;/ul>&lt;/li>&lt;/ul>
&lt;br />&lt;a name="p2501-20">&lt;/a>&lt;p class="auto" id="p2501-20">
... y&amp;nbsp;haces click en&amp;nbsp;&amp;#147;Ayuda&amp;#148;, aparece un&amp;nbsp;tema de&amp;nbsp;ayuda tragicómico que&amp;nbsp;dice algo como&lt;/p>&lt;br />
&lt;ul>&lt;li>&lt;ul>&lt;li> Le&amp;nbsp;permite elegir entre tener soporte &lt;span class="nobr">LRF-1914&lt;/span> (por defecto) o&amp;nbsp;no tener soporte &lt;span class="nobr">LRF-1914&lt;/span>. Si&amp;nbsp;desea soporte &lt;span class="nobr">LRF-1914&lt;/span>, elija &amp;laquo;Sí&amp;raquo; o&amp;nbsp;pulse &amp;#147;S&amp;#148;. Si&amp;nbsp;no desea soporte &lt;span class="nobr">LRF-1914&lt;/span>, elija &amp;#147;No&amp;#148; o&amp;nbsp;pulse &amp;#147;N&amp;#148;.&lt;/li>&lt;/ul>&lt;/li>&lt;/ul>
&lt;br />&lt;a name="p2501-21">&lt;/a>&lt;p class="auto" id="p2501-21">
Ejem, gracias. Aquí está bastante claro que&amp;nbsp;el&amp;nbsp;redactor técnico estaba tratando de&amp;nbsp;ocultar el&amp;nbsp;hecho de&amp;nbsp;que no&amp;nbsp;sabían qué&amp;nbsp;es&amp;nbsp;el soporte &lt;span class="nobr">LRF-1914&lt;/span>. No&amp;nbsp;pudieron preguntar al&amp;nbsp;programador, porque (a) les&amp;nbsp;daba vergüenza, o&amp;nbsp;(b) el&amp;nbsp;programador está en&amp;nbsp;Hyderabad y&amp;nbsp;ellos en&amp;nbsp;Londres, o&amp;nbsp;(c) la&amp;nbsp;dirección les&amp;nbsp;ha&amp;nbsp;prohibido interrumpir al&amp;nbsp;programador, o&amp;nbsp;cualquiera de&amp;nbsp;otras patologías corporativas demasiado numerosas para mencionar aquí, pero el&amp;nbsp;problema fundamental es&amp;nbsp;que no&amp;nbsp;había especificación.&lt;/p>&lt;br />&lt;a name="p2501-22">&lt;/a>&lt;p class="auto" id="p2501-22">
La&amp;nbsp;razón principal número tres para tener una&amp;nbsp;especificación es&amp;nbsp;que, sin&amp;nbsp;una especificación detallada, es&amp;nbsp;imposible hacer una&amp;nbsp;planificación temporal. No&amp;nbsp;tener un&amp;nbsp;plan de&amp;nbsp;tiempos está bien si&amp;nbsp;se trata de&amp;nbsp;tu tesis y&amp;nbsp;esperas dedicarte a&amp;nbsp;ella durante 14 años, o&amp;nbsp;si eres un&amp;nbsp;programador trabajando en&amp;nbsp;el próximo Duke Nukem y&amp;nbsp;lo distribuiremos cuando estemos listos. Pero, para casi cualquier clase de&amp;nbsp;negocio real, simplemente tienes que&amp;nbsp;saber cuánto tiempo van&amp;nbsp;a&amp;nbsp;llevar las&amp;nbsp;cosas, porque desarrollar un&amp;nbsp;producto cuesta dinero. Tú&amp;nbsp;no comprarías un&amp;nbsp;par de&amp;nbsp;vaqueros sin&amp;nbsp;saber cuál es&amp;nbsp;el precio, así&amp;nbsp;que ¿cómo va&amp;nbsp;a decidir una&amp;nbsp;empresa responsable si&amp;nbsp;desarrolla un&amp;nbsp;producto sin&amp;nbsp;saber cuánto se&amp;nbsp;va a&amp;nbsp;tardar, y&amp;nbsp;por tanto, cuánto costará? Para saber más&amp;nbsp;sobre planificación temporal, lee&amp;nbsp;Planificación Indolora de&amp;nbsp;Proyectos de&amp;nbsp;Software.&lt;/p>&lt;br />&lt;a name="p2501-23">&lt;/a>&lt;p class="auto" id="p2501-23">
Un&amp;nbsp;error tremendamente común es&amp;nbsp;tener una&amp;nbsp;discusión sobre cómo debería diseñarse algo, y&amp;nbsp;no llegar nunca a&amp;nbsp;una conclusión. Brian Valentine, el&amp;nbsp;diseñador jefe de&amp;nbsp;Windows 2000, era&amp;nbsp;famoso por&amp;nbsp;su&amp;nbsp;lema &amp;laquo;Las decisiones, en&amp;nbsp;10 minutos o&amp;nbsp;menos, o&amp;nbsp;la próxima es&amp;nbsp;gratis&amp;raquo;.&lt;/p>&lt;br />&lt;a name="p2501-24">&lt;/a>&lt;p class="auto" id="p2501-24">
En&amp;nbsp;demasiadas organizaciones dedicadas a&amp;nbsp;la programación, cada vez&amp;nbsp;que se&amp;nbsp;discute un&amp;nbsp;diseño, jamás consigue nadie llegar a&amp;nbsp;una decisión, normalmente por&amp;nbsp;razones políticas. Por&amp;nbsp;tanto, los&amp;nbsp;programadores solamente trabajan en&amp;nbsp;lo menos controvertido. Según va&amp;nbsp;pasando el&amp;nbsp;tiempo, todas las&amp;nbsp;decisiones duras se&amp;nbsp;dejan para el&amp;nbsp;final. Estos son&amp;nbsp;los proyectos que&amp;nbsp;más probablemente fracasen. Si&amp;nbsp;estás creando una&amp;nbsp;nueva compañía basada en&amp;nbsp;una tecnología nueva y&amp;nbsp;notas que&amp;nbsp;tu&amp;nbsp;compañía es&amp;nbsp;constitucionalmente incapaz de&amp;nbsp;tomar decisiones, podrías perfectamente cerrarla ahora y&amp;nbsp;devolver el&amp;nbsp;dinero a&amp;nbsp;los inversores, porque nunca distribuirás nada.&lt;/p>&lt;br />&lt;a name="p2501-25">&lt;/a>&lt;p class="auto" id="p2501-25">
Escribir una&amp;nbsp;especificación es&amp;nbsp;un gran modo de&amp;nbsp;fijar todas esas molestas decisiones de&amp;nbsp;diseño, grandes y&amp;nbsp;pequeñas, que&amp;nbsp;quedan disimuladas si&amp;nbsp;no tienes una&amp;nbsp;especificación. Incluso las&amp;nbsp;decisiones de&amp;nbsp;poca entidad pueden quedar fijadas por&amp;nbsp;una especificación. Por&amp;nbsp;ejemplo, si&amp;nbsp;estáis construyendo un&amp;nbsp;sitio web&amp;nbsp;en&amp;nbsp;el que&amp;nbsp;la&amp;nbsp;gente se&amp;nbsp;puede dar&amp;nbsp;de&amp;nbsp;alta, todos podéis estar de&amp;nbsp;acuerdo en&amp;nbsp;que, si&amp;nbsp;un usuario pierde su&amp;nbsp;contraseña, se&amp;nbsp;la enviaréis por&amp;nbsp;&lt;span class="nobr">e-mail&lt;/span>. Magnífico. Pero no&amp;nbsp;es suficiente para escribir el&amp;nbsp;código. Para escribir el&amp;nbsp;código, necesitas saber las&amp;nbsp;palabras precisas que&amp;nbsp;irán en&amp;nbsp;el &lt;span class="nobr">e-mail&lt;/span>. En&amp;nbsp;la mayoría de&amp;nbsp;las empresas, a&amp;nbsp;los programadores no&amp;nbsp;se les&amp;nbsp;confían palabras que&amp;nbsp;un&amp;nbsp;usuario pudiera llegar a&amp;nbsp;ver (y por&amp;nbsp;buenas razones, la&amp;nbsp;mayor parte de&amp;nbsp;las veces). Por&amp;nbsp;tanto, es&amp;nbsp;probable que&amp;nbsp;alguien de&amp;nbsp;marketing o&amp;nbsp;relaciones públicas o&amp;nbsp;que haya estudiado filología sea&amp;nbsp;requerido para que&amp;nbsp;defina el&amp;nbsp;texto preciso del&amp;nbsp;mensaje. &amp;laquo;Estimado Patoso, aquí está la&amp;nbsp;contraseña que&amp;nbsp;olvidó. Trate de&amp;nbsp;ser menos descuidado en&amp;nbsp;el futuro&amp;raquo;. Cuando te&amp;nbsp;fuerzas a&amp;nbsp;escribir una&amp;nbsp;especificación buena y&amp;nbsp;completa (y pronto hablaré mucho más&amp;nbsp;sobre ello), te&amp;nbsp;das cuenta de&amp;nbsp;todas estas cosas y&amp;nbsp;o bien las&amp;nbsp;arreglas o&amp;nbsp;bien las&amp;nbsp;marcas con&amp;nbsp;una buena señal roja.&lt;/p>&lt;br />&lt;a name="p2501-26">&lt;/a>&lt;p class="auto" id="p2501-26">
Bien. Ya&amp;nbsp;estamos en&amp;nbsp;la misma página. Las&amp;nbsp;especificaciones son&amp;nbsp;la&amp;nbsp;maternidad, o&amp;nbsp;la paella de&amp;nbsp;los domingos. Sospecho que&amp;nbsp;la&amp;nbsp;mayoría de&amp;nbsp;la gente lo&amp;nbsp;entiende, y&amp;nbsp;mis sermones, siendo graciosos, no&amp;nbsp;te están enseñando nada nuevo. Así&amp;nbsp;que, ¿por qué&amp;nbsp;la&amp;nbsp;gente no&amp;nbsp;escribe especificaciones? No&amp;nbsp;es para ahorrar tiempo, porque no&amp;nbsp;lo ahorra, y&amp;nbsp;creo que&amp;nbsp;la&amp;nbsp;mayoría de&amp;nbsp;los programadores lo&amp;nbsp;reconoce. (En la&amp;nbsp;mayoría de&amp;nbsp;las organizaciones, las&amp;nbsp;únicas &amp;#147;especificaciones&amp;#148; que&amp;nbsp;existen son&amp;nbsp;cortísimas, una&amp;nbsp;página de&amp;nbsp;texto que&amp;nbsp;un&amp;nbsp;programador escribió en&amp;nbsp;el Bloc de&amp;nbsp;Notas después de&amp;nbsp;escribir el&amp;nbsp;código y&amp;nbsp;después de&amp;nbsp;explicar la&amp;nbsp;maldita función a&amp;nbsp;la persona número 300).&lt;/p>&lt;br />&lt;a name="p2501-27">&lt;/a>&lt;p class="auto" id="p2501-27">
Creo que&amp;nbsp;la&amp;nbsp;razón es&amp;nbsp;porque a&amp;nbsp;mucha gente no&amp;nbsp;le gusta escribir. Mirar una&amp;nbsp;pantalla en&amp;nbsp;blanco es&amp;nbsp;algo horriblemente frustrante. Personalmente, superé mi&amp;nbsp;miedo a&amp;nbsp;escribir apuntándome a&amp;nbsp;una asignatura en&amp;nbsp;la universidad en&amp;nbsp;la que&amp;nbsp;había que&amp;nbsp;presentar un&amp;nbsp;ensayo de&amp;nbsp;3 a&amp;nbsp;5 páginas una&amp;nbsp;vez por&amp;nbsp;semana. La&amp;nbsp;escritura es&amp;nbsp;un músculo. Cuanto más&amp;nbsp;escribes, más&amp;nbsp;eres capaz de&amp;nbsp;escribir. Si&amp;nbsp;necesitas escribir especificaciones y&amp;nbsp;no eres capaz, empieza un&amp;nbsp;diario, crea un&amp;nbsp;weblog, apúntate a&amp;nbsp;una clase de&amp;nbsp;escritura creativa, o&amp;nbsp;simplemente escribe una&amp;nbsp;bonita carta a&amp;nbsp;cada uno&amp;nbsp;de&amp;nbsp;los parientes y&amp;nbsp;compañeros de&amp;nbsp;habitación que&amp;nbsp;dejaste escapar en&amp;nbsp;los últimos 4 años. Cualquier cosa que&amp;nbsp;tenga que&amp;nbsp;ver con&amp;nbsp;colocar palabras sobre papel mejorará tu&amp;nbsp;habilidad de&amp;nbsp;escritura de&amp;nbsp;especificaciones. Si&amp;nbsp;eres un&amp;nbsp;jefe de&amp;nbsp;desarrollo de&amp;nbsp;software y&amp;nbsp;la gente que&amp;nbsp;se&amp;nbsp;supone debería estar escribiendo especificaciones no&amp;nbsp;lo hace, envíalos a&amp;nbsp;uno de&amp;nbsp;esos seminarios de&amp;nbsp;escritura creativa de&amp;nbsp;dos semanas en&amp;nbsp;la montaña.&lt;/p>&lt;br />&lt;a name="p2501-28">&lt;/a>&lt;p class="auto" id="p2501-28">
Si&amp;nbsp;nunca has&amp;nbsp;trabajado en&amp;nbsp;una compañía que&amp;nbsp;haga especificaciones funcionales, puede que&amp;nbsp;nunca hayas visto una. En&amp;nbsp;la próxima parte de&amp;nbsp;esta serie, te&amp;nbsp;mostraré una&amp;nbsp;breve especificación de&amp;nbsp;ejemplo para que&amp;nbsp;lo&amp;nbsp;compruebes, y&amp;nbsp;hablaremos de&amp;nbsp;lo que&amp;nbsp;una buena especificación necesita tener.&lt;/p>&lt;a name="h2501-3">&lt;/a>&lt;h3>Parte 2: ¿Qué es&amp;nbsp;una especificación?&lt;/h3>
&lt;br />&lt;a name="p2501-29">&lt;/a>&lt;p class="auto" id="p2501-29">
&lt;a href="http://spanish.joelonsoftware.com/PainlessSpecs/2.html" target="_blank" title="Vinculo externo
(en nueva ventana)" class="outerlink">&lt;img src="http://wiki.us.es/juanan/themes/default/icons/web.gif" alt="" border="0" />http://spanish.joelonsoftware.com/PainlessSpecs/2.html&lt;/a>&lt;br />
Por&amp;nbsp;Joel Spolsky&lt;br />
Traducido por&amp;nbsp;Miguel Cardo&lt;br />
Editado por&amp;nbsp;Domingo Piña Maza&lt;br />
3 de&amp;nbsp;octubre, 2000&lt;/p>&lt;br />&lt;a name="p2501-30">&lt;/a>&lt;p class="auto" id="p2501-30">
(¿Has leído ya&amp;nbsp;la primera parte? Si&amp;nbsp;no, está aquí.)&lt;/p>&lt;br />&lt;a name="p2501-31">&lt;/a>&lt;p class="auto" id="p2501-31">
Esta serie de&amp;nbsp;artículos trata sobre especificaciones funcionales, no&amp;nbsp;técnicas. Hay&amp;nbsp;gente que&amp;nbsp;las confunde. No&amp;nbsp;sé si&amp;nbsp;hay una&amp;nbsp;terminología estándar, pero esto es&amp;nbsp;lo que&amp;nbsp;yo&amp;nbsp;quiero decir cuando uso&amp;nbsp;estos términos:&lt;/p>&lt;br />
&lt;div class="indent"> 1. Una&amp;nbsp;especificación funcional describe cómo funcionará un&amp;nbsp;producto completamente desde la&amp;nbsp;perspectiva del&amp;nbsp;usuario. No&amp;nbsp;le importa cómo se&amp;nbsp;implemente la&amp;nbsp;cosa. Habla de&amp;nbsp;funciones. Especifica pantallas, menús, diálogos, etcétera.&lt;br />
 2. Una&amp;nbsp;especificación técnica describe la&amp;nbsp;implementación interna del&amp;nbsp;programa. Habla de&amp;nbsp;estructuras de&amp;nbsp;datos, modelos de&amp;nbsp;bases de&amp;nbsp;datos relacionales, elección de&amp;nbsp;lenguajes y&amp;nbsp;herramientas de&amp;nbsp;programación, algoritmos, etc.&lt;/div>
&lt;br />&lt;a name="p2501-32">&lt;/a>&lt;p class="auto" id="p2501-32">
Cuando uno&amp;nbsp;diseña un&amp;nbsp;producto, por&amp;nbsp;dentro y&amp;nbsp;por fuera, lo&amp;nbsp;más importante es&amp;nbsp;fijar la&amp;nbsp;percepción que&amp;nbsp;tenga el&amp;nbsp;usuario. Cuáles son&amp;nbsp;las pantallas, cómo funcionan, qué&amp;nbsp;hacen. Más&amp;nbsp;tarde, te&amp;nbsp;preocupas de&amp;nbsp;cómo llegar de&amp;nbsp;un sitio al&amp;nbsp;otro. No&amp;nbsp;sirve de&amp;nbsp;nada discutir sobre qué&amp;nbsp;lenguaje de&amp;nbsp;programación usar antes de&amp;nbsp;haber decidido qué&amp;nbsp;es&amp;nbsp;lo que&amp;nbsp;va&amp;nbsp;a hacer tu&amp;nbsp;producto. En&amp;nbsp;esta serie de&amp;nbsp;artículos, sólo hablo de&amp;nbsp;especificaciones funcionales.&lt;/p>&lt;br />&lt;a name="p2501-33">&lt;/a>&lt;p class="auto" id="p2501-33">
He&amp;nbsp;escrito una&amp;nbsp;pequeña especificación de&amp;nbsp;ejemplo que&amp;nbsp;debería darte una&amp;nbsp;idea de&amp;nbsp;la aspecto que&amp;nbsp;tiene una&amp;nbsp;buena especificación funcional. Antes de&amp;nbsp;seguir, por&amp;nbsp;favor lee&amp;nbsp;la&amp;nbsp;especificación de&amp;nbsp;ejemplo.&lt;/p>&lt;br />&lt;a name="p2501-34">&lt;/a>&lt;p class="auto" id="p2501-34">
¿La has&amp;nbsp;leído?&lt;/p>&lt;br />&lt;a name="p2501-35">&lt;/a>&lt;p class="auto" id="p2501-35">
No, no&amp;nbsp;la has&amp;nbsp;leído. Ve&amp;nbsp;a leerla ahora y&amp;nbsp;vuelve cuando lo&amp;nbsp;hayas hecho, para que&amp;nbsp;podamos hablar más&amp;nbsp;de&amp;nbsp;lo que&amp;nbsp;una buena especificación debe y&amp;nbsp;no debe tener. Estaré aquí esperándote. Gracias.&lt;/p>&lt;br />&lt;a name="p2501-36">&lt;/a>&lt;p class="auto" id="p2501-36">
(esperando pacientemente...)&lt;/p>&lt;br />&lt;a name="p2501-37">&lt;/a>&lt;p class="auto" id="p2501-37">
Ah, bien. Ya&amp;nbsp;estás de&amp;nbsp;vuelta.&lt;/p>&lt;br />&lt;a name="p2501-38">&lt;/a>&lt;p class="auto" id="p2501-38">
He&amp;nbsp;aquí algunas de&amp;nbsp;las cosas que&amp;nbsp;pongo en&amp;nbsp;toda especificación.&lt;/p>&lt;br />&lt;a name="p2501-39">&lt;/a>&lt;p class="auto" id="p2501-39">
Una&amp;nbsp;nota de&amp;nbsp;aviso. Pura autodefensa. Si&amp;nbsp;pones un&amp;nbsp;párrafo que&amp;nbsp;diga algo como &amp;laquo;Esta especificación no&amp;nbsp;está terminada&amp;raquo;, la&amp;nbsp;gente no&amp;nbsp;invadirá tu&amp;nbsp;oficina para arrancarte la&amp;nbsp;cabeza de&amp;nbsp;un mordisco. Según pase el&amp;nbsp;tiempo, cuando la&amp;nbsp;especificación vaya estando terminada, puedes cambiarla a&amp;nbsp;&amp;laquo;esta especificación está terminada, según mi&amp;nbsp;mejor ciencia y&amp;nbsp;conciencia, pero, si&amp;nbsp;he olvidado algo, indícamelo, por&amp;nbsp;favor&amp;raquo;. Lo&amp;nbsp;cual me&amp;nbsp;recuerda que&amp;nbsp;toda especificación necesita:&lt;/p>&lt;br />&lt;a name="p2501-40">&lt;/a>&lt;p class="auto" id="p2501-40">
Un&amp;nbsp;autor. Algunas empresas opinan que&amp;nbsp;la&amp;nbsp;especificación debería ser&amp;nbsp;escrita por&amp;nbsp;un&amp;nbsp;equipo. Si&amp;nbsp;has probado alguna vez&amp;nbsp;a&amp;nbsp;escribir en&amp;nbsp;grupo, sabrás que&amp;nbsp;no&amp;nbsp;hay peor tortura. Deja la&amp;nbsp;escritura en&amp;nbsp;grupo a&amp;nbsp;las firmas de&amp;nbsp;consultoría de&amp;nbsp;dirección, con&amp;nbsp;sus ejércitos de&amp;nbsp;diplomados por&amp;nbsp;Harvard recién salidos del&amp;nbsp;horno, quienes necesitan hacer montañas de&amp;nbsp;trabajo para poder justificar sus&amp;nbsp;enormes tarifas. Tus&amp;nbsp;especificaciones deberían ser&amp;nbsp;propiedad de, y&amp;nbsp;escritas por, una&amp;nbsp;persona. Si&amp;nbsp;tienes un&amp;nbsp;producto demasiado grande, divídelo en&amp;nbsp;áreas y&amp;nbsp;entrega cada área a&amp;nbsp;una persona diferente, para que&amp;nbsp;lo&amp;nbsp;especifiquen por&amp;nbsp;separado. Otras compañías opinan que&amp;nbsp;es&amp;nbsp;egoísta o&amp;nbsp;mal &amp;#147;trabajo en&amp;nbsp;equipo&amp;#148; el&amp;nbsp;que una&amp;nbsp;persona se&amp;nbsp;&amp;laquo;apropie del&amp;nbsp;mérito&amp;#148; de&amp;nbsp;una especificación por&amp;nbsp;poner su&amp;nbsp;nombre en&amp;nbsp;ella. Tonterías. La&amp;nbsp;gente debería tener la&amp;nbsp;responsabilidad y&amp;nbsp;la  propiedad de&amp;nbsp;las cosas que&amp;nbsp;especifica. Si&amp;nbsp;algo está mal&amp;nbsp;en&amp;nbsp;la especificación, debería haberse nombrado un&amp;nbsp;dueño de&amp;nbsp;la especificación, responsable de&amp;nbsp;arreglarlo.&lt;/p>&lt;br />&lt;a name="p2501-41">&lt;/a>&lt;p class="auto" id="p2501-41">
Escenarios. Cuando estás diseñando un&amp;nbsp;producto, necesitas tener en&amp;nbsp;mente algunos escenarios reales que&amp;nbsp;representen cómo lo&amp;nbsp;va a&amp;nbsp;usar la&amp;nbsp;gente. De&amp;nbsp;otra manera acabarás diseñando un&amp;nbsp;producto que&amp;nbsp;no&amp;nbsp;se corresponde con&amp;nbsp;ningún uso&amp;nbsp;real (como el&amp;nbsp;Cue?Cat). Escoge los&amp;nbsp;grupos de&amp;nbsp;audiencia de&amp;nbsp;tu producto e&amp;nbsp;imagina un&amp;nbsp;usuario ficticio, totalmente imaginario pero a&amp;nbsp;la vez&amp;nbsp;totalmente estereotipo de&amp;nbsp;cada grupo, quien utiliza el&amp;nbsp;producto de&amp;nbsp;una forma totalmente típica. El&amp;nbsp;Capítulo 9 de&amp;nbsp;mi libro de&amp;nbsp;diseño de&amp;nbsp;Interfaces de&amp;nbsp;Usuario (disponible gratis online) habla sobre la&amp;nbsp;creación de&amp;nbsp;usuarios ficticios y&amp;nbsp;escenarios. Que&amp;nbsp;son el&amp;nbsp;lugar donde los&amp;nbsp;colocas. Cuanto más&amp;nbsp;vívido y&amp;nbsp;realista sea&amp;nbsp;el&amp;nbsp;escenario, mejor trabajo harás diseñando un&amp;nbsp;producto para tus&amp;nbsp;usuarios reales e&amp;nbsp;imaginarios, por&amp;nbsp;lo&amp;nbsp;que tiendo a&amp;nbsp;poner muchos detalles inventados.&lt;/p>&lt;br />&lt;a name="p2501-42">&lt;/a>&lt;p class="auto" id="p2501-42">
No&amp;nbsp;objetivos. Mientras se&amp;nbsp;está desarrollando un&amp;nbsp;producto con&amp;nbsp;un&amp;nbsp;equipo, todo el&amp;nbsp;mundo tiende a&amp;nbsp;tener su&amp;nbsp;función favorita (real o&amp;nbsp;imaginaria), sin&amp;nbsp;la&amp;nbsp;cual no&amp;nbsp;pueden vivir. Si&amp;nbsp;las haces todas, te&amp;nbsp;llevará un&amp;nbsp;tiempo infinito y&amp;nbsp;costará demasiado dinero. Tienes que&amp;nbsp;eliminar funciones innecesarias enseguida, y&amp;nbsp;la mejor forma de&amp;nbsp;hacerlo es&amp;nbsp;con una&amp;nbsp;sección de&amp;nbsp;la especificación que&amp;nbsp;se&amp;nbsp;puede llamar &amp;#147;no objetivos&amp;#148;. Cosas que&amp;nbsp;no&amp;nbsp;vamos a&amp;nbsp;hacer. Un&amp;nbsp;&lt;span class="nobr">no-objetivo&lt;/span> puede ser&amp;nbsp;una función que&amp;nbsp;no&amp;nbsp;piensas incluir ("¡nada de&amp;nbsp;interfaz telepático de&amp;nbsp;usuario!&amp;#148;) o&amp;nbsp;algo más&amp;nbsp;general (&amp;laquo;En esta versión no&amp;nbsp;vamos a&amp;nbsp;preocuparnos del&amp;nbsp;rendimiento. El&amp;nbsp;producto puede ser&amp;nbsp;lento, siempre que&amp;nbsp;funcione. Si&amp;nbsp;para la&amp;nbsp;versión 2 tenemos tiempo, optimizaremos los&amp;nbsp;trozos más&amp;nbsp;lentos.&amp;#148;) Es&amp;nbsp;probable que&amp;nbsp;estos &lt;span class="nobr">no-objetivos&lt;/span> causen alguna discusión, pero es&amp;nbsp;importante afrontarla abiertamente lo&amp;nbsp;antes posible. "¡No lo&amp;nbsp;voy a&amp;nbsp;hacer!&amp;#148;, como decía George Bush padre.&lt;/p>&lt;br />&lt;a name="p2501-43">&lt;/a>&lt;p class="auto" id="p2501-43">
Una&amp;nbsp;visión general. Es&amp;nbsp;como el&amp;nbsp;índice de&amp;nbsp;tu especificación. Puede ser&amp;nbsp;un&amp;nbsp;simple diagrama de&amp;nbsp;flujo, o&amp;nbsp;bien una&amp;nbsp;extensa discusión de&amp;nbsp;la arquitectura del&amp;nbsp;producto. Todo el&amp;nbsp;mundo la&amp;nbsp;debe leer para hacerse una&amp;nbsp;idea de&amp;nbsp;conjunto, a&amp;nbsp;partir de&amp;nbsp;ella los&amp;nbsp;detalles tendrán más&amp;nbsp;sentido.&lt;/p>&lt;br />&lt;a name="p2501-44">&lt;/a>&lt;p class="auto" id="p2501-44">
Detalles, detalles, detalles. Finalmente, te&amp;nbsp;metes en&amp;nbsp;los detalles. La&amp;nbsp;mayoría lo&amp;nbsp;leerá por&amp;nbsp;encima hasta que&amp;nbsp;necesiten saber un&amp;nbsp;detalle concreto. Cuando uno&amp;nbsp;está diseñando un&amp;nbsp;servicio de&amp;nbsp;tipo web, una&amp;nbsp;buena forma de&amp;nbsp;hacerlo es&amp;nbsp;dando a&amp;nbsp;todas las&amp;nbsp;posibles pantallas un&amp;nbsp;nombre canónico, y&amp;nbsp;escribiendo un&amp;nbsp;capítulo que&amp;nbsp;describa cada una&amp;nbsp;de&amp;nbsp;ellas con&amp;nbsp;un&amp;nbsp;nivel de&amp;nbsp;detalle tan&amp;nbsp;minucioso que&amp;nbsp;nuble el&amp;nbsp;entendimiento.&lt;/p>&lt;br />&lt;a name="p2501-45">&lt;/a>&lt;p class="auto" id="p2501-45">
Los&amp;nbsp;detalles son&amp;nbsp;lo&amp;nbsp;más importante en&amp;nbsp;una especificación funcional.  Te&amp;nbsp;habrás dado cuenta de&amp;nbsp;cómo, en&amp;nbsp;la especificación de&amp;nbsp;ejemplo, entro en&amp;nbsp;un nivel de&amp;nbsp;detalle exagerado para todos los&amp;nbsp;casos de&amp;nbsp;error de&amp;nbsp;la página de&amp;nbsp;login. ¿Qué pasa si&amp;nbsp;la dirección de&amp;nbsp;&lt;span class="nobr">e-mail&lt;/span> no&amp;nbsp;es válida? ¿Qué pasa si&amp;nbsp;la constraseña está mal? Todos estos casos se&amp;nbsp;corresponden con&amp;nbsp;código real que&amp;nbsp;va&amp;nbsp;a ser&amp;nbsp;escrito, pero, lo&amp;nbsp;que es&amp;nbsp;más importante, estos casos corresponden a&amp;nbsp;decisiones que&amp;nbsp;alguien va&amp;nbsp;a tener que&amp;nbsp;tomar. Alguien tiene que&amp;nbsp;decidir cuál ha&amp;nbsp;de ser&amp;nbsp;la&amp;nbsp;política a&amp;nbsp;seguir en&amp;nbsp;el caso de&amp;nbsp;una contraseña olvidada. Si&amp;nbsp;no lo&amp;nbsp;decides, no&amp;nbsp;puedes escribir el&amp;nbsp;código. La&amp;nbsp;especificación necesita documentar la&amp;nbsp;decisión.&lt;/p>&lt;br />&lt;a name="p2501-46">&lt;/a>&lt;p class="auto" id="p2501-46">
Asuntos pendientes. No&amp;nbsp;pasa nada por&amp;nbsp;dejar asuntos pendientes en&amp;nbsp;la primera versión de&amp;nbsp;una especificación. Cuando yo&amp;nbsp;escribo un&amp;nbsp;primer borrador, siempre me&amp;nbsp;quedan muchos asuntos pendientes, pero los&amp;nbsp;señalo (usando un&amp;nbsp;estilo especial para poder buscarlos luego) y, si&amp;nbsp;viene a&amp;nbsp;cuento, presento las&amp;nbsp;alternativas. Cuando llega el&amp;nbsp;momento en&amp;nbsp;que los&amp;nbsp;programadores empiezan su&amp;nbsp;trabajo, todos ellos deben ser&amp;nbsp;liquidados. (Alguien podría pensar que&amp;nbsp;basta con&amp;nbsp;dejar que&amp;nbsp;los programadores empiecen con&amp;nbsp;lo&amp;nbsp;fácil, y&amp;nbsp;resolver los&amp;nbsp;asuntos pendientes más&amp;nbsp;tarde. Mala idea. Ya&amp;nbsp;tendrás bastantes problemas resolviendo los&amp;nbsp;nuevos asuntos que&amp;nbsp;surjan cuando los&amp;nbsp;programadores intenten implementar el&amp;nbsp;código, sin&amp;nbsp;que estén todavía por&amp;nbsp;ahí los&amp;nbsp;viejos asuntos pendientes que&amp;nbsp;ya&amp;nbsp;conocías por&amp;nbsp;adelantando y&amp;nbsp;que pudiste haber resuelto entonces. Además, la&amp;nbsp;forma en&amp;nbsp;que resuelvas cualquier cosa no&amp;nbsp;trivial puede tener un&amp;nbsp;impacto considerable en&amp;nbsp;cómo se&amp;nbsp;debe escribir el&amp;nbsp;código.)&lt;/p>&lt;br />&lt;a name="p2501-47">&lt;/a>&lt;p class="auto" id="p2501-47">
Notas al&amp;nbsp;margen. Mientras estés escribiendo una&amp;nbsp;especificación, recuerda tus&amp;nbsp;distintas audiencias: programadores, pruebas, marketing, redactores técnicos, etc. Según escribes la&amp;nbsp;especificación, se&amp;nbsp;te pueden ocurrir ideas útiles que&amp;nbsp;pueden ser&amp;nbsp;de&amp;nbsp;utilidad a&amp;nbsp;uno solo de&amp;nbsp;estos grupos. Por&amp;nbsp;ejemplo, yo&amp;nbsp;indico ciertos mensajes para el&amp;nbsp;programador, que&amp;nbsp;suelen describir algún detalle de&amp;nbsp;implementación, como &amp;laquo;Notas técnicas&amp;raquo;. Los&amp;nbsp;de&amp;nbsp;marketing las&amp;nbsp;ignoran, pero los&amp;nbsp;programadores las&amp;nbsp;devoran. Mis&amp;nbsp;especificaciones suelen estar repletas hasta el&amp;nbsp;agotamiento de&amp;nbsp;&amp;#147;Notas de&amp;nbsp;prueba&amp;#148;, &amp;#147;Notas de&amp;nbsp;marketing&amp;#148;, y&amp;nbsp;&amp;laquo;Notas de&amp;nbsp;documentación&amp;#148;.&lt;/p>&lt;br />&lt;a name="p2501-48">&lt;/a>&lt;p class="auto" id="p2501-48">
Las&amp;nbsp;especificaciones necesitan estar vivas. Ciertos equipos de&amp;nbsp;programación adoptan una&amp;nbsp;mentalidad &amp;#147;en cascada&amp;#148;: diseñamos todo el&amp;nbsp;programa de&amp;nbsp;una vez, escribimos una&amp;nbsp;especificación, la&amp;nbsp;imprimimos,  la&amp;nbsp;tiramos por&amp;nbsp;encima de&amp;nbsp;la pared a&amp;nbsp;los programadores y&amp;nbsp;nos vamos a&amp;nbsp;casa. Todo lo&amp;nbsp;que tengo que&amp;nbsp;decir es: "¡Ja ja&amp;nbsp;ja ja&amp;nbsp;ja ja&amp;nbsp;ja ja!&amp;#148;&lt;/p>&lt;br />&lt;a name="p2501-49">&lt;/a>&lt;p class="auto" id="p2501-49">
Semejante forma de&amp;nbsp;actuar es&amp;nbsp;la causa de&amp;nbsp;que las&amp;nbsp;especificaciones tengan esa&amp;nbsp;reputación tan&amp;nbsp;mala. Mucha gente me&amp;nbsp;ha dicho, &amp;laquo;las especificaciones son&amp;nbsp;inútiles porque nadie las&amp;nbsp;sigue, siempre están obsoletas, y&amp;nbsp;nunca se&amp;nbsp;corresponden con&amp;nbsp;el&amp;nbsp;producto&amp;raquo;.&lt;/p>&lt;br />&lt;a name="p2501-50">&lt;/a>&lt;p class="auto" id="p2501-50">
Discúlpame, pero a&amp;nbsp;lo mejor tus&amp;nbsp;especificaciones están obsoletas y&amp;nbsp;no se&amp;nbsp;corresponden con&amp;nbsp;el&amp;nbsp;producto. Mis&amp;nbsp;especificaciones se&amp;nbsp;actualizan con&amp;nbsp;frecuencia. Las&amp;nbsp;puestas al&amp;nbsp;día se&amp;nbsp;van haciendo según el&amp;nbsp;producto va&amp;nbsp;siendo desarrollado y&amp;nbsp;se toman nuevas decisiones. La&amp;nbsp;especificación siempre refleja nuestro mejor conocimiento colectivo de&amp;nbsp;cómo funcionará el&amp;nbsp;producto. Solamente se&amp;nbsp;congela la&amp;nbsp;especificación cuando el&amp;nbsp;producto está en&amp;nbsp;estado de&amp;nbsp;&amp;laquo;código completo&amp;raquo; (o sea, cuando toda la&amp;nbsp;funcionalidad está completa, pero todavía queda probarlo y&amp;nbsp;depurarlo).&lt;/p>&lt;br />&lt;a name="p2501-51">&lt;/a>&lt;p class="auto" id="p2501-51">
Para facilitar la&amp;nbsp;vida de&amp;nbsp;la gente, no&amp;nbsp;reedito la&amp;nbsp;especificación a&amp;nbsp;diario. Suelo mantener una&amp;nbsp;versión puesta al&amp;nbsp;día en&amp;nbsp;un servidor, en&amp;nbsp;algún lugar donde el&amp;nbsp;equipo puede usarlo como referencia. En&amp;nbsp;hitos ocasionales del&amp;nbsp;proyecto, imprimo una&amp;nbsp;copia de&amp;nbsp;la especificación con&amp;nbsp;marcas de&amp;nbsp;revisión, para que&amp;nbsp;la&amp;nbsp;gente no&amp;nbsp;tenga que&amp;nbsp;releerla toda entera &amp;mdash; basta con&amp;nbsp;que echen un&amp;nbsp;vistazo a&amp;nbsp;las marcas de&amp;nbsp;revisión para ver&amp;nbsp;qué cambios se&amp;nbsp;han hecho.&lt;/p>&lt;a name="h2501-4">&lt;/a>&lt;h3> Parte 3: Pero... ¿Cómo? &lt;/h3>
&lt;br />&lt;a name="p2501-52">&lt;/a>&lt;p class="auto" id="p2501-52">
&lt;a href="http://spanish.joelonsoftware.com/PainlessSpecs/3.html" target="_blank" title="Vinculo externo
(en nueva ventana)" class="outerlink">&lt;img src="http://wiki.us.es/juanan/themes/default/icons/web.gif" alt="" border="0" />http://spanish.joelonsoftware.com/PainlessSpecs/3.html&lt;/a>&lt;br />
Por&amp;nbsp;Joel Spolsky&lt;br />
Traducido por&amp;nbsp;Miguel Cardo&lt;br />
Editado por&amp;nbsp;Domingo Piña Maza&lt;br />
4 de&amp;nbsp;octubre, 2000&lt;/p>&lt;br />&lt;a name="p2501-53">&lt;/a>&lt;p class="auto" id="p2501-53">
Ahora que&amp;nbsp;has leído todo sobre por&amp;nbsp;qué necesitas una&amp;nbsp;especificación y&amp;nbsp;qué contiene una&amp;nbsp;especificación, hablemos de&amp;nbsp;quién debería escribirlas.&lt;/p>&lt;br />&lt;a name="p2501-54">&lt;/a>&lt;p class="auto" id="p2501-54">
¿Quién escribe especificaciones?&lt;/p>&lt;br />&lt;a name="p2501-55">&lt;/a>&lt;p class="auto" id="p2501-55">
Permíteme contarte aquí un&amp;nbsp;poco de&amp;nbsp;la historia de&amp;nbsp;Microsoft. Cuando Microsoft empezó a&amp;nbsp;crecer seriamente durante los&amp;nbsp;80, allí todos habían leído El&amp;nbsp;Mítico &lt;span class="nobr">Hombre-Mes&lt;/span>, uno&amp;nbsp;de&amp;nbsp;los clásicos de&amp;nbsp;gestión de&amp;nbsp;proyectos software. (Si no&amp;nbsp;lo has&amp;nbsp;leído, te&amp;nbsp;lo recomiendo encarecidamente). El&amp;nbsp;principal argumento del&amp;nbsp;libro es&amp;nbsp;que, si&amp;nbsp;uno añade programadores a&amp;nbsp;un proyecto que&amp;nbsp;lleva retraso, este retraso se&amp;nbsp;hace aún&amp;nbsp;mayor. La&amp;nbsp;causa es&amp;nbsp;que, si&amp;nbsp;uno tiene n&amp;nbsp;programadores en&amp;nbsp;un equipo, el&amp;nbsp;número de&amp;nbsp;canales de&amp;nbsp;comunicación es&amp;nbsp;n(&lt;span class="nobr">n-1&lt;/span>)/2, lo&amp;nbsp;cual crece como O(n2).&lt;/p>&lt;br />&lt;a name="p2501-56">&lt;/a>&lt;p class="auto" id="p2501-56">
Por&amp;nbsp;tanto, los&amp;nbsp;programadores de&amp;nbsp;Microsoft estaban preocupados sobre la&amp;nbsp;forma de&amp;nbsp;escribir programas cada vez&amp;nbsp;más grandes, cuando la&amp;nbsp;sabiduría dominante del&amp;nbsp;momento era&amp;nbsp;que añadir programadores únicamente empeora las&amp;nbsp;cosas.&lt;/p>&lt;br />&lt;a name="p2501-57">&lt;/a>&lt;p class="auto" id="p2501-57">
Charles Simonyi, durante mucho tiempo el&amp;nbsp;&amp;#147;arquitecto jefe&amp;#148; de&amp;nbsp;Microsoft, sugirió el&amp;nbsp;concepto de&amp;nbsp;programadores maestros. La&amp;nbsp;idea consistía fundamentalmente en&amp;nbsp;que un&amp;nbsp;programador maestro sería responsable de&amp;nbsp;escribir todo el&amp;nbsp;código, pero él&amp;nbsp;o ella se&amp;nbsp;apoyarían en&amp;nbsp;un equipo de&amp;nbsp;programadores junior como &amp;laquo;esclavos del&amp;nbsp;código&amp;#148;.  En&amp;nbsp;lugar de&amp;nbsp;preocuparse por&amp;nbsp;depurar cada función, el&amp;nbsp;programador maestro simplemente prototiparía cada función, creando la&amp;nbsp;estructura vacía, y&amp;nbsp;entonces se&amp;nbsp;la lanzaría a&amp;nbsp;uno de&amp;nbsp;los programadores junior para que&amp;nbsp;la&amp;nbsp;implementase. (Por supuesto que&amp;nbsp;Simonyi sería el&amp;nbsp;Maestro de&amp;nbsp;Programadores Maestros.) El&amp;nbsp;término &amp;#147;Programador Maestro&amp;#148; era&amp;nbsp;un&amp;nbsp;poco demasiado medieval, así&amp;nbsp;que Microsoft tomó el&amp;nbsp;de &amp;#147;Program Manager&amp;#148;.&lt;/p>&lt;br />&lt;a name="p2501-58">&lt;/a>&lt;p class="auto" id="p2501-58">
Teóricamente, se&amp;nbsp;suponía que&amp;nbsp;esto resolvería el&amp;nbsp;problema del&amp;nbsp;Mítico &lt;span class="nobr">Hombre-Mes&lt;/span>, porque nadie tiene que&amp;nbsp;hablar con&amp;nbsp;nadie más&amp;nbsp;&amp;mdash; cada uno&amp;nbsp;de&amp;nbsp;los programadores junior sólo habla con&amp;nbsp;su&amp;nbsp;único program manager, y&amp;nbsp;así la&amp;nbsp;comunicación crece como O(n) en&amp;nbsp;lugar de&amp;nbsp;O(n2).&lt;/p>&lt;br />&lt;a name="p2501-59">&lt;/a>&lt;p class="auto" id="p2501-59">
Bien, puede que&amp;nbsp;Simonyi conozca la&amp;nbsp;Notación Húngara, pero no&amp;nbsp;conoce Peopleware. Nadie quiere ser&amp;nbsp;un&amp;nbsp;esclavo del&amp;nbsp;código. El&amp;nbsp;sistema no&amp;nbsp;funcionó en&amp;nbsp;absoluto. Llegó un&amp;nbsp;momento en&amp;nbsp;que Microsoft descubrió que, pese al&amp;nbsp;presunto Mítico &lt;span class="nobr">Hombre-Mes&lt;/span>, uno&amp;nbsp;puede seguir añadiendo gente inteligente a&amp;nbsp;un equipo y&amp;nbsp;obtener un&amp;nbsp;aumento en&amp;nbsp;la producción, aunque sea&amp;nbsp;con valores marginales decrecientes. El&amp;nbsp;equipo de&amp;nbsp;Excel tenía 50 programadores cuando yo&amp;nbsp;estaba allí, y&amp;nbsp;era algo más&amp;nbsp;productivo que&amp;nbsp;lo&amp;nbsp;que hubiera sido un&amp;nbsp;equipo de&amp;nbsp;25 &amp;mdash; pero no&amp;nbsp;dos veces productivo.&lt;/p>&lt;br />&lt;a name="p2501-60">&lt;/a>&lt;p class="auto" id="p2501-60">
La&amp;nbsp;idea de&amp;nbsp;la programación maestro/esclavo fue&amp;nbsp;desacreditada, pero Microsoft todavía tenía por&amp;nbsp;ahí a&amp;nbsp;esa gente, llamados program managers. Un&amp;nbsp;hombre inteligente, llamado Jabe Blumenthal, reinventó prácticamente el&amp;nbsp;puesto de&amp;nbsp;program manager. A&amp;nbsp;partir de&amp;nbsp;aquí, el&amp;nbsp;program manager sería el&amp;nbsp;dueño del&amp;nbsp;diseño y&amp;nbsp;la especificación de&amp;nbsp;los productos.&lt;/p>&lt;br />&lt;a name="p2501-61">&lt;/a>&lt;p class="auto" id="p2501-61">
Desde entonces, en&amp;nbsp;Microsoft los&amp;nbsp;program managers recopilan requisitos, deducen lo&amp;nbsp;que se&amp;nbsp;supone que&amp;nbsp;hace el&amp;nbsp;código, y&amp;nbsp;escriben las&amp;nbsp;especificaciones. Hay&amp;nbsp;normalmente unos 5 programadores por&amp;nbsp;cada program manager; estos programadores son&amp;nbsp;responsables de&amp;nbsp;implementar en&amp;nbsp;código lo&amp;nbsp;que el&amp;nbsp;program manager ha&amp;nbsp;implementado en&amp;nbsp;forma de&amp;nbsp;especificación. Un&amp;nbsp;program manager también necesita coordinar el&amp;nbsp;marketing, la&amp;nbsp;documentación, las&amp;nbsp;pruebas, la&amp;nbsp;adaptación internacional, y&amp;nbsp;todo el&amp;nbsp;resto de&amp;nbsp;molestos detalles en&amp;nbsp;que los&amp;nbsp;programadores no&amp;nbsp;deberían perder el&amp;nbsp;tiempo. Por&amp;nbsp;último, se&amp;nbsp;supone que&amp;nbsp;en&amp;nbsp;Microsoft los&amp;nbsp;program managers tienen en&amp;nbsp;mente la&amp;nbsp;&amp;laquo;visión global&amp;raquo; de&amp;nbsp;la compañía, mientras que&amp;nbsp;los programadores son&amp;nbsp;libres para concentrarse en&amp;nbsp;conseguir que&amp;nbsp;sus trocitos de&amp;nbsp;código sean perfectos.&lt;/p>&lt;br />&lt;a name="p2501-62">&lt;/a>&lt;p class="auto" id="p2501-62">
Los&amp;nbsp;program managers son&amp;nbsp;inapreciables. Si&amp;nbsp;alguna vez&amp;nbsp;te&amp;nbsp;has quejado de&amp;nbsp;que los&amp;nbsp;programadores se&amp;nbsp;ocupan de&amp;nbsp;la elegancia técnica más&amp;nbsp;que del&amp;nbsp;atractivo comercial del&amp;nbsp;producto, necesitas un&amp;nbsp;program manager. Si&amp;nbsp;alguna vez&amp;nbsp;te&amp;nbsp;has quejado de&amp;nbsp;que quienes son&amp;nbsp;capaces de&amp;nbsp;escribir buen código nunca son&amp;nbsp;capaces de&amp;nbsp;escribir buen castellano, entonces necesitas un&amp;nbsp;program manager. Si&amp;nbsp;te has&amp;nbsp;quejado alguna vez&amp;nbsp;de&amp;nbsp;que parece que&amp;nbsp;tu&amp;nbsp;producto se&amp;nbsp;mueve a&amp;nbsp;la deriva, sin&amp;nbsp;una dirección clara, necesitas un&amp;nbsp;program manager.&lt;/p>&lt;br />&lt;a name="p2501-63">&lt;/a>&lt;p class="auto" id="p2501-63">
¿Cómo contratar a&amp;nbsp;un Program Manager?&lt;/p>&lt;br />&lt;a name="p2501-64">&lt;/a>&lt;p class="auto" id="p2501-64">
La&amp;nbsp;mayoría de&amp;nbsp;las empresas ni&amp;nbsp;siquiera tienen el&amp;nbsp;concepto de&amp;nbsp;program manager. Muy&amp;nbsp;mal, creo yo. En&amp;nbsp;mis tiempos, los&amp;nbsp;grupos de&amp;nbsp;Microsoft con&amp;nbsp;program managers fuertes tenían productos de&amp;nbsp;gran éxito: Excel, Windows 95, y&amp;nbsp;Access me&amp;nbsp;vienen a&amp;nbsp;la memoria. Pero otros grupos (como MSN&amp;nbsp;1.0 y&amp;nbsp;Windows NT&amp;nbsp;1.0) los&amp;nbsp;llevaban desarrolladores que&amp;nbsp;normalmente ignoraban a&amp;nbsp;los program managers (quienes de&amp;nbsp;todas formas no&amp;nbsp;eran muy&amp;nbsp;buenos, y&amp;nbsp;probablemente merecían ser&amp;nbsp;ignorados), y&amp;nbsp;sus productos no&amp;nbsp;tuvieron tanto éxito.&lt;/p>&lt;br />&lt;a name="p2501-65">&lt;/a>&lt;p class="auto" id="p2501-65">
He&amp;nbsp;aquí tres cosas a&amp;nbsp;evitar:&lt;/p>&lt;br />&lt;a name="p2501-66">&lt;/a>&lt;p class="auto" id="p2501-66">
1. No&amp;nbsp;asciendas un&amp;nbsp;programador a&amp;nbsp;program manager. Las&amp;nbsp;habilidades para ser&amp;nbsp;un&amp;nbsp;buen program manager (escribir claro, diplomacia, tener en&amp;nbsp;cuenta al&amp;nbsp;mercado, empatía con&amp;nbsp;el&amp;nbsp;usuario, y&amp;nbsp;buen diseño del&amp;nbsp;interfaz de&amp;nbsp;usuario) son&amp;nbsp;muy raras veces las&amp;nbsp;habilidades para ser&amp;nbsp;un&amp;nbsp;buen programador. Seguro que&amp;nbsp;hay gente capaz de&amp;nbsp;ambas cosas, pero escasean. Recompensar a&amp;nbsp;buenos programadores ascendiéndoles a&amp;nbsp;un puesto diferente, uno&amp;nbsp;que implica escribir en&amp;nbsp;español, no&amp;nbsp;en C++, es&amp;nbsp;un caso clásico del&amp;nbsp;Principio de&amp;nbsp;Peter: se&amp;nbsp;tiende a&amp;nbsp;ascender a&amp;nbsp;la gente a&amp;nbsp;su nivel de&amp;nbsp;incompetencia.&lt;/p>&lt;br />&lt;a name="p2501-67">&lt;/a>&lt;p class="auto" id="p2501-67">
2. No&amp;nbsp;dejes que&amp;nbsp;la&amp;nbsp;gente de&amp;nbsp;marketing sean program managers. Sin&amp;nbsp;ánimo de&amp;nbsp;ofender, creo que&amp;nbsp;mis lectores estarán de&amp;nbsp;acuerdo en&amp;nbsp;que los&amp;nbsp;buenos empleados de&amp;nbsp;marketing pocas veces tienen una&amp;nbsp;idea de&amp;nbsp;los aspectos tecnológicos lo&amp;nbsp;bastante buena como para diseñar productos.&lt;/p>&lt;br />&lt;a name="p2501-68">&lt;/a>&lt;p class="auto" id="p2501-68">
Fundamentalmente, la&amp;nbsp;gestión de&amp;nbsp;programas es&amp;nbsp;una carrera profesional independiente. Todos los&amp;nbsp;program managers tienen que&amp;nbsp;ser muy&amp;nbsp;técnicos, pero no&amp;nbsp;tienen por&amp;nbsp;qué ser&amp;nbsp;buenos programadores. Los&amp;nbsp;program managers estudian la&amp;nbsp;interacción con&amp;nbsp;el&amp;nbsp;usuario, se&amp;nbsp;reúnen con&amp;nbsp;los clientes, y&amp;nbsp;escriben especificaciones. Necesitan llevarse bien con&amp;nbsp;una amplia variedad de&amp;nbsp;gente &amp;mdash; desde clientes &amp;#147;retrasados&amp;#148;, pasando por&amp;nbsp;irritantes programadores ermitaños que&amp;nbsp;vienen al&amp;nbsp;trabajo vestidos de&amp;nbsp;Star Trek, hasta pomposos tipos de&amp;nbsp;ventas en&amp;nbsp;trajes de&amp;nbsp;2000 dólares. En&amp;nbsp;cierto sentido, los&amp;nbsp;program managers son&amp;nbsp;el&amp;nbsp;pegamento que&amp;nbsp;une los&amp;nbsp;equipos de&amp;nbsp;software. El&amp;nbsp;carisma es&amp;nbsp;crucial.&lt;/p>&lt;br />&lt;a name="p2501-69">&lt;/a>&lt;p class="auto" id="p2501-69">
3. No&amp;nbsp;obligues a&amp;nbsp;que los&amp;nbsp;programadores estén por&amp;nbsp;debajo del&amp;nbsp;program manager. Se&amp;nbsp;trata de&amp;nbsp;un error sutil. Como program manager en&amp;nbsp;Microsoft, diseñé la&amp;nbsp;estrategia de&amp;nbsp;Visual Basic (VBA) para Excel y&amp;nbsp;especifiqué totalmente, hasta el&amp;nbsp;detalle más&amp;nbsp;nimio, cómo debería implementarse VBA&amp;nbsp;en&amp;nbsp;Excel. Mi&amp;nbsp;especificación se&amp;nbsp;alargó hasta unas 500 páginas. En&amp;nbsp;el punto álgido del&amp;nbsp;desarrollo de&amp;nbsp;Excel 5.0, estimé que&amp;nbsp;cada mañana 250 personas venían a&amp;nbsp;trabajar, y&amp;nbsp;fundamentalmente lo&amp;nbsp;hacían partiendo de&amp;nbsp;esa enorme especificación que&amp;nbsp;yo&amp;nbsp;había escrito. No&amp;nbsp;tenía ni&amp;nbsp;idea de&amp;nbsp;quiénes eran todos esos, pero había sobre una&amp;nbsp;docena de&amp;nbsp;personas en&amp;nbsp;el equipo de&amp;nbsp;Visual Basic solamente escribiendo documentación para ese&amp;nbsp;chisme (por no&amp;nbsp;mencionar el&amp;nbsp;equipo escribiendo documentación por&amp;nbsp;la&amp;nbsp;parte de&amp;nbsp;Excel, o&amp;nbsp;la persona a&amp;nbsp;tiempo completo responsable de&amp;nbsp;los hiperenlaces en&amp;nbsp;el fichero de&amp;nbsp;ayuda). Lo&amp;nbsp;extraño es&amp;nbsp;que yo&amp;nbsp;estaba &amp;#147;en la&amp;nbsp;base&amp;#148; del&amp;nbsp;árbol jerárquico. Eso&amp;nbsp;es. Yo&amp;nbsp;no era&amp;nbsp;el&amp;nbsp;jefe de&amp;nbsp;nadie. Si&amp;nbsp;yo quería que&amp;nbsp;la&amp;nbsp;gente hiciera algo, tenía que&amp;nbsp;convencerles de&amp;nbsp;que era&amp;nbsp;lo&amp;nbsp;apropiado. Cuando Ben&amp;nbsp;Waldman, el&amp;nbsp;desarrollador jefe, no&amp;nbsp;quería hacer algo que&amp;nbsp;yo&amp;nbsp;había especificado, simplemente no&amp;nbsp;lo hacía. Cuando los&amp;nbsp;de&amp;nbsp;pruebas se&amp;nbsp;quejaban de&amp;nbsp;que algo que&amp;nbsp;yo&amp;nbsp;había especificado era&amp;nbsp;imposible de&amp;nbsp;probar por&amp;nbsp;completo, yo&amp;nbsp;tenía que&amp;nbsp;simplificarlo. Si&amp;nbsp;alguna de&amp;nbsp;estas personas hubiera estado por&amp;nbsp;debajo de&amp;nbsp;mí, el&amp;nbsp;producto no&amp;nbsp;habría sido tan&amp;nbsp;bueno. Algunos de&amp;nbsp;ellos habrían pensado que&amp;nbsp;no&amp;nbsp;está bien contradecir a&amp;nbsp;un superior. Otras veces, simplemente me&amp;nbsp;habría impuesto y&amp;nbsp;les habría ordenado hacerlo a&amp;nbsp;mi manera, por&amp;nbsp;presunción o&amp;nbsp;cortedad de&amp;nbsp;miras. Tal&amp;nbsp;como estaba organizado, no&amp;nbsp;me quedaba más&amp;nbsp;remedio que&amp;nbsp;formar un&amp;nbsp;consenso. Esta manera de&amp;nbsp;tomar decisiones fue&amp;nbsp;la&amp;nbsp;mejor forma de&amp;nbsp;conseguir que&amp;nbsp;se&amp;nbsp;hiciera lo&amp;nbsp;correcto.&lt;/p>&lt;br />&lt;a name="p2501-70">&lt;/a>&lt;p class="auto" id="p2501-70">
El&amp;nbsp;artículo final de&amp;nbsp;mi serie sobre especificaciones trata de&amp;nbsp;cómo escribir buenas especificaciones que&amp;nbsp;a&amp;nbsp;la gente les&amp;nbsp;apetezca leer.&lt;/p>&lt;a name="h2501-5">&lt;/a>&lt;h3> Parte 4: Consejos &lt;/h3>
&lt;br />&lt;a name="p2501-71">&lt;/a>&lt;p class="auto" id="p2501-71">
&lt;a href="http://spanish.joelonsoftware.com/PainlessSpecs/4.html" target="_blank" title="Vinculo externo
(en nueva ventana)" class="outerlink">&lt;img src="http://wiki.us.es/juanan/themes/default/icons/web.gif" alt="" border="0" />http://spanish.joelonsoftware.com/PainlessSpecs/4.html&lt;/a>&lt;br />
Por&amp;nbsp;Joel Spolsky&lt;br />
Traducido por&amp;nbsp;Miguel Cardo&lt;br />
Editado por&amp;nbsp;Domingo Piña Maza&lt;br />
15 de&amp;nbsp;octubre, 2000&lt;/p>&lt;br />&lt;a name="p2501-72">&lt;/a>&lt;p class="auto" id="p2501-72">
Bueno, hemos hablado de&amp;nbsp;por qué&amp;nbsp;necesitas una&amp;nbsp;especificación, qué&amp;nbsp;contiene una&amp;nbsp;especificación, y&amp;nbsp;quién debería escribirlas. En&amp;nbsp;esta cuarta y&amp;nbsp;última parte de&amp;nbsp;la serie, compartiré algunos de&amp;nbsp;mis consejos para escribir buenas especificaciones.&lt;/p>&lt;br />&lt;a name="p2501-73">&lt;/a>&lt;p class="auto" id="p2501-73">
La&amp;nbsp;principal queja que&amp;nbsp;uno puede oír&amp;nbsp;de&amp;nbsp;parte de&amp;nbsp;los equipos que&amp;nbsp;sí&amp;nbsp;escriben especificaciones es&amp;nbsp;que &amp;#147;nadie las&amp;nbsp;lee&amp;#148;. Cuando nadie lee&amp;nbsp;las especificaciones, los&amp;nbsp;que las&amp;nbsp;escriben tienden a&amp;nbsp;hacerse un&amp;nbsp;poquito cínicos. Como la&amp;nbsp;vieja tira de&amp;nbsp;Dilbert en&amp;nbsp;la que&amp;nbsp;los ingenieros usan pilas de&amp;nbsp;especificaciones de&amp;nbsp;4 pulgadas de&amp;nbsp;grosor para construir extensiones a&amp;nbsp;sus cubículos. En&amp;nbsp;la típica empresa grande y&amp;nbsp;burocrática, todo el&amp;nbsp;mundo pasa meses y&amp;nbsp;meses escribiendo aburridas especificaciones. Una&amp;nbsp;vez está acabada, la&amp;nbsp;especificación asciende a&amp;nbsp;la estantería para no&amp;nbsp;ser bajada nunca más, y&amp;nbsp;el producto es&amp;nbsp;implementado a&amp;nbsp;partir de&amp;nbsp;cero sin&amp;nbsp;ninguna atención a&amp;nbsp;lo que&amp;nbsp;decía la&amp;nbsp;especificación, porque nadie se&amp;nbsp;leyó la&amp;nbsp;especificación, porque le&amp;nbsp;dejaba a&amp;nbsp;uno tan&amp;nbsp;atontado. El&amp;nbsp;proceso mismo de&amp;nbsp;escribir la&amp;nbsp;especificación pudo haber sido un&amp;nbsp;buen ejercicio, porque obligó a&amp;nbsp;todos, por&amp;nbsp;lo&amp;nbsp;menos, a&amp;nbsp;meditar la&amp;nbsp;cuestión. Pero el&amp;nbsp;hecho de&amp;nbsp;que la&amp;nbsp;especificación fue&amp;nbsp;apartada (inédita y&amp;nbsp;despreciada) cuando se&amp;nbsp;terminó hace que&amp;nbsp;la&amp;nbsp;gente se&amp;nbsp;sienta como si&amp;nbsp;hubiera trabajado mucho para nada.&lt;/p>&lt;br />&lt;a name="p2501-74">&lt;/a>&lt;p class="auto" id="p2501-74">
Así&amp;nbsp;mismo, si&amp;nbsp;tu especificación nunca se&amp;nbsp;lee, tendrás muchas discusiones cuando se&amp;nbsp;entregue el&amp;nbsp;producto terminado. Alguien (la dirección, marketing, o&amp;nbsp;un cliente) dice: ¡espera un&amp;nbsp;momento!. ¡Me prometiste que&amp;nbsp;habría un&amp;nbsp;deshuesador de&amp;nbsp;aceitunas! ¿Dónde está el&amp;nbsp;deshuesador de&amp;nbsp;aceitunas?&amp;raquo; Y&amp;nbsp;los programadores dicen, &amp;laquo;no, en&amp;nbsp;realidad, si&amp;nbsp;miras la&amp;nbsp;especificación, capítulo 3, sección 4, párrafo 2.3.0.1, verás que&amp;nbsp;dice bastante explícitamente 'sin deshuesador de&amp;nbsp;aceitunas'". Pero eso&amp;nbsp;no&amp;nbsp;satisface al&amp;nbsp;cliente, quien siempre tiene razón, así&amp;nbsp;que los&amp;nbsp;gruñones de&amp;nbsp;los programadores tienen que&amp;nbsp;ponerse a&amp;nbsp;integrar un&amp;nbsp;deshuesador de&amp;nbsp;aceitunas en&amp;nbsp;el cacharro (haciéndolos aún&amp;nbsp;más cínicos en&amp;nbsp;todo lo&amp;nbsp;que tiene que&amp;nbsp;ver con&amp;nbsp;las especificaciones). O&amp;nbsp;un jefe dice, &amp;laquo;eh, la&amp;nbsp;forma de&amp;nbsp;expresar este diálogo es&amp;nbsp;demasiado prolija, y&amp;nbsp;debería haber un&amp;nbsp;anuncio en&amp;nbsp;la parte de&amp;nbsp;arriba de&amp;nbsp;cada cuadro de&amp;nbsp;diálogo&amp;raquo;. Y&amp;nbsp;los programadores, frustrados, dicen: "¡pero usted aprobó la&amp;nbsp;especificación que&amp;nbsp;listaba exactamente el&amp;nbsp;formato y&amp;nbsp;los contenidos de&amp;nbsp;cada cuadro de&amp;nbsp;diálogo!" Pero, por&amp;nbsp;supuesto, el&amp;nbsp;jefe no&amp;nbsp;había leído realmente la&amp;nbsp;especificación, porque, cada vez&amp;nbsp;que lo&amp;nbsp;intentaba, su&amp;nbsp;cerebro empezaba a&amp;nbsp;licuarse por&amp;nbsp;las órbitas de&amp;nbsp;sus ojos, y, de&amp;nbsp;todas formas, estaba interfiriendo con&amp;nbsp;su&amp;nbsp;partida de&amp;nbsp;golf de&amp;nbsp;los martes.&lt;/p>&lt;br />&lt;a name="p2501-75">&lt;/a>&lt;p class="auto" id="p2501-75">
Pues eso. Las&amp;nbsp;especificaciones son&amp;nbsp;buenas, pero no&amp;nbsp;si nadie las&amp;nbsp;lee. Como redactor de&amp;nbsp;especificaciones, tienes que&amp;nbsp;engañar a&amp;nbsp;la gente para que&amp;nbsp;lea tus&amp;nbsp;cosas, y&amp;nbsp;probablemente deberías hacer un&amp;nbsp;esfuerzo para no&amp;nbsp;causar que&amp;nbsp;ningún cerebro, ya&amp;nbsp;demasiado pequeño, se&amp;nbsp;filtre por&amp;nbsp;las cuencas de&amp;nbsp;los ojos.&lt;/p>&lt;br />&lt;a name="p2501-76">&lt;/a>&lt;p class="auto" id="p2501-76">
Engañar a&amp;nbsp;la gente para que&amp;nbsp;lea tus&amp;nbsp;cosas es&amp;nbsp;simplemente, por&amp;nbsp;lo&amp;nbsp;común, cuesti&amp;#976932;e escribir bien. Pero no&amp;nbsp;sería justo por&amp;nbsp;mi&amp;nbsp;parte decir solamente &amp;laquo;sé un&amp;nbsp;buen escritor&amp;raquo; y&amp;nbsp;dejarlo ahí. He&amp;nbsp;aquí cuatro reglas sencillas que&amp;nbsp;obligatoriamente debes seguir para hacer especificaciones que&amp;nbsp;sean leídas.&lt;/p>&lt;br />&lt;a name="p2501-77">&lt;/a>&lt;p class="auto" id="p2501-77">
Regla 1: Sé&amp;nbsp;divertido&lt;/p>&lt;br />&lt;a name="p2501-78">&lt;/a>&lt;p class="auto" id="p2501-78">
Sí, la&amp;nbsp;regla número uno&amp;nbsp;para engañar a&amp;nbsp;la gente a&amp;nbsp;que lea&amp;nbsp;tu&amp;nbsp;especificación es&amp;nbsp;hacer la&amp;nbsp;experiencia agradable. No&amp;nbsp;me cuentes que&amp;nbsp;no&amp;nbsp;naciste gracioso, no&amp;nbsp;me lo&amp;nbsp;trago. Todo el&amp;nbsp;mundo tiene ideas divertidas todo el&amp;nbsp;rato, simplemente las&amp;nbsp;autocensuran porque creen que&amp;nbsp;es&amp;nbsp;algo &amp;#147;poco profesional&amp;#148;. Bah. Hay&amp;nbsp;veces que&amp;nbsp;tienes que&amp;nbsp;romper las&amp;nbsp;reglas.&lt;/p>&lt;br />&lt;a name="p2501-79">&lt;/a>&lt;p class="auto" id="p2501-79">
Si&amp;nbsp;lees las&amp;nbsp;pilas de&amp;nbsp;basura que&amp;nbsp;he&amp;nbsp;escrito en&amp;nbsp;este sitio web, te&amp;nbsp;darás cuentas que&amp;nbsp;hay unos pocos y&amp;nbsp;lamentables intentos de&amp;nbsp;ser divertido repartidos por&amp;nbsp;todo él. Sólo hace cuatro párrafos estaba haciendo un&amp;nbsp;chiste asqueroso sobre fluidos corporales y&amp;nbsp;mofándome de&amp;nbsp;los jefes por&amp;nbsp;jugar al&amp;nbsp;golf. Incluso a&amp;nbsp;pesar de&amp;nbsp;que no&amp;nbsp;soy tan&amp;nbsp;gracioso, sigo intentándolo, y&amp;nbsp;hasta el&amp;nbsp;hecho de&amp;nbsp;ir por&amp;nbsp;ahí intentando ser&amp;nbsp;gracioso es&amp;nbsp;en sí&amp;nbsp;divertido, al&amp;nbsp;modo de&amp;nbsp;un payaso triste. Cuando estés escribiendo una&amp;nbsp;especificación, un&amp;nbsp;buen sitio para ser&amp;nbsp;gracioso son&amp;nbsp;los ejemplos. Cada vez&amp;nbsp;que necesites contar una&amp;nbsp;historia sobre cómo funciona una&amp;nbsp;característica, en&amp;nbsp;lugar de&amp;nbsp;decir:&lt;/p>&lt;br />
&lt;ul>&lt;li>&lt;ul>&lt;li> El&amp;nbsp;usuario pulsa Ctrl+N para crear una&amp;nbsp;nueva tabla, Empleados, y&amp;nbsp;comienza a&amp;nbsp;introducir los&amp;nbsp;nombres de&amp;nbsp;los empleados. &lt;/li>&lt;/ul>&lt;/li>&lt;/ul>
&lt;br />&lt;a name="p2501-80">&lt;/a>&lt;p class="auto" id="p2501-80">
escribe algo como:&lt;/p>&lt;br />
&lt;ul>&lt;li>&lt;ul>&lt;li> La&amp;nbsp;cerdita Peggy, golpeando las&amp;nbsp;teclas con&amp;nbsp;el&amp;nbsp;pintalabios porque sus&amp;nbsp;rechonchos deditos son&amp;nbsp;demasiado gordos para poder apretar una&amp;nbsp;sola tecla cada vez, pulsa Ctrl+N para crear una&amp;nbsp;nueva tabla, Novios, y&amp;nbsp;escribe el&amp;nbsp;único registro &amp;#147;Gustavo&amp;#148;. &lt;/li>&lt;/ul>&lt;/li>&lt;/ul>
&lt;br />&lt;a name="p2501-81">&lt;/a>&lt;p class="auto" id="p2501-81">
Si&amp;nbsp;lees mucho a&amp;nbsp;Dave Barry, descubrirás que&amp;nbsp;una de&amp;nbsp;las formas más&amp;nbsp;fáciles de&amp;nbsp;ser gracioso es&amp;nbsp;ser concreto cuando no&amp;nbsp;es lo&amp;nbsp;que se&amp;nbsp;necesita. Los&amp;nbsp;&amp;#147;chuchos sarnosos&amp;#148; son&amp;nbsp;más graciosos que&amp;nbsp;los &amp;#147;perros&amp;#148;. &amp;#147;La cerdita Peggy&amp;#148; es&amp;nbsp;más graciosa que&amp;nbsp;&amp;#147;el usuario&amp;#148;. En&amp;nbsp;lugar de&amp;nbsp;decir &amp;laquo;grupos de&amp;nbsp;presión&amp;#148;, di&amp;nbsp;&amp;#147;cultivadores zurdos de&amp;nbsp;aguacate&amp;#148;. En&amp;nbsp;lugar de&amp;nbsp;decir &amp;laquo;Los que&amp;nbsp;se&amp;nbsp;niegan a&amp;nbsp;limpiar lo&amp;nbsp;que dejan sus&amp;nbsp;perros deberían ser&amp;nbsp;castigados&amp;#148;, di&amp;nbsp;que deberían &amp;laquo;ser enviados a&amp;nbsp;prisiones tan&amp;nbsp;solitarias que&amp;nbsp;los reclusos tienen que&amp;nbsp;pagar a&amp;nbsp;las arañas para obtener sexo&amp;#148;.&lt;/p>&lt;br />&lt;a name="p2501-82">&lt;/a>&lt;p class="auto" id="p2501-82">
Ah, por&amp;nbsp;cierto, si&amp;nbsp;crees que&amp;nbsp;no&amp;nbsp;es profesional ser&amp;nbsp;divertido, lo&amp;nbsp;siento, pero en&amp;nbsp;ese caso simplemente no&amp;nbsp;tienes sentido del&amp;nbsp;humor. (No lo&amp;nbsp;niegues. Los&amp;nbsp;que carecen de&amp;nbsp;sentido del&amp;nbsp;humor siempre lo&amp;nbsp;niegan. No&amp;nbsp;me puedes engañar.) Y&amp;nbsp;si trabajas en&amp;nbsp;una compañía donde te&amp;nbsp;respetarán menos porque tus&amp;nbsp;especificaciones son&amp;nbsp;joviales, divertidas, y&amp;nbsp;agradables de&amp;nbsp;leer, ve&amp;nbsp;y encuentra otra compañía para la&amp;nbsp;que trabajar, porque la&amp;nbsp;vida es&amp;nbsp;demasiado corta para gastar las&amp;nbsp;horas del&amp;nbsp;día en&amp;nbsp;un sitio tan&amp;nbsp;severo y&amp;nbsp;desgraciado.&lt;/p>&lt;br />&lt;a name="p2501-83">&lt;/a>&lt;p class="auto" id="p2501-83">
Regla 2: Escribir una&amp;nbsp;especificación es&amp;nbsp;como escribir código para que&amp;nbsp;lo&amp;nbsp;ejecute un&amp;nbsp;cerebro&lt;/p>&lt;br />&lt;a name="p2501-84">&lt;/a>&lt;p class="auto" id="p2501-84">
He&amp;nbsp;aquí por&amp;nbsp;qué creo que&amp;nbsp;los programadores tienen problemas para escribir buenas especificaciones.&lt;/p>&lt;br />&lt;a name="p2501-85">&lt;/a>&lt;p class="auto" id="p2501-85">
Cuando uno&amp;nbsp;escribe código, su&amp;nbsp;audiencia principal es&amp;nbsp;el compilador. Sí, ya&amp;nbsp;lo sé, hay&amp;nbsp;gente que&amp;nbsp;también tiene que&amp;nbsp;leer código, pero normalmente es&amp;nbsp;muy duro para ellos. Para la&amp;nbsp;mayoría de&amp;nbsp;los programadores ya&amp;nbsp;es suficiente con&amp;nbsp;conseguir que&amp;nbsp;el&amp;nbsp;código quede en&amp;nbsp;un estado en&amp;nbsp;el que&amp;nbsp;el&amp;nbsp;compilador lo&amp;nbsp;lea y&amp;nbsp;lo interprete correctamente; preocuparse de&amp;nbsp;hacer código legible por&amp;nbsp;los humanos es&amp;nbsp;un lujo. Si&amp;nbsp;escribes:&lt;/p>&lt;br />
&lt;div class="indent">&lt;div class="indent">void print_count( FILE* a, char  *  b, int&amp;nbsp;c&amp;nbsp;){&lt;div class="indent">&lt;div class="indent">fprintf(a, &amp;laquo;hay %d %s\n&amp;raquo;, c, b);}&lt;/div>&lt;/div>&lt;/div>&lt;a name="p2501-86">&lt;/a>&lt;p class="auto" id="p2501-86">&lt;/div>
&lt;br />
&lt;div class="indent">&lt;/p>&lt;div class="indent">main(){ int&amp;nbsp;n; n&amp;nbsp;=&lt;br />
10; print_count(stdout, &amp;#147;empleados&amp;#148;, n) /* código&lt;br />
deliberadamente ofuscado */ }&lt;/div>&lt;/div>
&lt;br />&lt;a name="p2501-87">&lt;/a>&lt;p class="auto" id="p2501-87">
o&lt;/p>&lt;br />
&lt;div class="indent">&lt;div class="indent">printf(&amp;laquo;hay 10 empleados\n&amp;raquo;);&lt;/div>&lt;/div>
&lt;br />&lt;a name="p2501-88">&lt;/a>&lt;p class="auto" id="p2501-88">
obtienes la&amp;nbsp;misma salida. Por&amp;nbsp;esa misma razón, si&amp;nbsp;piensas sobre ello, sueles encontrar programadores que&amp;nbsp;escriben cosas como:&lt;/p>&lt;br />
&lt;div class="indent">&lt;div class="indent">Sea una&amp;nbsp;función, &lt;span class="missingpage">Direccion&amp;nbsp;De&lt;/span>&lt;a href="http://wiki.us.es/juanan/wakka.php?wakka=DireccionDe/edit&amp;amp;add=1" title="Crear esta página">?&lt;/a>(x), que&amp;nbsp;se&amp;nbsp;define como la&amp;nbsp;correspondencia de&amp;nbsp;un usuario x, a&amp;nbsp;la dirección de&amp;nbsp;&lt;span class="nobr">e-mail&lt;/span> del&amp;nbsp;usuario según &lt;span class="nobr">RFC-822&lt;/span>, una&amp;nbsp;cadena ANSI. Sean el&amp;nbsp;usuario A&amp;nbsp;y el&amp;nbsp;usuario B, donde A&amp;nbsp;quiere enviar un&amp;nbsp;&lt;span class="nobr">e-mail&lt;/span> al&amp;nbsp;usuario B. Por&amp;nbsp;tanto, el&amp;nbsp;usuario A&amp;nbsp;inicia un&amp;nbsp;nuevo mensaje usando alguna (pero no&amp;nbsp;todas) de&amp;nbsp;las técnicas definidas en&amp;nbsp;otra parte, y&amp;nbsp;escribe &lt;span class="missingpage">Direccion&amp;nbsp;De&lt;/span>&lt;a href="http://wiki.us.es/juanan/wakka.php?wakka=DireccionDe/edit&amp;amp;add=1" title="Crear esta página">?&lt;/a>(B) en&amp;nbsp;el cuadro de&amp;nbsp;edición Para:&lt;/div>&lt;/div>
&lt;br />&lt;a name="p2501-89">&lt;/a>&lt;p class="auto" id="p2501-89">
Esto mismo podría haberse especificado como:&lt;/p>&lt;br />
&lt;div class="indent">&lt;div class="indent">La cerdita Peggy quiere irse a&amp;nbsp;almorzar, así&amp;nbsp;que comienza un&amp;nbsp;nuevo &lt;span class="nobr">e-mail&lt;/span> y&amp;nbsp;escribe la&amp;nbsp;dirección de&amp;nbsp;la rana Gustavo en&amp;nbsp;el cuadro &amp;#147;Para:&amp;raquo;.&lt;/div>&lt;a name="p2501-90">&lt;/a>&lt;p class="auto" id="p2501-90">&lt;/div>
&lt;br />
&lt;div class="indent">&lt;/p>&lt;div class="indent">Nota técnica: la&amp;nbsp;dirección debe ser&amp;nbsp;una dirección estándar de&amp;nbsp;Internet (siguiendo &lt;span class="nobr">RFC-822&lt;/span>)&lt;/div>&lt;/div>
&lt;br />&lt;a name="p2501-91">&lt;/a>&lt;p class="auto" id="p2501-91">
Ambas &amp;#147;significan&amp;#148; lo&amp;nbsp;mismo, en&amp;nbsp;teoría, quitando que&amp;nbsp;el&amp;nbsp;primer ejemplo es&amp;nbsp;imposible de&amp;nbsp;entender a&amp;nbsp;no ser&amp;nbsp;que lo&amp;nbsp;descodifiques cuidadosamente, y&amp;nbsp;el segundo ejemplo es&amp;nbsp;fácil de&amp;nbsp;entender. A&amp;nbsp;menudo los&amp;nbsp;programadores tratan de&amp;nbsp;escribir especificaciones que&amp;nbsp;parecen densos artículos académicos. Creen que&amp;nbsp;una especificación &amp;#147;correcta&amp;#148; debe ser&amp;nbsp;&amp;laquo;técnicamente&amp;#148; correcta, y&amp;nbsp;fallan estrepitosamente.&lt;/p>&lt;br />&lt;a name="p2501-92">&lt;/a>&lt;p class="auto" id="p2501-92">
El&amp;nbsp;error consiste en&amp;nbsp;que, cuando uno&amp;nbsp;escribe una&amp;nbsp;especificación, además de&amp;nbsp;ser correcta, ha&amp;nbsp;de ser&amp;nbsp;comprensible, lo&amp;nbsp;cual, en&amp;nbsp;términos de&amp;nbsp;programación, significa que&amp;nbsp;debe ser&amp;nbsp;escrito de&amp;nbsp;modo que&amp;nbsp;el&amp;nbsp;cerebro humano lo&amp;nbsp;pueda &amp;#147;compilar&amp;#148;. Una&amp;nbsp;de&amp;nbsp;las grandes diferencias entre ordenadores y&amp;nbsp;cerebros humanos es&amp;nbsp;que los&amp;nbsp;ordenadores están dispuestos a&amp;nbsp;quedarse esperando pacientemente mientras defines los&amp;nbsp;términos que&amp;nbsp;quieres usar más&amp;nbsp;adelante. Pero los&amp;nbsp;humanos no&amp;nbsp;entenderán de&amp;nbsp;qué estás hablando a&amp;nbsp;no ser&amp;nbsp;que les&amp;nbsp;motives antes. Los&amp;nbsp;seres humanos no&amp;nbsp;quieren tener que&amp;nbsp;descodificar algo, sólo quieren leerlo en&amp;nbsp;orden y&amp;nbsp;entenderlo. Para los&amp;nbsp;seres humanos, tienes que&amp;nbsp;proporcionar la&amp;nbsp;visión general y&amp;nbsp;entonces rellenarla con&amp;nbsp;detalles. Con&amp;nbsp;programas de&amp;nbsp;ordenador, empiezas arriba y&amp;nbsp;sigues hasta abajo del&amp;nbsp;todo, dando detalles desde el&amp;nbsp;principio. A&amp;nbsp;un ordenador no&amp;nbsp;le importa si&amp;nbsp;los nombres de&amp;nbsp;tus variables tienen sentido. Un&amp;nbsp;cerebro humano entiende las&amp;nbsp;cosas mucho mejor si&amp;nbsp;puedes dibujar un&amp;nbsp;cuadro vívido en&amp;nbsp;su mente contándole una&amp;nbsp;historia, incluso si&amp;nbsp;tan solo es&amp;nbsp;un fragmento de&amp;nbsp;historia, porque nuestros cerebros han&amp;nbsp;evolucionado para entender historias.&lt;/p>&lt;br />&lt;a name="p2501-93">&lt;/a>&lt;p class="auto" id="p2501-93">
Si&amp;nbsp;muestras un&amp;nbsp;tablero de&amp;nbsp;ajedrez a&amp;nbsp;mitad de&amp;nbsp;una partida a&amp;nbsp;un jugador de&amp;nbsp;ajedrez experimentado, aunque sólo sea&amp;nbsp;durante uno&amp;nbsp;o&amp;nbsp;dos segundos, será capaz de&amp;nbsp;memorizar instantáneamente la&amp;nbsp;posición de&amp;nbsp;cada pieza. Pero si&amp;nbsp;mueves un&amp;nbsp;par de&amp;nbsp;piezas absurdamente, con&amp;nbsp;movimientos que&amp;nbsp;no&amp;nbsp;podrían haber ocurrido en&amp;nbsp;una partida normal (por ejemplo, pon&amp;nbsp;algunos peones en&amp;nbsp;la primera fila, o&amp;nbsp;pon ambos alfiles negros en&amp;nbsp;cuadros negros), entonces memorizar el&amp;nbsp;tablero será mucho más&amp;nbsp;difícil para él. Este caso es&amp;nbsp;diferente de&amp;nbsp;la forma en&amp;nbsp;que piensan los&amp;nbsp;ordenadores. Un&amp;nbsp;programa de&amp;nbsp;ordenador que&amp;nbsp;pudiera memorizar un&amp;nbsp;tablero de&amp;nbsp;ajedrez podría memorizar con&amp;nbsp;igual facilidad las&amp;nbsp;posiciones posibles y&amp;nbsp;las imposibles. La&amp;nbsp;forma en&amp;nbsp;que funciona el&amp;nbsp;cerebro humano no&amp;nbsp;es mediante accesso aleatorio; ciertas conexiones tienden a&amp;nbsp;ser reforzadas en&amp;nbsp;nuestros cerebros, y&amp;nbsp;algunas cosas son&amp;nbsp;más fáciles de&amp;nbsp;recordar que&amp;nbsp;otras simplemente porque son&amp;nbsp;más comunes.&lt;/p>&lt;br />&lt;a name="p2501-94">&lt;/a>&lt;p class="auto" id="p2501-94">
Así&amp;nbsp;que, cuando estés escribiendo una&amp;nbsp;especificación, intenta imaginar la&amp;nbsp;persona a&amp;nbsp;quien va&amp;nbsp;dirigida, y&amp;nbsp;trata de&amp;nbsp;imaginar a&amp;nbsp;cada paso lo&amp;nbsp;que le&amp;nbsp;estás pidiendo que&amp;nbsp;entienda. Frase a&amp;nbsp;frase, pregúntate si&amp;nbsp;la persona que&amp;nbsp;lea esta frase la&amp;nbsp;entenderá en&amp;nbsp;un sentido profundo, en&amp;nbsp;el contexto de&amp;nbsp;lo que&amp;nbsp;ya&amp;nbsp;les has&amp;nbsp;contado. Si&amp;nbsp;algunos miembros de&amp;nbsp;tu audiencia objetivo no&amp;nbsp;saben lo&amp;nbsp;que es&amp;nbsp;&lt;span class="nobr">RFC-822&lt;/span>, o&amp;nbsp;bien lo&amp;nbsp;defines, o, como mínimo, entierra la&amp;nbsp;mención de&amp;nbsp;&lt;span class="nobr">RFC-822&lt;/span> en&amp;nbsp;una nota técnica, así&amp;nbsp;los ejecutivos que&amp;nbsp;lean la&amp;nbsp;especificación no&amp;nbsp;abandonarán y&amp;nbsp;dejarán de&amp;nbsp;leer la&amp;nbsp;primera vez&amp;nbsp;que vean mucha jerga técnica.&lt;/p>&lt;br />&lt;a name="p2501-95">&lt;/a>&lt;p class="auto" id="p2501-95">
Regla 3: Escribe tan&amp;nbsp;sencillamente como te&amp;nbsp;sea posible&lt;/p>&lt;br />&lt;a name="p2501-96">&lt;/a>&lt;p class="auto" id="p2501-96">
No&amp;nbsp;uses lenguaje afectado o&amp;nbsp;formal porque pienses que&amp;nbsp;es&amp;nbsp;poco profesional escribir con&amp;nbsp;frases sencillas. Usa&amp;nbsp;el&amp;nbsp;lenguaje más&amp;nbsp;simple que&amp;nbsp;puedas.&lt;/p>&lt;br />&lt;a name="p2501-97">&lt;/a>&lt;p class="auto" id="p2501-97">
La&amp;nbsp;gente usa&amp;nbsp;palabras como &amp;#147;emplear&amp;#148; porque piensan que&amp;nbsp;&amp;#147;usar&amp;#148; parece poco profesional. (Aquí tenemos de&amp;nbsp;nuevo la&amp;nbsp;expresión &amp;#147;poco profesional&amp;#148;. Cuando alguien te&amp;nbsp;dice que&amp;nbsp;no&amp;nbsp;deberías hacer algo porque es&amp;nbsp;&amp;#147;poco profesional&amp;#148;, ya&amp;nbsp;sabes que&amp;nbsp;se&amp;nbsp;han quedado sin&amp;nbsp;argumentos válidos.) De&amp;nbsp;hecho, pienso que&amp;nbsp;mucha gente cree que&amp;nbsp;la&amp;nbsp;escritura clara implica que&amp;nbsp;algo no&amp;nbsp;está bien.&lt;br />
Divide el&amp;nbsp;texto en&amp;nbsp;frases cortas. Si&amp;nbsp;tienes problemas para escribir una&amp;nbsp;frase de&amp;nbsp;forma clara, divídela en&amp;nbsp;dos o&amp;nbsp;tres frases más&amp;nbsp;cortas.&lt;/p>&lt;br />&lt;a name="p2501-98">&lt;/a>&lt;p class="auto" id="p2501-98">
Evita los&amp;nbsp;muros de&amp;nbsp;texto: páginas completas sólo con&amp;nbsp;texto. La&amp;nbsp;gente se&amp;nbsp;asusta y&amp;nbsp;no las&amp;nbsp;lee. ¿Cuándo fue&amp;nbsp;la&amp;nbsp;última vez&amp;nbsp;que viste una&amp;nbsp;revista popular o&amp;nbsp;un periódico con&amp;nbsp;páginas enteras de&amp;nbsp;texto? Las&amp;nbsp;revistas llegan hasta el&amp;nbsp;punto de&amp;nbsp;sacar una&amp;nbsp;cita del&amp;nbsp;artículo e&amp;nbsp;imprimirla, en&amp;nbsp;el centro de&amp;nbsp;la página, en&amp;nbsp;un tipo de&amp;nbsp;letra gigante, solamente para evitar que&amp;nbsp;parezca una&amp;nbsp;página llena de&amp;nbsp;texto. Usa&amp;nbsp;listas numeradas, figuras, gráficas, tablas, y&amp;nbsp;mucho espacio en&amp;nbsp;blanco, para que&amp;nbsp;la&amp;nbsp;lectura &amp;#147;parezca&amp;#148; más&amp;nbsp;fluida.&lt;/p>&lt;d</description>
</item>
<item>
<title>2007-09-13 21:58:13</title>
<link>http://wiki.us.es/juanan/wakka.php?wakka=EspecificacionesFuncionalesSinEsfuerzo/show&amp;time=2007-09-13+21%3A58%3A13</link>
<description>edited by JuananRuiz</description>
</item>
</channel>
</rss>

 <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
 </script>
 <script type="text/javascript">
  _uacct = "UA-1947893-2";
  urchinTracker();
 </script>

