Archiwum miesiąca: styczeń 2019

#240 Język korzyści w e-commerce

Zdjęcia i opisy produktów w e-commerce, mają przekonać klienta do zakupu. W handlu elektronicznych sprzedajemy nie tyle sam produkt, ile wyobrażenie o nim. Dla kupującego nie jest on namacalny, nie ma go jak przymierzyć, czy postawić w salonie by sprawdzić jak wygląda. Dlatego tak ważne są dobrej jakości treści, które pozwolą kupującemu zapoznać się z ofertą sklepu i wybrać towar idealnie pasujący do jego potrzeb. Na pomoc sprzedawcy przychodzi język korzyści, którym komunikujemy klientom, jakie cechy mają sprzedawane przez nas towar. Jak wykorzystać taki rodzaj komunikacji? Czytaj dalej

Co siedzi w środku tablic PHP?

Zacznę może od genezy problemu. Pracowałem nad optymalizacją zużycia pamięci w pewnym procesie importu danych, ponieważ pierwsze analizy wskazywały na użycie około 890MB – taka wartość była nie do przyjęcia. Standardowo na pierwszy ogień poszły obiekty DAO na rzecz zwykłych tablic – efektem był spadek do 280MB. Niemniej to nadal zbyt dużo, celem było maksimum 128MB. Analizując cały proces doszedłem do wniosku, że można przyspieszyć trochę proces i pozbyć się sporej ilości pamięci usuwając standardowe wyszukiwanie wierszy przez repozytorium obiektów DAO w zamian budując mini-repozytorim składające się z tablicy par (czyli tablica tablic de facto) [id, source_id]. Pierwsze testy i spore zaskoczenie, bo tak prosta struktura składająca się z około 65000 par zajmowała około 27MB. Poniżej przykład:

<?php

echo number_format(memory_get_usage(), 0, '.', ' ') . "\n";

$a=[];
for ($i=0; $i<65536; $i++)
{
	$a[] = [$i, 2*$i];
}

echo number_format(memory_get_usage(), 0, '.', ' ') . "\n";
echo number_format(memory_get_peak_usage(), 0, '.', ' ') . "\n";

daje w rezultacie:

Jest to wartością dość dużą, niestety. Zrobiłem szybko jeszcze dwa inne testy. Tablica jednowymiarowa z narzuconym indeksem:

<?php

echo number_format(memory_get_usage(), 0, '.', ' ') . "\n";

$a=[];
for ($i=0; $i<65536; $i++)
{
	$a[2*$i] = $i;
}

echo number_format(memory_get_usage(), 0, '.', ' ') . "\n";
echo number_format(memory_get_peak_usage(), 0, '.', ' ') . "\n";

dało w rezultacie:

oraz tablica jednowymiarowa bez narzuconego indeksu:

<?php

echo number_format(memory_get_usage(), 0, '.', ' ') . "\n";

$a=[];
for ($i=0; $i<65536; $i++)
{
	$a[] = $i;
}

echo number_format(memory_get_usage(), 0, '.', ' ') . "\n";
echo number_format(memory_get_peak_usage(), 0, '.', ' ') . "\n";

co dało wynik:

Różnica między drugim i trzecim testem choć znaczna, to i tak jest niewielka w porównaniu do pierwszego testu – zużycie pamięci jest prawie 10 razy mniejsze. Zacząłem się zastanawiać, co takiego tkwi wewnątrz tablic w PHP, że prosta struktura z niewielką ilością danych pochłania kosmiczne ilości pamięci?

Ściągnąłem więc źródła PHP w wersji 7.2.14 i po poszukiwaniach znalazłem powód.

Uwaga! Wszystkie wyliczenia prowadzone są z założeniem kompilacji kodu dla 64-bitowego procesora i systemu operacyjnego: typ long ma 8 bajtów, wskaźniki mają 8 bajtów.

Najpierw należy wyjaśnić, jak PHP wewnętrznie przechowuje zmienne. Zmienne w PHP z definicji nie mają typu, można string traktować jak integer i na odwrót (od PHP 7 mamy TypeHint, ale to jest inny mechanizm). Skąd więc wiadomo jakiego typu jest zmienna? Wewnętrznie odpowiada za to struktura ZVAL (zend_value) i wygląda ona tak:

