Что делать, если кто-то настаивает на том, чтобы взять под контроль хобби-проект?

Я работаю над хобби-проектом для игры — сейчас она находится в состоянии альфа-версии, и у меня есть пользователи, которые ее используют.

Последние 9 месяцев я был единственным разработчиком, но теперь я нашел кого-то, кто был готов заняться веб-разработкой. За несколько недель они добились больших успехов в переписывании веб-сайта, чтобы он выглядел и чувствовал себя намного лучше.

За последние несколько дней мы говорили в Discord о том, как объединить нашу работу, и вот тут-то все и разочаровало...

Он предлагает большое количество изменений в функциональности, которая уже работает. «Прекратите использовать хранимые процедуры, сделайте это способом Laravel и создайте запрос в своем API», «Прекратите использовать сокеты, переключитесь на веб-сокеты и отправляйте HTTP-запросы», «отмените свой проект mvc и перепишите все как rest-api» , «перепишите свою базу данных в postgresql или mariadb», «если бы это был любой другой разработчик, он бы посоветовал вам отказаться от .net и использовать Go и Vue».

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

Я изо всех сил старался объяснить, почему я против подобных вещей. Я не знаком даже с половиной технологических фреймворков/языков, на которые он предлагал нам перейти, и мне не хочется переписывать всю мою кодовую базу в каком-то новом фреймворке, в котором у меня нет опыта.

Я начинаю думать, что мы двое слишком разные (он линукс, передовой, ненавидит MS, мой основной стек — .NET, и я не так внимательно слежу за последними веб-тенденциями)

Интересно, не лучше ли просто разорвать партнерство и пойти разными путями? Или продолжать с ним спорить?

