Суворов о разработке и управлении
111 subscribers
8 photos
1 video
8 links
Рассказываю о себе, бизнесе, управлению студией и разработке it решений.

Советы о разработке и управлении проектами
Для связи 👉 @navlis23
Download Telegram
Обратить внимание на непонятное.

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

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

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

От ТЗ до сдачи меньше двух месяцев. Работаем хорошо и быстро, заказывайте разработку

https://vk.com/@-124059206-sokratili-vremya-na-podgotovku-smety-s-1-nedeli-do-1-minuty
👍2
Важность базы

Начиная изучать новую тему или область знаний многие новички часто закапываются в деталях, не разобравшись для чего они нужны. Разработчик только стартовавший изучение программирования долго выбирает среду разработки, идеальную ide, настройки линтеров и прочий тулинг. Менеджер изучающий основы управления проектами старательно заучивает принципы скрама, долго читает обсуждения о преимуществах джиры над редмайном, сравнения трелло и асаны, и выбирает себе самые лучшие программы для управления задачами и временем, чтоб уж точно все успевать. Этот подход полностью понятен, ведь хочется все сразу делать "правильно", чтоб все по уму, а в правильном инструментарии видится основное "волшебство", на которое очень удобно положиться.

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

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

Конструктор, интеграции, тг бот и электронные сертификаты в кейсе
https://vk.com/@studio_alt-ne-vsya-tovarka-na-marketpleisah-internet-magazin-utro

А еще ребята делают крутые полотенца и однотонное белье
👍1
Первый факап

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

Спустя годы, я обучил и поработал с громадным числом таких же новичков и по опыту — похожего момента не избежать никому. Чего только не видел: десятки способов убить сервак при настройке там чего-то (rm -rf / на проде не видал, но chown -R user:user / был), десятки способов потерять данные (применение старого бэкапа вместо снятия текущего на прод базу как вам), десятки способов положить сайт (включая как заддосить самим себе бэкенд), и сотни менее критичных плохо сделанных задач. И вот после первых проблем и определяются будущие профи, а нежные снежинки отсеиваются. Ну а так как избежать фиаско не удастся никому, попробую дать совет как себя вести есликогда оно произойдет. Принципы эти помогали работать и двигаться дальше, что на старте пути, что со временем, когда факапы становились сложнее, проявлялись на большей дистанции и меньше зависели от внимательности и наличия бэкапов: плохие решения в выборе технологии или архитектуры, катастрофически недостаточные оценки задач, неверные приоритеты, найм не тех людей.

Итак:
Быстро поднятое не считается упавшим
Возможно вам повезло и все не так плохо, не паникуем и даем себе время на поиск идеального решения. Это время не должно быть большим, счет этого пункта буквально на минуты. Понимаем, что произошло и знаете ли вы 100% метод как вернуть все обратно. Важно, что в этом пункте мы сначала думаем, что случилось и знаем ли мы как это исправлять. Если осознали и действительно знаем - делаем. Если же в решении, всплывающем сходу, мы не уверены — не торопитесь и переходите к дальнейшим пунктам, всегда есть шанс сделать хуже.

Сообщаем о проблеме
Тут спокойно, не ошибается только тот, кто ничего не делает, от заламывания рук проще не будет. Если вы работаете не один и есть руководство — идем в первую очередь к нему подробно докладывать о ситуации. Что сделали, что произошло, на какой стадии сейчас, какие решения уже знаете, что не подойдут. Есть шанс получить помощь, вдруг идеальное решение все же есть, просто вы его не видите. Шаг не приятен, кто-то может среагировать не так мягко, как хотелось бы — его право, не принимайте на личный счет. Не переходим в защиту, признаем ошибку, напоминаем что нужна помощь с исправлением.
Если вы отчитываетесь напрямую перед клиентом, и руководство в курсе — здесь же оглашаем проблему клиенту. Пока без деталей, так как полного понимания их у нас еще нет, но о том что проблема есть и мы уже ищем ее решение — сказать надо как можно быстрее.

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

