На прошлой неделе я сосредоточился в первую очередь на бэкенде Cushion. Работая над приложением локально, я понял, что оно стало тормозить — особенно на страницах с большим количеством контента. Я создавал это приложение с мыслью о прогрессе, поэтому я не был так внимателен, как должен был бы. Я слишком часто запрашиваю базу данных и вычисляю результаты на Ruby, тогда как все это можно было бы сделать в базе данных. Из-за этого проблемы с производительностью очевидны.

Например, один запрос для получения списка проектов использует один запрос для проектов, а затем три дополнительных запроса для каждого проекта, чтобы получить сумму его счетов-фактур. С моими текущими личными данными это привело к почти 150 запросам только для того, чтобы вывести мои проекты! Фигово.

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

Освоив PostgreSQL, я понял, как много я могу сделать в базе данных, а не в Ruby — очевидно, гораздо больше, чем я себе представлял. Я начал с того, что сосредоточился на суммах этих счетов — выплаченном доходе, невыплаченном доходе и относительном предполагаемом доходе. С первыми двумя просто — только оплаченные счета и неоплаченные счета — но последний сложнее.

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

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

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

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

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

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

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

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

Для получения дополнительных обновлений подпишитесь на @cushionapp и подпишитесь на рассылку новостей.

Первоначально опубликовано на cushionapp.com.