Вы на самом деле отвечаете за этот проект или к нему присоединился кто-то новый?
Я учредитель и владелец. Чего у меня нет, так это кода интерфейса веб-сайта, который написал другой разработчик.
Вы заплатили другому разработчику за то, чтобы он сделал для вас интерфейс? Имелось ли подразумеваемое или явное договорное соглашение относительно того, кому принадлежал код, который он разработал? Если на то пошло, у вас вообще есть договор между вами?
Что произойдет, если вы откажетесь делать те изменения, о которых он просит?
Вы не думали о том, что он может быть прав в некоторых аспектах? Как вы упомянули, что вы не знакомы с последними веб-тенденциями, и хотя я не предлагаю развернуться на 180 градусов, вы можете попробовать сделать некоторые из предложенных им вещей, которые, по вашему мнению, вам понравятся. Помните, что никто не собирается причинять вред вашему проекту ради него, особенно этот парень.
Прав помощник или нет, значения не имеет. Движущей силой этого проекта является ОП, хелпер — это просто хелпер. Я не говорю «не слушайте помощника», я говорю: «либо заставьте помощника понять, что вы не можете/не будете менять серверную часть, либо заставьте ее взять на себя ответственность за ответвление проекта».
Не могли бы вы уточнить, что означает слияние вашей работы и как возникла тема этих радикальных изменений? Идет ли речь об общем интерфейсе, через который вы обмениваетесь данными, или «просто» о том, что ему не нравится ваш технический стек, но он не имеет отношения к «его» части проекта, кажется важным.
@RutherRendommeleigh Я сам создал прототип веб-сайта в asp.net mvc. Это было не здорово, но функционально. Этот другой разработчик фактически начал с нуля, написав новые представления и код, используя Vue.js и Node.js. Очевидно, что это решение не совместимо с тем, что у меня есть из коробки, поэтому мы обсудили, что мы хотели с этим сделать (расширить ли методы моего контроллера mvc или написать остальные API и т. д.). То, что начиналось как простое «какой интерфейс вам нужен», превратилось в «ваш метод и стек не годятся, давайте их перепишем».
@Stralos Он прав в некоторых аспектах - я был полностью согласен с тем, что он переписал веб-сайт с использованием Vue и Node.js, черт возьми, я согласен написать API для отдыха, чтобы дать ему методы и данные, которые ему нужны. Но я не согласен тратить еще 6 месяцев на переписывание всего в новом стеке, который мне также придется изучать (и, вероятно, потерпеть неудачу в первый раз). Он может подумать, что использование более нового стека будет более масштабируемым, но это сильно зависит от индивидуальных навыков работы со стеком. Изменение стеков не сделает вещи автоматически более масштабируемыми, вам нужен навык, чтобы довести дело до конца.
«он линукс, передовой, ненавидит парня из MS; мой основной стек — .NET» было очень плохой идеей когда-либо работать вместе .
У вас есть гитхаб? Я .Neter ищу сторонний проект :)
Извините... позвольте мне изучить эти: «Прекратите использовать хранимые процедуры, сделайте это в стиле laravel» -> лучше «Используйте веб-сокеты», что лучше «Перепишите все как API для отдыха», если это означает создание микросервисной архитектуры, то это лучше "Используйте postgresql или mariadb" Я не знаю, какую БД вы используете прямо сейчас... но эти, вероятно, лучше" "Используйте Go или Vue", которые... великолепны. Он пытается значительно улучшить ваш проект, и вы должны начни учиться и перестань жаловаться :)
@Cris Я не полностью согласен с SPROC и Query Builder. Я бы предпочел иметь запросы в базе данных, где их можно было бы точно настроить и изменить на лету, а не перекомпилировать код. Я все еще учусь использовать SignalR и ASP.NET; есть только так много человек может узнать и взять на себя. Опять же, мне нет смысла сбрасывать 9 месяцев работы и переписывать весь проект на Go. Если я хочу использовать Go, я сделаю это в другом проекте. Чрезмерная разработка приложения, которое может иметь 1000 пользователей, если повезет, не имеет смысла с точки зрения бизнеса.
@Cris Похоже, ты не очень хороший разработчик. Вы совершенно не представляете, что делает его проект и как он работает, но вы мгновенно уверены, что его база данных, фреймворк, язык и метод хранения данных неверны? По каждой из этих вещей есть компромиссы, которые вы даже не можете начать оценивать в кратком посте здесь. Я предлагаю вам научиться собирать требования и оценивать различные пути, прежде чем публиковать такие сообщения.

Ответы (6)

Определите интерфейс и четко разделите ответственность

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

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

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

Этот подход служит трем целям:

  1. Это должно помочь вам работать вместе более эффективно, четко определяя обязанности и ожидания. Всякий раз, когда он поднимает детали реализации на бэкэнде, укажите, что это не входит в сферу вашего обсуждения.
  2. Вы можете использовать его в качестве основы для обсуждения общих проблем, таких как игровой процесс.
  3. Если вы в конечном итоге пойдете разными путями (и он заберет свой код с собой) или через несколько лет вы заметите, что ваш технический стек действительно недостаточно хорошо масштабируется, вы остаетесь с отдельными функциональными кодовыми базами и можете заменять части по мере необходимости. нужный. О чем вы можете беспокоиться , когда это действительно станет проблемой, вместо того, чтобы тратить время на споры об этом сейчас.

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

Я принимаю это как ответ - это не значит, что другие ответы не помогли - они определенно помогли мне сформировать свой ответ ему. Я поставил ему ультиматум с некоторой свободой, и он согласился. Сейчас мы на верном пути, и обязанности разделены.

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

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

Но что, если другой разработчик был прав?

Пара вещей. Прежде всего: это хобби-проект. Ваш хобби-проект. Другой разработчик был привлечен, чтобы помочь вам с веб-сайтом. Может быть, мне не хватает какой-то информации, но почему он думает, что имеет право голоса в том, что вы делаете со своим проектом? Скорее всего, вы находитесь в процессе обучения, наслаждаясь тем, что вам нравится делать в свободное время (при условии, что вы ходите в школу/работаете). Вы уже потратили 9 месяцев на проект, готовы ли вы выбросить все это в мусорное ведро, перенеся на другие языки, а не разрабатывать новые функции или улучшать вещи? Его предложения намекают на масштабируемость. Я не думаю, что это применимо к такому хобби-проекту, как этот, если вы действительно не планируете достичь большой пользовательской базы.

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