Учимся на ошибках
В итоге даже самые дикие проблемы разрешаются. Важно сделать для себя разбор: что случилось, почему, что сделать чтоб этого избежать, чего не хватало, что делать на будущее? Ответив на эти вопросы себе, оформляем постмортем для клиента формата: проблема была в Х, причиной стала ошибка, чтоб этого больше не произошло мы сделаем Y, а также Z для страховки на случай подобного.
Конечно, неизбежность фейлов не значит, что не стоит их избегать заранее. Наоборот, опыт ошибок научит делать все, чтоб когда они случились — то не стали катастрофой.
💯1
Хороший программист

Услышал недавно в оживленном обсуждении опус, мол в России хороших программистов нету. И хоть обсуждать столь очевидно неверное заявление нет никакого смысла, однако оно натолкнуло на мысль, а как определять термин "хороший программист". Проще и правильнее судить по факту сделанного, успешным проектам не загнувшимся от техдолга и нагрузок, но успех проектов зависит не только от отдельно взятого кодера. Потому задумался, кто для меня "хороший программист" и попытался составить набор критериев, таких, чтобы можно было при найме понять, что программист — хороший, а новичкам узнать на что обратить внимание:

- Начнем с очевидного: хороший программист наверное пишет "хороший код", но прежде чем разбирать, какой именно код хороший, отмечу, что для начала "программист пишет код". Тоесть при найме ему есть, что показать из примеров, и не в лом если что написать десяток строк. Замечу, что абсолютное большинство новичков приходивших ко мне на собесы после тех или иных курсов, приносили из примеров просто дипломную работу с этих же курсов, ну и максимум обрывки дз (а люди приходившие после вуза — вообще ничего). Не надо так. Проблема новичков это отсутствие практики, так что если в вашем резюме нету пары лет опыта работы — напишите что-то свое, придумайте себе еще задачу и решите ее

- Окей, код программист пишет, что же делает этот код хорошим? Во-первых он должен решать свою задачу, причем во всех кейсах. А случаи, когда выполнить задачу нельзя, код должен проверять и обрабатывать. Тоесть код работает не только когда "все хорошо", но и когда ему на вход посылают какую то чушь, или данных слишком много, или данные какие-то особенные и тд. Все варианты должны быть продуманы, обработаны и конечно протестированы. Во-вторых код должен решать задачу адекватно по времени и ресурсам. Проблемы оптимизации слабо известны новичкам, так как обычно вскрываются только в реальных условиях нагрузок. Но вы вполне можете сгенерировать хотя бы несколько десятков тысяч записей в ваши таблицы с данными. Уже тогда многие плохие методы, вроде получения связных данных в цикле или попытки запихнуть много данных в один массив сходу — всплывут и будет понятно с чем сражаться. В-третьих с любым коммерческим кодом работа будет продолжаться, а требования меняться. И не всегда код менять будете вы. Потому хороший код должен быть понятным и гибким к изменениям. От чего зависит понятность кода и какие принципы тут нужны это большой вопрос, который я распишу отдельно, но как первый совет новичкам: обращайте внимание на понятные названия переменных (что хранится?) и функций (что делает?), убирайте лишние вложенности кода, используйте примеры и подходы из официальной документации (одну и ту же задачу можно сделать кучей методов, но общепринятый не надо никому объяснять) и пишите комментарии, если чувствуете, что кодите сейчас костыль (вот прям на русском пишите для начала)

