Мой подход заключается в использовании стороннего кода для некоторых основных функций. Например, я использую Subsonic для доступа к данным, компоненты Devexpress для пользовательского интерфейса и Peter Blum Data Entry Suite для ввода и проверки данных. Subsonic с открытым исходным кодом, элементы управления Devexpress Peter Blum имеют исходный код, доступный за дополнительную плату. Мне было бы невозможно получить функциональность этих элементов управления, если бы я попытался написать их сам.
Этот подход позволяет мне сосредоточиться на пользовательских функциях моего приложения, не беспокоясь о том, как я получу доступ к базе данных или как я создаю редактируемый древовидный список, который выглядит красиво. Конечно, у меня нет полностью настроенного и работающего форума, но я знаю, что буду использовать базу данных SQL для своего приложения, и мне не нужно будет пытаться заставить различные компоненты хранения данных работать вместе. У меня нет вики, но я знаю, как использовать компоненты пользовательского интерфейса devexpress, и форматирование и проверка правильности ввода данных легко осуществить с помощью элементов управления Питера Блума. Другими словами, изучите инструменты (и, конечно, тщательно их выбирайте), которые ускорят разработку всех ваших проектов, и вы сможете сосредоточиться на тех частях своего приложения, которые необходимо настроить.
Меня не слишком беспокоит, открыт ли он или нет, если доступен исходный код. Если это открытый исходный код, я жертвую проекту. Если это коммерческий компонент, я заплачу справедливую цену. В любом случае, инструменты помогают сделать программирование увлекательным, а результаты имеют целостность данных и отлично выглядят. Если я разрабатываю вики или форум, я знаю, что могу заставить их работать без проблем. Наконец, все инструменты, о которых я упоминал, существуют уже давно и написаны выдающимися разработчиками с хорошей репутацией.