struct _zval_struct {
	zend_value        value;			/* value */
	union {
		struct {
			ZEND_ENDIAN_LOHI_4(
				zend_uchar    type,			/* active type */
				zend_uchar    type_flags,
				zend_uchar    const_flags,
				zend_uchar    reserved)	    /* call info for EX(This) */
		} v;
		uint32_t type_info;
	} u1;
	union {
		uint32_t     next;                 /* hash collision chain */
		uint32_t     cache_slot;           /* literal cache slot */
		uint32_t     lineno;               /* line number (for ast nodes) */
		uint32_t     num_args;             /* arguments number for EX(This) */
		uint32_t     fe_pos;               /* foreach position */
		uint32_t     fe_iter_idx;          /* foreach iterator index */
		uint32_t     access_flags;         /* class constant access flags */
		uint32_t     property_guard;       /* single property guard */
		uint32_t     extra;                /* not further specified */
	} u2;
};

typedef union _zend_value {
	zend_long         lval;				/* long value */
	double            dval;				/* double value */
	zend_refcounted  *counted;
	zend_string      *str;
	zend_array       *arr;
	zend_object      *obj;
	zend_resource    *res;
	zend_reference   *ref;
	zend_ast_ref     *ast;
	zval             *zv;
	void             *ptr;
	zend_class_entry *ce;
	zend_function    *func;
	struct {
		uint32_t w1;
		uint32_t w2;
	} ww;
} zend_value;

Nie będę dalej rozwijał wszystkich typów, tym bardziej że z ich nazwy można się zorientować, co tam jest. Generalnie struktura zend_value zawiera trzy pola, z których każde jest unią i ma długość:
• value – 8 bajtów
• u1 – 4 bajty
• u2 – 4 bajty

Wynika z tego, że sama struktura opisująca zmienną ma wielkość przynajmniej 16 bajtów, nie licząc wartości samej zmiennej: dla typów całkowitych i zmiennoprzecinkowych będzie to 0 (zero), ponieważ mieszczą się one bezpośrednio w strukturze; dla łańcuchów, tablic, obiektów itp. jest to tyle, ile wynosi rozmiar tej zmiennej – w strukturze jest przechowywany tylko wskaźnik do pamięci zajmowanej przez zmienną.

W naszym przykładzie było około 65000 liczb całkowitych, co daje 1,0MB na same liczby.

No dobrze, ale co w końcu z tymi tablicami? Tablice są opisane inną strukturą, zend_array:

struct _zend_array {
	zend_refcounted_h gc;
	union {
		struct {
			ZEND_ENDIAN_LOHI_4(
				zend_uchar    flags,
				zend_uchar    nApplyCount,
				zend_uchar    nIteratorsCount,
				zend_uchar    consistency)
		} v;
		uint32_t flags;
	} u;
	uint32_t          nTableMask;
	Bucket           *arData;
	uint32_t          nNumUsed;
	uint32_t          nNumOfElements;
	uint32_t          nTableSize;
	uint32_t          nInternalPointer;
	zend_long         nNextFreeElement;
	dtor_func_t       pDestructor;
};


typedef struct _Bucket {
	zval              val;
	zend_ulong        h;                /* hash value (or numeric index)   */
	zend_string      *key;              /* string key or NULL for numerics */
} Bucket;


typedef struct _zend_refcounted_h {
	uint32_t         refcount;			/* reference counter 32-bit */
	union {
		struct {
			ZEND_ENDIAN_LOHI_3(
				zend_uchar    type,
				zend_uchar    flags,    /* used for strings & objects */
				uint16_t      gc_info)  /* keeps GC root number (or 0) and color */
		} v;
		uint32_t type_info;
	} u;
} zend_refcounted_h;

No i tablica okazała się całkiem rozbudowanym tworem. Mamy strukturę zend_refcounted_h z której korzysta GarbageCollector, mamy strukturę Bucket w której są poszczególne elementy tablicy no i w końcu strukturę samej tablicy, gdzie mamy rozmiar, wskaźnik bieżącego elementu itd.

Rozmiary poszczególnych części przedstawiają się następująco:
zend_refcounted_h – 8 bajtów
Bucket – 32 bajty (16 bajtów zval plus 2 pola po 8 bajtów)
zend_array – 56 bajtów (nie będę się tutaj rozpisywał, kto jest chętny może sobie sprawdzić)

Podsumowując: nasza tablica 65536 elementów typu całkowitego (integer) ma rozmiar:
• struktura zend_array: 56 bajtów
• 65536 elementów Bucket zawierających wartości integer: 2 097 120 bajtów