- Неплохо, человек пишет хороший код. Хватает ли этого? В коммерческой разработке нет. От этого кода зависят другие части проекта, и у любой задачи в реальном мире будет срок и бюджет. Потому хороший разработчик умеет в оценки задач и коммуникацию. Понятно, что ясновидящих не бывает, и всегда 100% давать верные сроки — навык уже не хороших, а исключительных разработчиков, но сообщать о том, что ситуация поменялась и ранее названные сроки нереалистичны — доступно каждому, хотя на деле далеко не каждый это делает. Потому навык отслеживать затрачиваемые ресурсы, и как можно заранее сообщать о том, что прогноз был неверен, и надо смещать объем/срок настолько-то — выделит вас среди ребят "будет, когда будет". Коммерческая разработка это командная игра, и кроме коммуникации по статусам и срокам, нужно уметь и критику принять, и о помощи попросить вовремя. Лучшие по результатам разработчики с которыми я работал всегда задавали в разы больше вопросов и делились проблемами с которыми сталкиваются, чем остальные.

- Отлично, наш программист пишет хороший код, делает это в предсказуемый срок, и хорошо взаимодействует с командой. Чего еще для счастья надо? Предлагайте варианты
👍3
0.1 + 0.2 != 0.3

За годы работы с начинающими кодерами мне приходилось давать мини-разъяснения на некоторые темы удивительно регулярно. И думаю будет не лишним постепенно собрать эти отрывки сюда для будующих случаев.

Итак начнем с простого: арифметика чисел с плавающей точкой. В теории мемасы о том, что js странный и смотрите ха-ха-ха 0.1+0.2 выдает 0.30000000000000004 видали многие. Однако на деле из новичков учитывают этот факт — единицы. И еще меньше знает, что такая особенность далеко не только у js. Попробуйте python — получите тоже самое. Попробуйте php — может показаться, что все ок, но он вас обманывает.
echo 0.1+0.2;
выдаст вам 0.3, но попробуйте
var_dump(0.1+0.2 == 0.3);
или
echo json_encode(0.1+0.2);
и ошибка вскроется. Если что ошибка далеко не только на сложении 0.1 и 0.2, она будет почти при любых вычислениях с дробными типами данных

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

Решение тут простое, точнее даже два. Для начала убедитесь, что вам действительно нужны числа с плавающей точкой. Например во всех случаях когда речь о деньгах — скорее всего их можно вполне хранить в int считая не число рублей, а число копеек. Тоесть, нужно хранить не цену 100.00 рублей, а целочисленное 10000 копеек. И ставите точку там где нужно только при итоговом выводе результатов. Ну, а если вам все же позарез надо хранить и считать во float — то во всех языках есть готовые инструменты для точных вычислений с ними. Обратите внимание на BigNumber в случае js или на функции bcmath в случае php
👍2
ChatGPT и программирование

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

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

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

Так что важно не расслабляться, и проверять/допиливать результаты работы ИИ всегда. Если же в вопросе у вас не хватает компетенций понять не дичь ли вам несет ИИ — обязательно прежде чем тратить свое время попробуйте найти второе мнение у более опытных товарищей
🔥5👍1
Опять классика вопросов для обсуждения с начинающими кодерами - локальное время и таймстампы

Одним из моих первых проектов было небольшое приложение для связи контрагентов из разных частей мира — соответственно с разными часовыми поясами. Оно проверяло календари собеседников, собирало общие свободные слоты с учетом рабочего времени у обоих и выводило их им каждому в его локальном времени. Задача относительно несложная, но потребовала сразу разобраться в тонкостях хранения и работы со временем. Когда в один и тот же момент времени у одного пользователя 7 утра, а у другого 17 вечера.

Итак первое с чем надо разобраться, наш самый главный друг в вопросах времени, вносящий необходимое постоянство — unix timestamp. Таймстамп — количество секунд прошедших с момента времени, когда 1 января 1970 года часы в Гринвиче показали 00:00. Не с того момента когда часы в вашем регионе показали полночь, а когда они показали полночь именно в Гринвиче. А так как этот момент был одновременно для всего земного шара, то и таймстамп в один момент времени по всей Земле — одинаковый. Тоесть если человек в Москве у которого часы показывают 8 часов, и человек во Владивостоке у которого в этот же момент часы показывают 15 получат текущий таймстамп — то они получат одинаковые числа, несмотря на разное время "на стене".

