Когда NIH против разумного вложения времени?

Так что я сижу здесь, играю в догонялки и слушаю Stack Overflow Podcast #20, а Джоэл рассказывает о парнях из Excel в MS, которые написали собственный компилятор для улучшения производительности кода, работающего с указателями, и это заставило меня задуматься

   when is it NIH versus being a sensible investment of time?

В то время, когда ситуация с компилятором была ужасной, я вижу, что продать этот конкретный случай руководству было довольно просто, учитывая, что у вас была определенная область оптимизации, которую вы хотели добавить.

Но в настоящее время, можете ли вы представить себе попытку обратиться к руководству и сказать, что вы хотите переписать gcc?

Так, как люди определяют, стоит ли идея преследовать против "преследования наклоном на ветряных мельницах" при синдроме НИЗ?

Я спрашиваю, потому что нам нужно выделить время для улучшения некоторых аспектов нашей операционной платформы. Мне интересно, как поступить "с кепкой в ​​руке", чтобы попросить "Человека" выделить какое-то время для улучшения, которое, как известно большинству людей, обязательно окупится в будущем.

Изменить: я забыл подчеркнуть, что мы сервисная компания, предоставляющая платформу для крупных вещателей. Именно эта платформа органично выросла за последние 15 лет и нуждается в некоторых улучшениях. Предоставление этой услуги является нашей основной бизнес-функцией.

7 ответов

Решение

Все дело в конкурентном преимуществе.

Ребята из команды Excel написали свой собственный компилятор, чтобы они могли сделать Excel намного меньше, чем он был бы. Это уменьшило их время загрузки, а также объем памяти, используемый программой; это сделало их продукт лучше, чем у конкурентов.

Точно так же Джефф мог бы использовать PhpBB для создания этого сайта, но тогда он был бы таким же, как конкуренты. Он просто был бы другим чуваком с форумом. Он написал свой собственный движок форума, чтобы он мог отличить свой сайт от конкурентов.

Вы должны использовать NIH только в тех случаях, когда это дает вам явное конкурентное преимущество или когда это отличает вас от конкурентов.

Сам Джоэл ответил, что его лучший совет (который кажется разумным): если это основная бизнес-функция - делай сам, несмотря ни на что.

К этому я мог бы добавить, что если это не основная функция, у вас должны быть как экономические, так и технические веские причины.

Кстати, каким образом улучшения, которые вам нужны, покрываются NIH?

У нас была (смутно) похожая проблема несколько месяцев назад, нам нужно было время, чтобы заново сделать что-то, что мы уже создали другим способом, чтобы справиться с нестабильностью нисходящей библиотеки. В конце концов, это было довольно легко получить одобрение - приложение страдало, и я полагаю, что они поверили в то, что мы говорили.

PS

Вероятно, глупый вопрос и определенно не ответ, но что такое NIH?

Выделение памяти является "основным" требованием всего моего программного обеспечения и, следовательно, моего бизнеса, но я бы не стал писать свой собственный распределитель или сборщик.

Как и все остальное в машиностроении, в каждом случае есть множество компромиссов. Это требует опыта, чтобы быть успешным, могут быть успешно обработаны по-разному, и не могут быть обобщены в цитате блоггера.

Постарайтесь научиться оценивать качество сторонних материалов. log4net, с которого началось это обсуждение, - это пренебрежение программным обеспечением, которое недавно было удалено некоторыми известными проектами (например, nUnit). Этого было бы достаточно, чтобы оттолкнуть меня.

Распределение памяти @Will не является основной бизнес-функцией вашего бизнеса, если вы не пишете встроенное программное обеспечение или приложения, чувствительные к памяти. Даже в этом случае, если ценность вашего бизнеса заключается в том, чтобы делать что-то еще, кроме того, что он эффективнее использует память, чем конкуренты, это все равно не будет основной бизнес-функцией. И если вы пишете такого рода программное обеспечение, и оно отличается эффективностью памяти, как вам это удалось?

Да, конечно, вам всегда придется позаботиться о компромиссах, как всегда, но это вряд ли добавляет ценности к ответу. "Это зависит" - это всегда строго правильный ответ, поэтому бессмысленный.

@ Мел, я согласен. Для меня основные бизнес-функции - это функции, относящиеся к вашему основному бизнесу, которые отличают вас от конкурентов. В вашем примере бухгалтерского учета я сомневаюсь, что упомянутые вами расчеты - это основной актив бухгалтерской компании, но что-то иное, например, обслуживание клиентов или лучшее знание закона или что-то еще.

И я также не согласен, если вы всегда будете использовать что-то, что работает, даже если эта часть приложения предположительно является вашим преимуществом (что побудит людей использовать / купить ваше приложение.), Тогда это перестает быть вашим преимуществом.

Давайте просто вспомним, что конкурентное преимущество не всегда (почти никогда в крупном плане) связано с программным обеспечением, и поэтому многие люди могут использовать существующие компоненты, не рискуя своим бизнесом.

Этот вопрос настолько актуален и очень интересен, что разработка Excel вдохновила его. У нас есть собственный проект, в котором нам нужны были некоторые функции Excel, запрограммированные в приложении PHP. Один разработчик работал над этим прогнозом более полутора лет. Никто не понимает, насколько сложно переписать Excel, пока не попробовал. Во всяком случае, в январе прошлого года я заметил, что PHP имеет библиотеку PHPExcel, написанную для него третьей стороной, которая активно разрабатывается и поддерживается (она даже поддерживает Excel 2007). Таким образом, имело ли смысл для нас заново изобретать Excel (особенно учитывая передачу программистов в нашем отделе - этот парень покидает нас на следующей неделе).

Чтобы ответить на этот вопрос, вы должны спросить себя, будут ли дополнения или изменения, которые вы хотите внести в код вашего проекта, будут иметь значительный экспоненциальный эффект на текущий набор функций или позволят вам добавить больше функций в будущем с экспоненциально меньшим временем израсходованы. Вам необходимо проанализировать и задокументировать положительные и отрицательные эффекты, которые будут иметь изменения в вашем коде для всего проекта, сейчас и в будущем. Кроме того, подумайте, не облегчат ли эти изменения поддержку и будут ли способствовать будущему росту проекта - если это так, это добавит ценность приложению, особенно если есть вероятность того, что вы или другие вовлеченные лица когда-нибудь перейдете на другую работу или кому-то еще может потребоваться внести изменения, пока вы заняты другими проектами.

Кстати, "NIH" означает "не изобретено-здесь". Смотрите эту ссылку Джоэла в своей записи в блоге на тему: " В защиту синдрома не изобретенного здесь"

Винко, это зависит от твоего определения "Основной бизнес-функции". Если мой бизнес - бухгалтерский учет, то расчет процентов по кредиту, безусловно, будет основной бизнес-функцией, но, конечно, он не уникален для моей компании. Нечто "стандартное", подобное этому, НИКОГДА не должно быть написано собственными силами.

Если доступный компонент делает то, что мне нужно, я буду использовать его каждый раз. Если мне придется много спорить, чтобы это сработало, я мог бы вместо этого написать свой. Вы также должны принять во внимание юридические вопросы. Может быть очень хорошая библиотека, которую я не могу использовать в своем коммерческом приложении из-за вирусной лицензии (GPL против LGPL).

Другие вопросы по тегам