Razem daje to 2 097 176 bajtów, co jest w miarę zgodne z tym, co widzieliśmy w trzecim teście. Jak w takim razie wyglądałyby obliczenia dla pierwszego testu?

• struktura zend_array: 56 bajtów
• 65536 elementów Bucket zawierających tablicę: 2 097 120 bajtów
◦ struktura zend_array: 65536 * 56 bajtów = 3 670 016 bajtów
◦ 2 elementy Bucket zawierające liczby całkowite: 65536 * 2 * 32 bajty = 4 194 304 bajty

Łącznie daje to 9 961 496 bajtów. 10MB pamięci na dane, które w języku C zajęłyby maksymalnie 1MB to dość szokujące odkrycie. Tym bardziej, że podliczyłem same struktury danych, bez uwzględnienia faktu wyrównywania pól w strukturach do granicy 8 bajtów (biorąc to pod uwagę np. struktura zval_struct będzie zajmować w pamięci 24 bajty, nie 16; zend_array 80 bajtów zamiast 56) oraz samego zarządzania pamięcią w PHP, struktur pomocniczych itp.

W porządku, a co z obiektami? Cóż, są równie rozbudowane jak tablice:

struct _zend_object {
	zend_refcounted_h gc;
	uint32_t          handle; // TODO: may be removed ???
	zend_class_entry *ce;
	const zend_object_handlers *handlers;
	HashTable        *properties;
	zval              properties_table[1];
};

HashTable to alias dla zend_array (lepiej wygląda….), reszta jest wskaźnikami lub definicje są przedstawione wyżej, suma rozmiaru wszystkich pól daje 52 bajty (72 bajty uwzględniając memory alignment).

Cóż… Mit tak uwielbianych przeze mnie tablic legł w gruzach, tablice nie są dobre na wszystko i okazuje się, że bardzo łatwo jest naciąć się przy ich używaniu. Natomiast mając na względzie, jak są reprezentowane wewnętrznie w PHP można je efektywnie wykorzystywać – tablica składająca się z tablic o dużej liczbie elementów będących typami prostymi jest nadal jednym z najbardziej efektywnych sposobów przechowywania danych. Przypadek tablicy składającej się z dwu-elementowych tablic daje się na szczęście w prosty sposób zredukować do tablicy jednowymiarowej (indeks to jeden element, wartość to drugi).

Na zakończenie powiem jeszcze, że stosując kilka innych sztuczek (przetwarzanie w małych paczkach, korzystanie niemal wyłącznie z PDO, mini-repozytorium par danych) udało mi się zredukować zużycie pamięci z początkowego 890MB do 20MB; szybkość „przy okazji” też wzrosła z około 10 do 2 minut.

Autorem tekstu jest Łukasz Bugaj.

Modus operandi zespołu kreacji

Rola zespołów zajmujących się wizualną stroną systemów na przestrzeni ostatnich lat ewoluowała. Obecnie skupiają się one na tym, by pomóc użytkownikom zrozumieć w jakim miejscu strony internetowej się znajdują, co ich otacza i czego mogą się spodziewać po dokonaniu konkretnej akcji. Można śmiało powiedzieć, że zespoły te pełnią więc rolę „architektów zrozumienia”.

Zespół kreacji to połączenie kompetencji osób specjalizujących się w kwestiach UX, design oraz frontend. Na przestrzeni lat stworzonych zostało wiele dobrych praktyk w zakresie prezentacji produktów, wyszukiwania, filtrowania, procesu zakupowego oraz nawigacji w sklepie internetowym. Wszystko po to, by strona realizowała swoje cele biznesowe. Głównymi elementami budującymi użyteczność systemu e-commerce są więc:

– nauczalność, określenie poziomu trudności wykonania przez użytkownika prostych zadań przy pierwszym kontakcie z systemem,

– efektywność, czyli szybkość korzystania przez użytkowników z rozwiązań w momencie, gdy są już im one znane,

– zapamiętywalność, czyli łatwość przypomnienia sobie mechanizmów działania system po dłuższej przerwie czasowej,

– błędy, czyli częstotliwość popełniania błędów po stronie użytkowników oraz łatwość ich zażegnania,

– satysfakcja, czyli przyjemność jaką użytkownik odczuwa korzystając z systemu.

Główne metody

W celu stworzenia dobrze zaprojektowanego systemu e-commerce i w oparciu wyżej wymienione elementy, można wyróżnić następujące metody:

– badania na użytkownikach (scenariusze, testy z prowadzącym),

– analiza zachowań użytkowników poprzez narzędzia analityczne, np. Google Analytics,

– organizacja treści w celu wspierania użyteczności. Na tę architekturę informacji składa się: organizacja, sposób grupowania treści, nazewnictwo, nawigacja oraz wyszukiwanie (formułowanie zapytań, które porównywane są z dokumentami relewantnymi we wszystkich zbiorach informacji).

Wszystkie metody oparte są o uniwersalne konceptach projektowania oraz o zasady dotyczące ludzkiej percepcji.

Narzędzia wspierające

Na rynku istnieją dziesiątki narzędzi wspierających pracę architektów informacji. Wśród nich, warto wybrać te najbardziej dopasowane do specyfiki branży docelowej. Wśród wykorzystywanych narzędzi zespołu UX możemy znaleźć:

– papier i ołówek, które posłużą nam do możliwie najszybszej wersji makietowania i przekazywania pomysłów,

– UX Pin, Axure, które pozwolą na makietowanie w bardziej ustrukturyzowanej formie,

– Silverback, umożliwiający przeprowadzenie na użytkownikach testóww formie wideo, według przygotowanego wcześniej scenariusza. W tym przypadku rejestruje się zarówno akcje wykonywane w sklepie internetowym jak i mimikę użytkownika. Taki materiał jest bazą do analizy i umożliwia wprowadzenie ewentualnych usprawnień przez zespół projektowy,

– mapy ciepła, takie jak CrazyEgg i Hotjar które wykorzystywane są w celu zdiagnozowania głównych obszarów zainteresowania użytkowników,

– narzędzia analityczne jak Google Analytics i panel sklepu internetowego pomocne w analizie sprzedaży.

Wszystkie powyższe elementy, w połączeniu z intuicją, doświadczeniem, wiedzą zespołu oraz otwartością na poszukiwanie nowych rozwiązań, sprawiają że „architekci zrozumienia” mogą z sukcesem realizować swoją rolę.

#239 Jak sklepy komunikowały promocje Black Friday 2018

Styczeń to dobry czas na podsumowania. My na tapetę wzięliśmy chyba największą zeszłoroczną akcję promocyjną w polskim e-commerce. Czarny piątek bo o nim będzie mowa, bardziej znany jako Black Friday przypadał w zeszłym roku na dzień 23 listopada. O ile ten rodzaj wyprzedaży jest najbardziej rozpowszechniony w Stanach Zjednoczonych, Kanadzie czy Wielkiej Brytanii to w polskim internecie również nie mogło zabraknąć kultowych wyprzedaży. Czytaj dalej

Podsumowanie Q4 2018 w i-systems

Końcówka roku – gorący czas niemal w każdej firmie. W tych związanych z e-commerce chyba jeszcze bardziej intensywny. Jak to wyglądało w i-systems i jak pogodziliśmy prace na rzecz systemów dla naszych klientów z pracami na rzecz rozwoju produktów? Jakie będą główne aspekty naszej pracy w przyszłym roku? O tym i wielu innych ciekawostkach dowiecie się Państwo z dzisiejszego podsumowania.

Nowe projekty jako wyznaczniki trendów

Ostatnie trzy miesiące, a w zasadzie nawet cały miniony rok, stał pod znakiem systemów dla firm działających w modelu B2B. Otwierają się one na nowe rozwiązania optymalizujące ich pracę i uruchamiające kolejne możliwości sprzedaży produktów. Wśród projektów z sektora B2B, nad którymi pochylaliśmy się w ostatnich trzech miesiącach roku wyróżnić możemy m.in.: system stworzony w standardzie PWA (Progressive Web App) dla ogólnopolskiego dystrybutora zajmującego się sprzedażą produktów i systemów do utrzymania czystości i higieny. PWA pozwala na budowanie spójnej zarówno dla urządzeń mobilnych jak i przeglądarek webowych komunikacji. Jedna aplikacja oznacza więc szereg korzyści – oszczędność czasu zespołu programistów oraz samego klienta, a także pozytywny wpływ na jakość projektu.

Ciekawe dla nas były też realizacje dla firmy oferującej materiały do wykonywania m.in.: systemów dachowych, instalacji nawadniania czy podłóg obiektowych oraz dla firmy zajmującej się importem i dystrybucją sprzętu AGD.