Получить таймстамп можно в любом ЯП:
new Date().getTime()
в js — он правда вернет кол-во миллисекунд, тоесть в 1000 раз больше значение, чем например
time()
в php.
Именно таймстамп проще всего сохранять и работать с ним, когда пытаемся говорить о времени, и далее разберем почему.

"Время на стене" же постоянно у всех разное. Причем на это влияют не только более менее понятные географические часовые пояса, но еще и местные законы и договоренности людей. Где-то есть переход на летнее время, где-то нету. Где-то люди договорились, что их время будет по другому часовому поясу, а потом могут передоговориться и вернуть назад (привет Новосибирск). Короче полная неразбериха. В общем случае ко времени на стене указывают его смещение относительно Гринвича, например UTC+3 — тоесть мол время на 3 часа больше, чем в этот же момент в Гринвиче. Но обозначенные выше ситуации создают кучу примеров когда у человека в течение времени смещение может сменяться — что крайне неудобно. Пытаться переводить время записанное со смещением во время в других местах иногда даже неразрешимая задача. Например если в регионе есть переход на летнее время, то когда часы переводят назад (например с 3 на 2), возникает ситуация когда к примеру время 2:30 наступает дважды. Хранением всех этих нюансов таймзон и переводов времени занимается tz database поддерживаемая и наполняемая волонтерами и поставляемая в операционные системы. Но это особо и не важно, сохранять локальное время в любом случае не стоит, ведь есть путь намного проще.

Фишка в том, что если нам нужно сохранить какой то момент времени (время создания записи в бд, или момент времени в который надо выполнить задачу) — используйте timestamp. Для него вам не надо спрашивать из какого часового пояса к вам обращается клиент. При том таймстамп когда вы его отдадите на фронтенд, каждый клиент может 100% перевести в его локальное время, простейшей функцией
new Date(1710178886146)
к примеру для js. Так бэк будет не заморачиваться и отдавать всем клиентам инфу в одном и том же формате, а фронтенды сами отобразят результат в своем локальном времени.
👍3🔥31
Внезапно пост о спорте

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

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

Ну, а если вам, как и мне когда-то абсолютно не понятно, что в этом вашем зале делать — моя жена набирает клиентов на онлайн/оффлайн ведение, пишите

https://vk.com/nuxe_s
https://www.instagram.com/nuxe.s
https://t.me/nuxe_s
🔥10👍1
Немного об оценке задач

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

Все методы оценок начинаются с одних и тех же 3 принципов, потому в любом случае, приняты ли у вас сторипойнты, или часы, важные основы тут остаются одинаковыми. Итак:
1) Любая большая и непонятная задача дробится на подзадачи. Которые в идеале, понятные, обозримые в пределах пары рабочих дней, или типовые/встречавшиеся ранее. Сказать обычно легче, чем сделать, но тем не менее стоит попытаться. Попытайтесь для начала разбить задачи общего описания на чеклист "какие вещи должны работать, чтоб задача была выполнена". Тоесть не "интеграция с 1с", а "отправка созданных заказов в 1с", "импорт товаров из архива от 1с", "импорт клиентов из 1с". У каждой задачи поприкиньте как бы вы ее проверяли, если кейсов для базовой проверки всего пара-тройка штук — значит подпункт получился достаточ детальным, если же проверка будет состоять из кучи разных по логике и структуре вещей - стоит еще подробить.

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

