Size: a a a

2021 November 18

СА

Сергей Аксёнов... in ctodailychat
Наверное бывают команды, где у CTO есть бизнес-экспертиза, CPO умеет в планирование и косты, а CEO шарит в разработке и инфраструктуре. Но в целом эти позиции разные именно для того, чтобы не искать по рынку людей-оркестров, а поделить функции и зоны ответственности.

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

Y

Yaroslav in ctodailychat
ты сам себе такую выборку создал, но вообще сильных СТО кмк не так много, как хотелось бы
источник

SG

Samat Galimov in ctodailychat
спасибо большое, что поделился! По всем трём пунктам поддерживаю, у меня похожий опыт.

Мы правда у одного из клиентов рискнули и переписываем прямо сейчас довольно большую часть.

Я к тому, что грань между 1 и 3 может быть очень тонкой, и искусство, я думаю, как раз в выборе этой самой «магической части, которую нужно поменять»
источник

SG

Samat Galimov in ctodailychat
И когда ее не видишь — остаётся только фигачить по-частям.

В общем, спасибо большое, прям натолкнул на мысли этим сообщением
источник

Y

Yaroslav in ctodailychat
помоему грань не в искустве выбора, а в принятии рисков на себя и умении отвечать за последствия принятых решений. Человеку из вне проще это делать, потому что для него это другие отношения, чем для внутреннего сотрудника.
Ну и фокус у тебя не размывается, тебя наняли решать одну конкретную задачу, СТО скорее всего разгребает все что есть.

Те ошибки что я видел связаны с тем, что принимая решение "все переписать" люди не пинимают на себя ответственность за последствия этого решения
источник

SG

Samat Galimov in ctodailychat
такое чувство, что я на психотерапевтической группе! про принятие ответственности прям в сердечко
источник

E

Egor in ctodailychat
Моя любимая история - про "гуру"-лида фронтенда, которого я повстречал при аудите азиатского банка.

Я: господа, вы тут мне говорили, что у вас стандартизованный на банк пайплайн CI/CD, что у вас настроены линтеры, коммиты летят в репозиторий, проверяются статик чеками и на стенде, потом сонар, автотесты, код ревью - и в прод.
Но я созвонился с вашим разрабом и у него на половину экрана висит баннер, что у него отъехал линтер, а он даже не понял моего вопроса по этому поводу. Я прогнал ваш проект через еслинт и получил в среднем одну ошибку в каждых 2 строках кода в проекте на 10к строк. Как так?

Гуру: We run static code checks manually. Because if we will run it automatically, everyone will be complaining and no work will be done!

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

MS

Max Syabro in ctodailychat
Ы
источник

MS

Max Syabro in ctodailychat
источник

K

KivApple in ctodailychat
Наглядное демонстрация, что любая метрика производительности труда рано или поздно будет выполнена, но как-то не так как хотел её автор
источник

K

KivApple in ctodailychat
Точно также как идея оценивать производительность программиста по количеству строчек в день)
источник

KN

Konstantin Nosov in ctodailychat
вопрос к знатокам PGSQL, насколько хорошием решением будет использовать view в PG для реализации event streaming?
То есть мы в одну табличку пишем события, как event stream. Далее делаем агрегирующий View и из приложения работаем с ним как ReadState?

create table users
(
   id    uuid default gen_random_uuid() not null
       constraint users_pkey
           primary key,
   name  text                           not null,
   email text                           not null
);

create table profile_events
(
   id          uuid                     default gen_random_uuid() not null
       constraint profile_events_pkey
           primary key,
   userid      uuid                                               not null
       constraint profile_events_userid_fkey
           references users
           on update restrict on delete restrict,
   type        text                                               not null,
   body        jsonb                                              not null,
   inserted_at timestamp with time zone default now()             not null
);

create materialized view profile_view as
WITH t AS (
   SELECT profile_events.id,
          profile_events.userid,
          profile_events.type,
          profile_events.body,
          profile_events.inserted_at,
          row_number()
          OVER (PARTITION BY profile_events.userid, profile_events.type ORDER BY profile_events.inserted_at DESC) AS row_number
   FROM profile_events
)
SELECT t.userid,
      t.type,
      t.body ->> 'name'::text    AS name,
      t.body ->> 'surname'::text AS surname,
      t.inserted_at
FROM t
WHERE t.row_number = 1;


Вот такой минимальный прототип - две таблички и вьюха, которая из евентов реконструирует конечный стейт.
Насколько это вообще плохая идея так делать?
@antonrevyako я один такой странный что хочу получить ACID от ДБ для Event Sourcing или это Common Practice и я о ней просто не знаю?
источник

VI

Vladimir Ivanov in ctodailychat
для ивентов плохая идея, нужно будет постоянно дергать refresh materialized view
источник

KN

Konstantin Nosov in ctodailychat
Можно сделать обычную, не materialized, но тогда чуть страшно конечно
источник

AR

Anton Revyako in ctodailychat
materialized надо обновлять руками. это придется делать по крону. если обновлять из триггера на инсерт, матвью будет сломана.
для твоей задачи есть такое

https://materialize.com/
источник

KN

Konstantin Nosov in ctodailychat
ушел читать
источник

VI

Vladimir Ivanov in ctodailychat
и ещё, внезапно, обслуживать ) недавно попал в такую ситуацию - как раз делали refresh materialized view по cron с concurrently. он ведёт себя примерно как delete и оставляет после себя dead tuples, которые почему-то не очень хотел обслуживать autovacuum. в итоге, когда я это нашел, там их было уже 92% ) вызов без concurrently отработал как vacuum full и всё почистил как надо.
источник

VI

Vladimir Ivanov in ctodailychat
запрос на refresh с concurrently при таком колличестве dead tuples высаживал диск и тормозило примерно всё
источник

G

Grotrek in ctodailychat
Или посмотреть clickhouse, там мат вью сами обновляются при вставке в базовую таблицу
источник

СА

Сергей Аксёнов... in ctodailychat
источник