Wygląda na to, że świeżo rozpoczęty rok również będzie stał pod znakiem rozwiązań B2B – już teraz zacieramy ręce na samą myśl o kolejnych wyzwaniach, które na nas czekają.

Strategiczny rozwój organizacji

W minionym kwartale skupiliśmy się też na integracjach, rozwijając przede wszystkim połączenie z systemami takimi jak Asseco Softlab ERP, Streamsoft Verto czy imoje oferowane przez ING Bank Śląski. Kolejne podejmowane przez nas kroki mają na celu jeszcze głębszą integrację, a co za tym idzie,obsługę większej ilości procesów po stronie naszego systemu e-commerce.

W ostatnich miesiącach roku część naszego zespołu można było spotkać na wydarzeniach takich jak VI Forum Retail Channels 360 – Rośnij Wielokanałowo, Web Summit, Forum Szefów Sprzedaży oraz Fashion Business Congress.

Wewnętrzne projekty podnoszące jakość

Przyjęty przez nas i dopracowywany w ostatnim czasie model pracy w zespołach kontekstowych funkcjonuje już w pełni. Obecne zespoły koncentrują się nad obszarami takimi jak: CI, integracje, zamówienia, RMA, CRM, PIM, rabaty, GUI, Shop App, Allegro oraz POS.

Dla lepszego zobrazowania działania tego modelu, zdecydowaliśmy się pokrótce opisać pracę dwóch kontekstów. Zespół Continuous Integration (CI) w ostatnim czasie skupiał się na refaktoryzacji CI-Buildera oraz Kubernetes Buildera, a także na aktualizacji GitLab. Prowadził on również prace nad przyspieszeniem działania systemów oraz ustabilizowaniem obrazów PHP. Działania te spowodowały możliwość przyjmowania dużo większego ruchu. Z kolei zespół odpowiadający za Product Information Management (PIM) usprawnił funkcjonowanie produktów w sklepie, a także skupił się na cennikach, zestawach produktowych oraz ich zaawansowanym sortowaniu.

Więcej o modelu pracy w zespołach kontekstowych można przeczytać na blogu i-systems.

Co czeka i-systems w 2019 roku?

Obszary działalności i-systems w nowym roku podzielić będzie można na dwie, główne kategorie. Pierwszą z nich będzie globalizacja działalności i produktów firmy. Start zaplanowanych działań będzie miał miejsce jeszcze w pierwszym kwartale 2019 roku.

Druga kategoria dotyczyć będzie głównego core i-systems, czyli oprogramowania. Prace nad rozwojem produktów sprawowane są przez wszystkie wyżej wymienione konteksty, dzięki czemu rozwój następować będzie w sposób równoległy i spójny. Wśród najważniejszych, zaplanowanych działań można zaliczyć kolejne prace nad PWA, czyli pracę nad jeszcze większą separacją frontendu i backendu. Taka rozdzielność pozwoli na utworzenie nieosiągalnych dziś możliwości skalowania aplikacji, a za tym osiągnięcie większej wydajności przy mniejszym nakładzie kosztów. W planach jest także m.in.: ukończenie nowego API (CRM) oraz dokończenie nowego modułu polityki rabatowej.

O szczegółach wszystkich prac będziemy na bieżąco informować na blogu. Aby nie pominąć kolejnego podsumowania kluczowych działań w rozwoju i-systems, zapraszamy do zapisania się do newslettera.

#238 Jak przy pomocy własnego portalu budować relację z klientami?

Budowanie relacji z klientami opartej o same kanały social media przypomina trochę stosunki sąsiedzkie na dużym osiedlu. Niby się znamy, mijamy się każdego dnia, poznajemy swoje rytuały i zachowania, ale nie prowadzi to do niczego poza zdawkowym “dzień dobry”. Facebook może być miejscem na rozpoczęcie wspólnych relacji – z tego miejsca możemy łatwo kierować ruch naszych fanów na zewnętrzne strony, które pozwalają prowadzić z klientem dialog, a co najważniejsze w późniejszym okresie wpłynąć na sprzedaż produktów marki. Budując społeczności pokazujemy naszym odbiorcom, że zależy nam na tworzeniu relacji długoterminowych. Dziś kilka przykładów na to, jak można robić to bardzo dobrze.