3) И самое главное, навык оценки задач в первую очередь зависит от опыта и насмотренности. Но только при условии "сверки с реальностью". Естественно, никто из новичков не может нормально оценивать задачи. По сути у всех первые оценки ничем не отличаются от генератора случайных чисел — и это нормально. Но если их не сверять с реальностью — то навык и не растет. Часто бывают случаи, когда новичок говорит "3 дня на задачу", через три дня задача не сделана, но его никто не пинает (ну потому что ктож поверит в оценки новичка), через день он ее как-то сдает, и еще 3 дня вносит правки и доработки. Это абсолютная норма. Но когда ему выдают следующую почти один в один задачу, и он не моргув глазом отвечает "3 дня" — вот это уже проблема. Поэтому отслеживайте правильность своих оценок, если дали оценку в 3 дня, и на третий день понятно уже, что явно не успеете — сообщите об этом, и себе пометьте что оценка была неадекватна. И по итогу задачи, вместе со всеми тестами, правками и доработками отмерьте реальное время ее выполнения (тоесть в примере это 7 дней, а не 4) — это будет ваш ориентир на следующую подобную. Понятно, что пока вы новичок, скорее всего вы успеете во второй раз сделать задачу побыстрее. Но ровно это вам и необходимо: если ваше фактическое выполнение равно 70% от вашей оценки, все в порядке. И только если еще быстрее — тогда уже пора понять, что вы выросли и уменьшать запасы.

Кстати все эти пункты, в особенности 3ий относятся и к менеджерам. Необязательно быть разработчиком, для того чтоб делать ретроспективы прошедших задач, и развивать насмотренность, особенно в рамках одного проекта/команды
👍81🔥1
Задачки по программированию

Надо ли коммерческому программисту знать алгоритмы и структуры данных? Поможет ли в работе опыт спортивного кодинга? В целом — напрямую нет. Коммерческий код сильно отличается от олимпиадного, в нем бОльшее место занимают вопросы поддерживаемости, вообще необходимости определенных фич и их влияния на бизнес логику, читаемости кода, организации. Хороший олимпиадный программист совсем не обязательно будет хорошим коммерческим кодером. Ведь в задачах на алгоритмы не принято обсуждать условия, а все что нужно сделать единожды написать решение, не заботясь о поддерживаемости и читаемости. А хороший же коммерческий кодер получив задачу в первую очередь разбирает ее, задает вопросы по ней, может предложить вообще сделать немного другую задачу — и это правильно. Да и необходимые по ходу дела стандартные алгоритмы вшиты в фреймворки и библиотеки, которые должен уметь использовать коммерческий кодер.

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

Поэтому если вы начинаете свой путь в программировании, важно понимать, что да, в коммерческой разработке важны немного другие вещи нежели в спортивном кодинге. И важно писать и собственные пет-проекты похожие на проекты реального мира (на 99% состоящие из скучных запросов к бд и сторонним апи). Но безусловно полезно, в качестве фитнеса для мозга, и набития руки зарегаться на codewars и leetcode и допроходить хотя бы до medium уровня
🔥3🌚2👨‍💻2
Требуются разработчики

Открыты пара мест для начинающих (и не только) веб-разработчиков.

Что делаем:
В основном кастомная веб/мобильная разработка. Некоробочные решения на фреймворках, в основном пишем на laravel + react/vue. Немного реже node.js, совсем изредка python, но при желании изучить дополнительные технологии — найдем где с пользой применить знания. Разрабатываем решения для екоммерца, финтеха, веб-сервисы для стартапов, системы учета и аналитики, интеграции, автоматизации процессов.

Кто нужен:
Ищем разработчиков разного уровня, ты либо уже опытный фуллстэк (предпочтительнее laravel+react), либо было бы интересно им когда-нибудь стать. Рассматриваем студентов и джунов, необходимо будет (если всего списка пока нет, но есть желание освоить - все равно пишите):
- написание api бэкенда. роутинг, mvc архитектура, crud операции, валидация запросов, аутентификация и авторизация
- базовые навыки верстки, простой фронтенд на js (ajax запросы), в идеале знакомство с react/vue
- работа с бд, как использование orm так и написание raw запросов
Тоесть в целом готовы начинать работать и прокачивать людей с уровня "могу написать todo-приложение"

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

