Przejdź do treści
juz-ide.pl blog
Wróć

Kto widzi treść — decyduje twórca, nie serwer. Jak naprawiałem pętlę, która karała nowych

Paweł G.
6 min czytania
Kto widzi treść — decyduje twórca, nie serwer. Jak naprawiałem pętlę, która karała nowych
Temat Technologia trust-zaufanie

Testując aplikację z perspektywy nowego konta, trafiłem na sytuację: konto zweryfikowane, adres poprawny — ale zero ogłoszeń w okolicy. Nic nie było zepsute. Wszystko działało zgodnie z projektem. To projekt był zły.

Tej wiadomości się przestraszyłem — i dobrze, bo doprowadziła mnie do jednej z głupszych pętli, jakie kiedykolwiek zaprojektowałem we własnym kodzie.

Reguła, która brzmiała rozsądnie

Logika była taka: każdy użytkownik ma „poziom zaufania” — od zera w górę. Im wyższy, tym większy zasięg widoczności ogłoszeń, które dostaje w feedzie. Nowi zaczynają nisko, więc widzą tylko to, co jest bardzo blisko (powiedzmy 500 metrów). Z czasem, jak budują reputację, ich zasięg rośnie — kilometr, dzielnica, miasto.

Brzmi rozsądnie. Nowy nie zostaje zalany całą zawartością miasta na powitanie. Stopniowo dostaje więcej, jak system się przekonuje, że to nie spam-konto.

Problem zacząłem widzieć dopiero, gdy zacząłem prześledzić to z perspektywy osoby, której wiadomość dostałem. Nowy użytkownik widzi 500 metrów. W jego 500 metrach jest pięć ogłoszeń. Pięć ogłoszeń to nie jest powód, żeby codziennie wracać do aplikacji. Po trzech dniach przestaje wracać. Po miesiącu jest wciąż „nowy”, bo nie zdążył się zaangażować — i jego zasięg nadal wynosi 500 metrów.

Pętla domknięta. Im niżej jesteś, tym mniej widzisz. Im mniej widzisz, tym mniej masz okazji, żeby się wciągnąć. Im mniej się wciągasz, tym dłużej zostajesz nisko. Im dłużej zostajesz nisko, tym mniej widzisz.

Najgorsze jest to, że ta pętla działa najmocniej dokładnie tam, gdzie nie powinna: na osobach, które dopiero zbierają odwagę, żeby gdziekolwiek zacząć. Te, które najbardziej potrzebują dowodu, że w okolicy coś się dzieje — żeby uznać, że warto.

Pomylenie ról: kto co kontroluje

Kiedy usiadłem do tego z notesem, znalazłem prosty błąd w samej definicji problemu. Zaufanie miało jedną rolę, a robiło dwie:

Pierwsza rola, słuszna: zaufanie kontroluje, co możesz nadawać. Nowy użytkownik nie powinien móc od razu wystawić ogłoszenia widocznego dla całego miasta — bo nie wiadomo, kim jest, i taka treść z konta-pustki psułaby feed wszystkim innym. Tu zaufanie jest sensowną bramą.

Druga rola, niesłuszna: zaufanie kontrolowało też, co możesz odbierać. Czyli — kto z zewnątrz może do ciebie dotrzeć. A to jest zupełnie inna sprawa. Twoje prawo do bycia odbiorcą sąsiedzkich treści nie zależy od tego, ile ich sam dotąd wytworzyłeś. Każdy mieszkaniec dzielnicy ma prawo zobaczyć, że ktoś jego ulicę dwa numery dalej oddaje fotelik dziecięcy. Niezależnie od tego, jak „nowy” jest w aplikacji.

Te dwie role wyglądały w starym modelu identycznie, bo obsługiwała je ta sama liczba. Stąd pętla.

Mapa z dłonią rysującą okrąg wokół ogłoszenia po lewej, a po prawej pinezka odbiorcy stojąca wewnątrz tego samego kręgu — cienka strzałka między nimi pokazuje przepływ widoczności

Nowy model: twórca rysuje krąg, w którym to żyje

Zamiana okazała się prostsza niż się obawiałem.

Każda treść — ogłoszenie, wydarzenie, prośba o pomoc — ma teraz jeden obszar zasięgu, który ustala się w momencie publikacji. Nazywam to „obszarem docelowym”: koło wokół miejsca, w którym ta rzecz się dzieje, o promieniu zależnym od tego, kim jest twórca i jakiego tier wystawia. Twórca z wysokim zaufaniem może wystawić rzecz dzielnicową albo miejską. Nowy może wystawić tylko lokalną — 500 metrów.

Po wystawieniu — obszar jest zamrożony. Nie zmieni się nigdy, nawet jeśli twórca później awansuje. Treść ma swój własny żywot.

A dla odbiorcy logika jest po prostu „czy twój punkt na mapie trafia w obszary docelowe jakichś treści?”. Bez sprawdzania, kim jesteś. Bez liczenia twojego zaufania. Po prostu — jesteś tutaj, te rzeczy zostały wystawione z myślą o tutaj, więc je widzisz.

Nowy użytkownik, który postawił pinezkę na swojej ulicy w Starachowicach, widzi wszystko, co ktokolwiek wystawił z myślą o jego ulicy, dzielnicy, mieście. Nawet ogłoszenia wystawione miesiąc przed jego rejestracją — bo treść ma swój obszar, niezależnie od dat. Pętla się rozsypała.

Lokalna wymiana ma osobne zasady

Przy okazji wyciągnąłem jeden szczególny typ treści — lokalną wymianę („oddam stół”, „mam za dużo pomidorów”) — z całej tej geometrii. Lokalna wymiana w nowym modelu jest miejska z definicji, niezależnie od tier wystawiającego.

Powód jest produktowy, nie techniczny. Klej społeczny, na którym mi zależy, nie powstaje w odległości 500 metrów. W 500 metrach każdy i tak się zna albo ma tego sąsiada w windzie. Sens zaczyna się tam, gdzie wymiana łączy ludzi, którzy nie znaliby się normalnie — ktoś z drugiego osiedla, kto akurat potrzebuje akurat tego stołu. Skala miasta jest najmniejszą skalą, na której to działa.

To była mała decyzja w kodzie, ale duża decyzja produktowa: niektóre rzeczy nie są kategoryzowane przez ten sam wymiar co reszta, bo robią co innego.

Co z tego zostaje na dłużej

Zaufanie jest podatkiem, który płacisz, gdy chcesz coś nadać. Nie jest opłatą za prawo słuchania. To brzmi banalnie po wytłumaczeniu, ale przez sześć miesięcy miałem dokładnie odwrotną regułę zaszytą w kodzie — i nie zauważyłem tego, dopóki ktoś mi nie napisał „nic nie widzę”.

Najsilniej karzące błędy w produktach społecznych to te, które karzą za sam fakt bycia nowym. Bo każdy istniejący użytkownik kiedyś był nowy. A każdy, kto się odbije od progu, kiedy próbował dołączyć — nie zostawia po sobie raportu z błędu. Po prostu zamyka aplikację i nie wraca.



Poprzedni wpis
Siedem repozytoriów, jedna głowa. Co naprawdę robię w typowym tygodniu
Następny wpis
Skrót, który niszczy model finansowy — i dlaczego go nie wziąłem