Z dzisiejszej lekcji dowiesz się:

  • o budowaniu społeczności zaangażowanych w relację z marką
  • o plusach tworzenia własnego community
  • o grywalizacji i jej wpływie na zwiększenie zaangażowania użytkowników

Dlaczego budowanie community jest najlepszą formą utrzymywania relacji z klientem?

Community, to społeczność, grupa osób, która jest blisko marki. O jakiej grupie odbiorców mówimy? Przede wszystkim o osobach, które są połączone jakąś pasją lub cechami charakteru. Mogą to być na przykład młodzi rodzice, gracze konsolowi, rowerzyści wyczynowi, seniorzy mieszkający w jakimś rejonie, nie ma znaczenia. To od marki zależy, na podstawie jakich cech będą chcieli zbudować community. Budowanie własnej społeczności klientów, która nie opiera się tylko na kanałach social media, daje marce przewagę konkurencyjną, a główne zalety takich działań to:

  • oddanie marce oraz lojalność – gdy klienci wchodzą w kontakt z marką, ważne jest to, by dać im miejsce do dialogu – wtedy są bardziej oddani firmie. Wśród nich wyłaniają się ambasadorzy oraz osoby lojalne, które zawsze staną po stronie firmy. Często też dzielą się oni informacjami zdobytymi z portalu;
  • łatwe zbieranie danych, pozyskiwanie pomysłów – społeczności mają to do siebie, że są źródłem wiedzy, jaka przydaje się firmie. Łatwiej i chętniej dzielą się opiniami i pomysłami, które dużo łatwiej jest wykorzystać w działaniu firmy;
  • user-generated content – zaangażowana społeczność potrafi pisać tysiące komentarzy, reagować na posty, pisać własne recenzje produktów itp. To skarbnica treści, z której nie możemy rezygnować;
  • budowanie świadomości marki – dzięki przywiązaniu klientów do społeczności stworzonej przez markę dużo chętniej sięgają oni po inne produkty oferowane przez brand. Przy okazji dużo łatwiej możemy dowiedzieć się tego, jaka jest opinia klientów na temat wybranego produktu;
  • nasi klienci stają się częścią supportu – członkowie społeczności wzajemnie sobie pomagają, czego przykładem może być grupa wsparcia Apple, czy też Microsoft Xbox. Często inni użytkownicy portalu odpowiadają na pytania w pierwszej kolejności. Robią to dlatego, że czują przywiązanie do marki, a poza tym często posiadają wiedzę, która pozwoli naprowadzić nowych odbiorców na odpowiedź.

Facebook i ciągłe zmiany vs. stabilność własnych rozwiązań

Odstawmy na chwilę Facebooka na bok i przyjrzyjmy się społecznościom budowanym na zewnętrznych platformach – i tych prostych, i tych bardziej złożonych – tworzonych przez marki, by przyciągnąć do siebie użytkowników każdego dnia i sprawić, by odwiedzali oni nie tylko profil na Facebooku, ale i przygotowaną specjalnie stronę. Dlaczego o tym piszemy? Z tego powodu, że właśnie te marki, które postawiły na zbudowanie własnych społeczności, mogą mówić o uzyskaniu dużej przewagi nad konkurencją. Wystarczy przyjrzeć się kilku przykładom z zagranicznego i rodzimego rynku.

Wśród ciekawszych można na pewno wyróżnić LEGO IDEAS – portal stworzony dla maniaków i fanów kultowych klocków, na którym można dzielić się nie tylko opiniami, ale także własnymi pomysłami na zestawy, chwalić się stworzonymi projektami, oceniać projekty innych użytkowników (przykład i video pod linkiem). Oczywiście wszystko pod skrzydłami LEGO.

Innym przykładem może być portal Trueachievements, który zrzesza maniaków konsoli Xbox. To tam gracze mogą połączyć swoje profile, śledzić postęp w grach, umawiać się z innymi osobami na rozgrywki, dyskutować o nadchodzących wydarzeniach i premierach. Społeczność ta ma swoje forum, grupy tematyczne, wewnętrzną pocztę. Wszystko po to, by łatwiej i lepiej zdobywać kolejne osiągnięcia.