Отклики и вопросы — пишите @navlis23, по возможности прикладывайте гитхаб с примерами любого кода и описывайте свой опыт в программировании
👍11🔥21
Арсенал инструментов менеджера

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

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

Что может помочь, а в идеале все вместе:
1) Ретроспективы. Задним числом мы все умнее всех, и это вполне можно использовать с пользой, а не только раздражаться от очередного умника рассказывающего о том "как же ты не догадался"). Потому после любых факапов, авралов, сдач проектов или этапов полезно подумать самому задним числом и понять, что можно было сделать, чтоб все возможно случилось лучше - обычно постфактум понимание вариантов всегда приходит, и важно обратить на них внимание, чтоб возможно использовать в будущем. Если осознанную ретроспективу не провести - опыт закрепится намного хуже. Важно, впрочем, не заморачиваться слишком сильно, и не ловить дизмораль, даже если найденное решение покажется очень простым. Ведь таким оно кажется только когда уже знаем итог, да и то что оно бы помогло - лишь предположение.

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

3) Чужой опыт. Хоть поговорка и говорит, что учиться намного лучше на чужик ошибках, по факту же большинство вещей все равно действительно доходит, только когда сам столкнешься и "проживешь". Однако, действительно сильно проще если до этого нас хотя бы предупредили как оно будет, адаптация пройдет проще, да и варианты возможных решений уже будут известны. Потому не забываем кроме личного опыта обращать внимание на чужие кейсы, выступления, работы. Книжки опять же можно почитать, в качестве рекомендации новичку к примеру: Питера Друкер «Эффективный руководитель»
💯6🔥51
Задачи не высечены в камне

Что обычно бывает когда нам прилетает новая задача от руководства или клиента? Вот нам скинули ТЗ или описали требования — в хорошем случае мы даже позадавали вопросы, и предположим даже, хоть как-то убедились в том, что верно все поняли и имелось в виду именно это. Ну и пошли делать, все просто. Но дьявол в мелочах, в большинстве случаев все будет ок, вот только та малая часть задач на которых "что-то пошло не так" легко сожрет большую часть времени и нервов. Я сам сотни раз тратил кучу ресурсов и сил "совершая подвиги" и доводя задачи ровно как было сказано, хоть и по ходу выполнения оказывалось, что это проблемно, сложно, и даже есть не сильно отличающиеся варианты в разы проще (но не они же обсуждались). Может иногда это и оправдано, но чаще - эти подвиги нафиг никому не нужны и не дают ничего хорошего.

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

Так что не забывайте, задачи не высечены в камне, и если видите путь который будет проще, или кажется логичнее, его можно и нужно обсуждать и предлагать, в худшем случае — получите информацию почему конкретно такой вариант хуже и будете лучше понимать клиента, а в лучшем сделаете продукт качественнее, ведь тот кто ставит задачу, может не знать и не подумать о вариантах решений, которые вы нашли по ходу выполнения.
👍4🔥4💯4
Понедельник был день тяжелый

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