Кроме того, в отличие от того, что предложил БобоДарф в своем ответе, я бы не позволил ему разветвить вашу работу. Опять же, это мое мнение, но этот проект довольно частный и стоил вам много часов (не говоря уже о возможных головных болях). Готовы ли вы позволить другим работать бесплатно со всем, ради чего вы много работали (читай: игра в текущем состоянии)?

Я ожидаю небольшую базу пользователей (менее 1000). Это игра/мод для очень нишевой игры (вспомните нишевые уровни MS Flight Simulator). Я также объяснил ему это - нет смысла перепроектировать мод с открытым исходным кодом, который не нацелен на миллионы пользователей (и даже если бы это было так, платить за инфраструктуру для поддержки такой пользовательской базы из своего кармана стало бы это в работу/карьеру, а не в хобби)
«Я бы не позволил ему раскошелиться на твою работу». - Проект с открытым исходным кодом, автор не может этому помешать.
«За последние несколько дней мы говорили в Discord о том, как объединить нашу работу, и вот тут-то все и разочаровало…» В настоящее время нет работы, которую можно было бы использовать, у другого разработчика все еще есть.

Поблагодарите его за потраченное время и вклад, а затем вежливо, но твердо прекратите сотрудничество.

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

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

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

  • У нас есть абзац с копией/вставкой о том, как они могут отправить запрос на вытягивание, но мы не обязаны принимать его, они не должны предполагать, что мы это сделаем, если это что-то, против чего нет тикета, тогда это маловероятно, что он вообще будет принят, код подчиняется этим правилам качества и т. д. Примерно в половине случаев после этого мы ничего не слышим.

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

  • Почти никто не получает доступ к фиксации. Все остальные участники работают через PR, которые проходят проверку кода, и последнее слово остается за одним из трех постоянных разработчиков (обычно, если они не уверены, что мы примем решение вместе). Решение является окончательным.

Мы кого-то обидели таким образом, или избавились от полезных контрибьюторов/вкладов? Почти наверняка. Но это проект-хобби, поэтому я предпочитаю не увязнуть в придуманных мною дебатах и ​​бюрократии. Если вам нравится взаимодействовать с людьми таким образом и вести эти долгие дебаты о том, лучше ли их идея/подход, и стоит ли переписывать всю систему с нуля, то, во что бы то ни стало, дерзайте. Но если нет, то и не позволяйте себе в это втянуться.

Для других пользователей сначала убедитесь, что принятый ответ работает для OP. Уход должен быть вариантом только тогда, когда вы действительно пытались хотя бы то, что сказал принятый ответ.

Если дело дойдет до драки (а судя по всему, так оно и есть), скажите своему помощнику, что она всегда может разветвить ваш проект, и тогда она сможет использовать все, что захочет, на бэкенде. В противном случае это ваш путь или шоссе. Кажется, люди думают, что разработка программного обеспечения с открытым исходным кодом — это демократия. Это не. Кто-то всегда должен будет сказать «используйте это, а не это» или «мы делаем это так, а не иначе». И на данный момент этим кем-то являетесь вы.

Хороший вопрос, но в вопросе никогда не упоминается открытый исходный код.

Если вы сосредоточитесь, а ваш «друг» или «товарищ по команде» должен создать большую и более вежливую хобби-игру (здесь сосредоточьтесь на хобби), давайте сосредоточимся на лучших функциях, а не на технологиях: что лучше для ваших игроков? Исправлять ошибки/добавлять новые функции или менять технологии?

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

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