W Polsce jedną z pierwszych stron firmowych, które postawiły na budowanie relacji z klientami, jest portal Gram.pl. Od początku celem było zrzeszanie graczy, miłośników multimedialnej rozgrywki. Poza newsami z branży pojawiały się na stronie inne informacje z życia wydawnictwa, możliwość rozmowy z pracownikami branży multimedialnej, do dyspozycji użytkowników było również forum. Wprowadzone elementy grywalizacji np. poszukiwania kuponów rabatowych ukrytych na podstronach sprawiało, że na portalu cały czas przebywali fani. Z czasem funkcjonalności się rozrastały. Wprowadzono blogi graczy, powstały nowe działy, a co najważniejsze – sklep internetowy, z którego korzystali zarejestrowani użytkownicy i mieli oni dodatkowe rabaty za bycie częścią społeczności.

Marki mogą osiągnąć dużo lepsze wyniki w budowaniu własnych społeczności, niż ma to miejsce na Facebooku. Własny portal, dopasowany do grupy odbiorców, to nie tylko tworzenie community, ale to nie wszystko. Duże znaczenie w działaniu społeczności ma także user generated content, który wspomaga pozycjonowanie strony.

Każda społeczność jest inna

Powyższe stwierdzenie jest prawdą. Nie możemy mówić o dwóch takich samych grupach osób. Na przykład platforma przygotowana dla Nutricia Medyczna miała być miejscem, które skupia się na osobach, chorych na fenyloketonurię lub mają styczność z tą chorobą. Mowa tu też o rodzicach dzieci chorych na PKU (tak zapisuje się skrót jej nazwy). Stworzenie takiej grupy ludzi na Facebooku mogło być skomplikowane z jednego bardzo ważnego powodu – ludzie mogliby czuć dyskomfort, jeśli musieliby publicznie rozmawiać o schorzeniu swoim lub swoich bliskich. W Polsce jest wiele osób borykających się z tą chorobą i ciężko w tym wypadku mówić o spójnej grupie, gdyż fenyloketonuria dotyka zarówno dzieci, jak i osoby dorosłe i starsze.

To tylko jeden z wielu przykładów. Microsoft skupia graczy, którzy posiadają konsole Xbox w programach dla fanów (np. Rewards), którzy mogą na przygotowanych dla nich stronach rozmawiać z innymi osobami, doradzać im, pomagać rozwiązać problemy. Wzajemne relacje są bardzo ważne w świecie wirtualnej rozrywki, co zauważyły marki już jakiś czas temu. Dlatego Sony oraz Microsoft inwestują w tego typu rozwiązania.

Grywalizacja – element budujący zaangażowanie

Świetnym przykładem na wykorzystanie grywalizacji w społeczności możemy zauważyć na portalu/sklepie muve.pl. Wzbogacenie strony o te elementy, np. zbieranie punktów i osiągnięć wzbudza dodatkową ciekawość osób, które odwiedzają stronę. Punkty zyskuje się za aktywność, na przykład za komentarze, napisanie artykułu, zalogowanie się kilka dni pod rząd. Aby jednak nie wszystko sprowadzało się do samego klikania w „lubię to”, dodatkowe osiągnięcia zachęcają do interakcji ze stroną. Wiele „odznak” nie jest opisanych, przez co członkowie społeczności sami muszą dojść do tego, co należy zrobić, by daną odznakę odblokować. Osiągnięcia i punkty można wymieniać na cyfrowe i fizyczne nagrody, a także można wymienić je na zniżki w sklepie internetowym.

Spójne działania w wielu kanałach

Ważne jest aby utrzymywać wspólną komunikację w każdym z kanałów. Świetnie pokazuje to sklep POPVinyl.pl, który sprzedaje słynne figurki POP. Stworzenie zakładki dla społeczności, gdzie użytkownicy mogą dzielić się swoimi zdjęciami, wzajemnie oglądać, a przy okazji nawiązywać wzajemne relacje. Dodatkowo stworzona na Facebooku grupa pozwala właścicielom w łatwy sposób docierać do klientów i fanów, przedstawiać nowe produkty, czy tez prowadzić outlet, gdzie wyprzedawane są figurki z uszkodzonymi pudełkami. Wyprzedaże takie cieszą się bardzo dużym zainteresowaniem, co widać podczas tego typu akcji.

Jak widać na przedstawionych przykładach budowanie własnych społeczności, to bardzo dobry kierunek, który pokazuje, że nawiązywanie długotrwałych relacji z klientem indywidualnym jest rozwiązaniem przynoszącym korzyści obu stronom. Klienci są bowiem w centrum uwagi marki, a firma ma możliwość prowadzenia z nimi dialogu, co jest bardzo ważne w tworzeniu strategii długofalowej.