Плохого и откровенно тяжелого хватало, как и у всех, но об этом наверное ближе к итогам (байт на подписку, я знаю такое нравится), а пока больше о хорошем:
- Организационно в плане бизнеса план на следующий год сформировался, впереди наконец айти аккредитация и много чего еще. Часть процессов впрочем уже начато реализовываться. Дальше в постах буду освещать иногда и эти моменты, подписывайтесь, как говорится)
- У бизнеса появилось финпланирование и какие-то даже резервные и свободные деньги. Это действительно приятное чувство, когда в случае проблем, чтоб выплачивать зп тебе не надо лезть в свой личный карман. Настроены первые фонды, появляется первая аналитика. Спасибо Саше, разница в работе с операционным директором на лицо. Будет приятно настроить автоматизации уже для себя, когда видна польза это действительно другое дело
- В этом году открыл новое направление: провел несколько платных обучений, платное менторство, пока что бесплатные лекции. Еще не решил буду ли в следующем году продолжать и масштабировать это направление, но то, что в принципе не загнулось и что-то получилось - относится к хорошему
- Почти месяц хожу чипированный и доволен. Кто не в курсе, у меня диабет первого типа, контроль сахара в крови необходимая для меня штука. Кучу лет до этого для этого я прокалывал себе палец в среднем 3-5 раз в день и использовал тест-полоски, вроде ок, и цена расходников не так кусается. Теперь цена вопроса почти в 10 раз больше, но на себе убедился насколько же постоянный мониторинг круче. Долго все никак не собирался, да и не попробовав — разница кажется не такой уж и ощутимой и важной, а вот разница в цене ощутима сразу. Но один раз попробовав, вопросы к цене отпали, буду видимо ходить со встроенной в руку блямбой и радоваться, несмотря на затрачиваемые деньги

Так что если думаете стоит ли настраивать аналитики и мониторинги себе в проекты, рекомендация от меня — безусловно да, обращайтесь к нам разработаем все для этого:)
🔥11🤝43👍1
Итак, успешно начались рабочие будни, салаты доедены, просекко допито. Хорошее время подвести итоги прошлого года и наметить хотя бы широкими мазками планы на текущий, так сказать отдохнув и в более спокойной обстановке, чем в суматошном декабре

Итоги 24го🎄
1. Женился вообще то. Тут без сюрпризов, наконец узаконены и так проверенные временем отношения. Особых изменений от нового статуса отмечено не было, но как минимум приятно будет иметь повод отмечать годовщины например.

2. Командой суммарно отработано что-то в районе 15 тысяч рабочих часов по 50 проектам если я нигде не обсчитался. На самом деле не так и много, но нагруз ощущался значительно большим. А значит определенно начатые изменения в организации процессов необходимы и нужно их продолжать и ускорять. Тем не менее ни один проект не завален, было сделано много крутых продуктов и серьезных технических решений. И если вспомнить за год, то становится даже немного невероятно, какое разнообразие нестандартных, сложных и объемных вещей было успешно реализовано в рамках одного года. Горжусь командой ну и собой конечно

3. Устал и в полной мере ощутил, что энергии уже не как в 25. И как ни странно это даже к лучшему. Проблемы бывали и будут всегда, но до прошедшего года они всегда решались методом "заткнуть собой амбразуры". Что-то шло не так - всегда можно поработать в два раза больше, паралельно продавая, контролируя разработку того что уже есть, где-то успевая покодить что-то самому чтоб "меньше расходов при производстве", и нанимая людей в доп проекты до кучи. В этом году понял, что больше так не потяну. Сначала немного расстроился, потом понял, что просто был дураком. Пока энергии хоть отбавляй - и мыслей не было решить проблемы системные, сделать что-то иначе, разобраться, принять тяжелые, но необходимые решения в конце концов. Все просто бралось собственными ресурсами и работало на этом. Очень рад, что осознание пришло сейчас, а не еще позже. Начался процесс именно настройки процессов, глобальных изменений в компании и работе в целом. Мыслей, что все обустроится само собой если продолжать делать тоже, что делали всегда - больше не осталось. Ну и внезапно, как ни парадоксально, и энергии от этого вдруг откуда то обратно прибавилось.

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

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

Планы 25го 🗓
Всего тут конечно не отписать, планов действительно много, хорошо бы успеть половину, отмечу только пару основных рабочих моментов на которых будет фокус:
- IT аккредитация компании и усиление работы с кадрами. Систематизация найма, усиление внутренних обучений. Одновременно с усилением отбора на первоначальных этапах
- Контент и маркетинг, всю дорогу это самое слабое место компании - будем учиться и делать-делать-делать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍3❤‍🔥2😎21
Преждевременная оптимизация

Излишний перфекционизм при изучении нового дела — часто вредит. Пытаясь сделать "идеально", ты решаешь несуществующие проблемы, которые сам же придумываешь, и тратишь время на обдумывание тысячи вариантов, что может еще пригодиться, не имея опыта о том, что из этого разумно, а о чем можно пока не переживать. Да и настоящие проблемы, не обладая опытом часто представляешь неверно, и в половине случаев "решая" проблему идешь не туда. В худшем случае, пытаясь сделать "лучше всех" (хоть и делаешь первый раз), можно и вовсе не доделать никак, погрязнув в изучении "лучших практик" и сравнивая достоинства и недостатки вариантов, которые ты все равно не понимаешь в силу отсутствия набитых шишек. Ну или просто потратить кучу лишних сил и времени, а сделать сомнительную фигню хоть и из самых лучших побуждений. 

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

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

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

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

4) Дорогу осилит идущий, не пугайтесь незнакомого и объемного — пошагово и планомерно выполняйте подзадачи, выбирая в первую очередь простые и понятные решения. Документируйте свой код и учитесь формулировать отчеты о проблемах и обоснования выбранных решений — правильно заданный вопрос, уже половина ответа. А изящные решения, лучшие практики и идеальная архитектура придут с опытом, не волнуйтесь
💯4🔥32👍21
Сапожник без сапог

Я делаю скрипты автоматизации кучу лет, от браузерных расширений в помощь менеджерам листающим доски объявлений, до автоматических бэкенд ботов или сложных erp систем. А вот внутренние решения в студии не приживались. Попытки написать скрипты чтоб какие-то циферки брались из одного место и красиво собирались и подсвечивались в другом конечно были и с точки зрения разработки вопросов не возникало. Однако по итогу не использовались, не несли ценности и быстро забрасывались. И на самом деле понятно почему. Нет смысла автоматизировать что-то, что вы без автоматизации не стали бы делать вручную. Нет смысла делать автоматизацию там, где нет собственно процесса. Конечно какие-то разовые скрипты вроде спарсить базу клиентов, настроить уведомления во время рекламы или чего-то такого писались и приносили пользу, но именно под разовые необходимости. А какой-либо автоматизации процессов не было, и проблема тут простая — просто не было самих процессов требующих автоматизации, в них не чувствовалось нужды.

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

Так что очень удобно, что и сам не забываю как пишется код и не отвлекая разрабов с клиентских проектов могу написать пару инструментов на коленке и разгрузить время и силы руководства. Ведь когда высококвалифицированный персонал начинает тратить слишком много времени на заполнение эксель табличек - это уже становится больно и вот тут автоматизация быстро себя окупит. Так что если у вас есть такое же: менеджеры делают рутинные действия составляя десятки смет, руководители каждую неделю собирают по табличкам расходы и доходы по проектам, или пытаются не потерять инфу по клиентам в море экселек — обращайтесь, пошагово упростим ручной труд, освободим силы и тем самым сэкономим деньги
🔥7👍32🤝21
С чем работаем еженедельно

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

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

А такое поведение, несмотря на удобство для пользователя и долю новшества, по уму будет требовать подключения к проекту веб-сокетов, либо постоянного опроса по таймеру запросами сервера, что далеко не всегда ок. В нашем случае, так как мы пилили соцсеть, веб-сокеты естественно нужны и так, так что все сделали в лучшем виде. Но вот если бы нет? Только ради аутентификации в типовом проекте заводить на бэкенд и фронтенд сокеты? Звучит спорно. Так что проектируй мы эту историю — включили бы настраиваемую опцию всегда запрашивать именно смс/звонок, чтоб внедрять в проекты попроще было бы привычно. Ну, а для нас получился мини кейс с входом на сайт без ввода кода, а просто с подтверждением в смартфоне, мелочь, а приятно.
🔥5👍32👏2