Druga Droga Przed Nami
Wrzesień 2001
(Ten artykuł wyjaśnia, dlaczego znaczna część oprogramowania następnej generacji może być oparta na serwerach, co będzie oznaczać dla programistów i dlaczego ten nowy rodzaj oprogramowania stanowi wielką szansę dla startupów. Jest on oparty na wykładzie w BBN Labs.)
W lecie 1995 roku mój przyjaciel Robert Morris i ja postanowiliśmy założyć startup. Kampania PR poprzedzająca IPO Netscape była wtedy w pełnym rozkwicie, a w prasie dużo mówiło się o handlu internetowym. W tamtym czasie w sieci mogło istnieć około trzydziestu faktycznych sklepów, wszystkie stworzone ręcznie. Jeśli miało powstać wiele sklepów internetowych, potrzebne było oprogramowanie do ich tworzenia, więc postanowiliśmy je napisać.
Przez pierwszy tydzień lub około tego zamierzaliśmy zrobić z tego zwykłą aplikację desktopową. Potem pewnego dnia wpadliśmy na pomysł, aby oprogramowanie działało na naszym serwerze WWW, używając przeglądarki jako interfejsu. Spróbowaliśmy przepisać oprogramowanie, aby działało przez sieć, i było jasne, że to jest droga, którą należy podążać. Jeśli napisaliśmy nasze oprogramowanie tak, aby działało na serwerze, byłoby to znacznie łatwiejsze dla użytkowników i dla nas również.
Okazało się to dobrym planem. Teraz, jako Yahoo Store, to oprogramowanie jest najpopularniejszym kreatorem sklepów internetowych, z około 14 000 użytkowników.
Kiedy zaczynaliśmy Viaweb, prawie nikt nie rozumiał, co mamy na myśli, mówiąc, że oprogramowanie działa na serwerze. Dopiero gdy rok później uruchomiono Hotmail, ludzie zaczęli to rozumieć. Teraz wszyscy wiedzą, że jest to wykonalne podejście. Jest już nazwa dla tego, czym byliśmy: Application Service Provider, czyli ASP.
Myślę, że wiele oprogramowania następnej generacji zostanie napisane w tym modelu. Nawet Microsoft, który ma najwięcej do stracenia, wydaje się dostrzegać nieuchronność przeniesienia niektórych rzeczy z pulpitu. Jeśli oprogramowanie przeniesie się z pulpitu na serwery, będzie to oznaczać bardzo inny świat dla programistów. Ten artykuł opisuje zaskakujące rzeczy, które widzieliśmy, będąc jednymi z pierwszych gości w tym nowym świecie. W takim zakresie, w jakim oprogramowanie przeniesie się na serwery, to, co tutaj opisuję, jest przyszłością.
Następna Rzecz?
Kiedy spojrzymy wstecz na erę oprogramowania desktopowego, myślę, że będziemy zdumieni niedogodnościami, na które ludzie się godzili, tak jak teraz jesteśmy zdumieni tym, na co godzili się pierwsi właściciele samochodów. Przez pierwsze dwadzieścia lub trzydzieści lat, aby posiadać samochód, trzeba było być ekspertem samochodowym. Ale samochody były tak dużym udogodnieniem, że wiele osób, które nie były ekspertami samochodowymi, również chciało je mieć.
Komputery są teraz w tej fazie. Kiedy posiadasz komputer stacjonarny, kończysz ucząc się znacznie więcej, niż chciałeś wiedzieć o tym, co się w nim dzieje. Ale ponad połowa gospodarstw domowych w USA je posiada. Moja matka ma komputer, którego używa do poczty elektronicznej i prowadzenia księgowości. Około rok temu była zaniepokojona, otrzymując list od Apple, oferujący jej zniżkę na nową wersję systemu operacyjnego. Coś jest nie tak, gdy sześćdziesięciopięcioletnia kobieta, która chce używać komputera do poczty elektronicznej i księgowości, musi myśleć o instalowaniu nowych systemów operacyjnych. Zwykli użytkownicy nie powinni nawet znać słowa „system operacyjny”, a co dopiero „sterownik urządzenia” czy „łatka”.
Istnieje teraz inny sposób dostarczania oprogramowania, który uwolni użytkowników od zostania administratorami systemów. Aplikacje internetowe to programy, które działają na serwerach WWW i wykorzystują strony internetowe jako interfejs użytkownika. Dla przeciętnego użytkownika ten nowy rodzaj oprogramowania będzie łatwiejszy, tańszy, bardziej mobilny, bardziej niezawodny i często potężniejszy niż oprogramowanie desktopowe.
Z oprogramowaniem internetowym większość użytkowników nie będzie musiała myśleć o niczym innym niż o aplikacjach, których używają. Cały ten niechlujny, zmieniający się materiał będzie znajdował się gdzieś na serwerze, utrzymywany przez ludzi, którzy się do tego nadają. I tak zazwyczaj nie będziesz potrzebować komputera jako takiego, aby używać oprogramowania. Wszystko, czego będziesz potrzebować, to coś z klawiaturą, ekranem i przeglądarką internetową. Może będzie miało bezprzewodowy dostęp do Internetu. Może będzie to również Twój telefon komórkowy. Cokolwiek to będzie, będzie to elektronika użytkowa: coś, co kosztuje około 200 dolarów, a ludzie wybierają to głównie na podstawie wyglądu obudowy. Będziesz płacić więcej za usługi internetowe niż za sprzęt, tak jak teraz płacisz za telefony. [1]
Dotarcie kliknięcia do serwera i powrót zajmie około dziesiątej części sekundy, więc użytkownicy intensywnie interaktywnych aplikacji, takich jak Photoshop, nadal będą chcieli, aby obliczenia odbywały się na pulpicie. Ale jeśli spojrzysz na rodzaje rzeczy, do których większość ludzi używa komputerów, dziesiąta część sekundy opóźnienia nie będzie problemem. Moja matka tak naprawdę nie potrzebuje komputera stacjonarnego, a jest wiele osób takich jak ona.
Korzyść dla Użytkowników
Niedaleko mojego domu stoi samochód z naklejką na zderzaku „śmierć przed niedogodnością”. Większość ludzi, przez większość czasu, wybierze opcję wymagającą najmniej pracy. Jeśli oprogramowanie internetowe wygra, to dlatego, że jest wygodniejsze. I wygląda na to, że tak będzie, zarówno dla użytkowników, jak i dla programistów.
Aby korzystać z całkowicie internetowej aplikacji, potrzebujesz tylko przeglądarki połączonej z Internetem. Dzięki temu możesz korzystać z internetowej aplikacji w dowolnym miejscu. Kiedy instalujesz oprogramowanie na swoim komputerze stacjonarnym, możesz używać go tylko na tym komputerze. Co gorsza, Twoje pliki są uwięzione na tym komputerze. Niedogodność tego modelu staje się coraz bardziej widoczna, gdy ludzie przyzwyczajają się do sieci.
Pierwszym klinem w tym kierunku była poczta elektroniczna oparta na sieci. Miliony ludzi zdają sobie teraz sprawę, że powinni mieć dostęp do wiadomości e-mail bez względu na to, gdzie się znajdują. A jeśli możesz zobaczyć swoją pocztę, dlaczego nie swój kalendarz? Jeśli możesz omówić dokument ze swoimi współpracownikami, dlaczego nie możesz go edytować? Dlaczego jakiekolwiek Twoje dane mają być uwięzione na jakimś komputerze siedzącym na odległym biurku?
Cała koncepcja „Twojego komputera” zanika i jest zastępowana przez „Twoje dane”. Powinieneś mieć dostęp do swoich danych z dowolnego komputera. A raczej z dowolnego klienta, a klientem nie musi być komputer.
Klienci nie powinni przechowywać danych; powinni być jak telefony. W rzeczywistości mogą stać się telefonami, lub odwrotnie. A ponieważ klienci stają się mniejsi, masz kolejny powód, aby nie przechowywać na nich swoich danych: coś, co nosisz przy sobie, można zgubić lub ukraść. Pozostawienie PDA w taksówce jest jak awaria dysku, z tą różnicą, że Twoje dane trafiają do kogoś innego, zamiast zostać wyparowane.
Z całkowicie internetowym oprogramowaniem ani Twoje dane, ani aplikacje nie są przechowywane na kliencie. Dzięki temu nie musisz niczego instalować, aby z niego korzystać. A kiedy nie ma instalacji, nie musisz się martwić, że instalacja pójdzie nie tak. Nie mogą wystąpić niezgodności między aplikacją a systemem operacyjnym, ponieważ oprogramowanie nie działa na Twoim systemie operacyjnym.
Ponieważ nie wymaga instalacji, łatwe i powszechne będzie wypróbowanie oprogramowania internetowego przed jego „kupnem”. Powinieneś oczekiwać, że będziesz mógł bezpłatnie przetestować każdą internetową aplikację, po prostu odwiedzając stronę, na której jest oferowana. W Viaweb cała nasza strona była jak wielka strzałka wskazująca użytkownikom na demo.
Po wypróbowaniu dema, zapisanie się do usługi powinno wymagać niczego więcej niż wypełnienia krótkiego formularza (im krótszy, tym lepiej). I to powinno być ostatnie, co użytkownik musi zrobić. Z oprogramowaniem internetowym powinieneś otrzymywać nowe wersje bez dodatkowych opłat, bez wykonywania żadnej pracy, a nawet bez wiedzy o tym.
Aktualizacje nie będą tak wielkimi szokami, jakimi są teraz. Z czasem aplikacje będą cicho stawały się coraz potężniejsze. Będzie to wymagało pewnego wysiłku ze strony programistów. Będą musieli projektować oprogramowanie tak, aby można je było aktualizować bez wprowadzania użytkowników w błąd. To nowy problem, ale są sposoby, aby go rozwiązać.
Z aplikacjami internetowymi wszyscy korzystają z tej samej wersji, a błędy można naprawić natychmiast po ich wykryciu. Dlatego oprogramowanie internetowe powinno mieć znacznie mniej błędów niż oprogramowanie desktopowe. W Viaweb wątpię, czy kiedykolwiek mieliśmy więcej niż dziesięć znanych błędów jednocześnie. To o rzędy wielkości lepsze niż oprogramowanie desktopowe.
Aplikacje internetowe mogą być używane przez kilka osób jednocześnie. To oczywista korzyść dla aplikacji współpracujących, ale obstawiam, że użytkownicy zaczną tego chcieć w większości aplikacji, gdy tylko zdadzą sobie sprawę, że jest to możliwe. Na przykład często przydatne będzie umożliwienie dwóm osobom edycji tego samego dokumentu. Viaweb pozwalał wielu użytkownikom edytować witrynę jednocześnie, bardziej dlatego, że był to właściwy sposób pisania oprogramowania, niż dlatego, że spodziewaliśmy się, że użytkownicy tego będą chcieli, ale okazało się, że wielu chciało.
Kiedy korzystasz z aplikacji internetowej, Twoje dane będą bezpieczniejsze. Awaryjne dyski nie znikną z przeszłości, ale użytkownicy już o nich nie usłyszą. Będą się zdarzać w farmach serwerów. A firmy oferujące aplikacje internetowe faktycznie będą robić kopie zapasowe – nie tylko dlatego, że będą mieli prawdziwych administratorów systemów martwiących się o takie rzeczy, ale dlatego, że ASP, które straci dane użytkowników, będzie w wielkich, wielkich tarapatach. Kiedy ludzie tracą własne dane w awarii dysku, nie mogą się tak bardzo złościć, ponieważ mają tylko siebie, na kogo się złościć. Kiedy firma traci ich dane, będą znacznie bardziej zirytowani. [2]
Na koniec, oprogramowanie internetowe powinno być mniej podatne na wirusy. Jeśli klient nie uruchamia niczego poza przeglądarką, istnieje mniejsza szansa na uruchomienie wirusów i brak lokalnych danych do uszkodzenia. A program, który atakowałby same serwery, uznałby je za bardzo dobrze chronione.
Dla użytkowników oprogramowanie internetowe będzie mniej stresujące. Myślę, że gdybyś zajrzał do przeciętnego użytkownika Windows, znalazłbyś ogromne i w dużej mierze niewykorzystane pragnienie oprogramowania spełniającego ten opis. Uwolnione, mogłoby być potężną siłą.
Miasto Kodu
Dla programistów najbardziej widoczną różnicą między oprogramowaniem internetowym a desktopowym jest to, że aplikacja internetowa nie jest pojedynczym fragmentem kodu. Będzie to zbiór programów różnych typów, a nie pojedynczy, duży plik binarny. Projektowanie oprogramowania internetowego jest więc jak projektowanie miasta, a nie budynku: oprócz budynków potrzebne są drogi, znaki drogowe, media, departamenty policji i straży pożarnej oraz plany zarówno rozwoju, jak i różnych rodzajów katastrof.
W Viaweb oprogramowanie obejmowało dość duże aplikacje, z którymi użytkownicy bezpośrednio rozmawiali, programy, których te programy używały, programy, które działały stale w tle, szukając problemów, programy, które próbowały ponownie uruchomić rzeczy, jeśli się zepsuły, programy, które działały okazjonalnie, aby kompilować statystyki lub budować indeksy do wyszukiwania, programy, które uruchamialiśmy jawnie, aby odzyskać zasoby lub przenieść lub przywrócić dane, programy, które udawały użytkowników (aby zmierzyć wydajność lub ujawnić błędy), programy do diagnozowania problemów z siecią, programy do tworzenia kopii zapasowych, interfejsy do usług zewnętrznych, oprogramowanie, które sterowało imponującą kolekcją wskaźników wyświetlających statystyki serwerów w czasie rzeczywistym (hit wśród odwiedzających, ale niezbędne również dla nas), modyfikacje (w tym poprawki błędów) do oprogramowania open-source oraz wiele plików konfiguracyjnych i ustawień. Trevor Blackwell napisał spektakularny program do przenoszenia sklepów na nowe serwery w całym kraju, bez ich wyłączania, po tym, jak zostaliśmy kupieni przez Yahoo. Programy powiadamiały nas, wysyłały faksy i e-maile do użytkowników, przeprowadzały transakcje z procesorami kart kredytowych i rozmawiały ze sobą za pomocą gniazd, potoków, żądań http, ssh, pakietów udp, pamięci współdzielonej i plików. Część Viaweb składała się nawet z braku programów, ponieważ jednym z kluczy do bezpieczeństwa Unix jest nieuruchamianie niepotrzebnych narzędzi, których ludzie mogliby użyć do włamania się na nasze serwery.
Nie skończyło się na oprogramowaniu. Spędziliśmy dużo czasu na myśleniu o konfiguracji serwerów. Sami budowaliśmy serwery z komponentów – częściowo, aby zaoszczędzić pieniądze, a częściowo, aby uzyskać dokładnie to, czego chcieliśmy. Musieliśmy zastanowić się, czy nasz główny dostawca usług internetowych miał wystarczająco szybkie połączenia ze wszystkimi głównymi liniami. Serialnie chodziliśmy z dostawcami RAID.
Ale sprzęt to nie tylko coś, czym trzeba się martwić. Kiedy go kontrolujesz, możesz zrobić więcej dla użytkowników. W przypadku aplikacji desktopowej możesz określić pewien minimalny sprzęt, ale nie możesz dodać więcej. Jeśli zarządzasz serwerami, możesz jednym krokiem umożliwić wszystkim swoim użytkownikom wysyłanie powiadomień, faksów, wysyłanie poleceń przez telefon lub przetwarzanie kart kredytowych itp., po prostu instalując odpowiedni sprzęt. Zawsze szukaliśmy nowych sposobów dodawania funkcji za pomocą sprzętu, nie tylko dlatego, że podobało się to użytkownikom, ale także jako sposób na odróżnienie się od konkurentów, którzy (albo dlatego, że sprzedawali oprogramowanie desktopowe, albo odsprzedawali aplikacje internetowe za pośrednictwem ISP) nie mieli bezpośredniej kontroli nad sprzętem.
Ponieważ oprogramowanie w aplikacji internetowej będzie zbiorem programów, a nie pojedynczym plikiem binarnym, może być napisane w dowolnej liczbie różnych języków. Kiedy piszesz oprogramowanie desktopowe, jesteś praktycznie zmuszony pisać aplikację w tym samym języku co podstawowy system operacyjny – co oznacza C i C++. I tak te języki (zwłaszcza wśród osób nietechnicznych, takich jak menedżerowie i VC) zaczęły być uważane za języki „poważnego” rozwoju oprogramowania. Ale to był tylko artefakt sposobu dostarczania oprogramowania desktopowego. Dla oprogramowania serwerowego możesz używać dowolnego języka, jaki chcesz. [3] Dziś wielu najlepszych hakerów używa języków dalekich od C i C++: Perl, Python, a nawet Lisp.
W przypadku oprogramowania serwerowego nikt nie może Ci powiedzieć, jakiego języka użyć, ponieważ kontrolujesz cały system, aż do sprzętu. Różne języki są dobre do różnych zadań. Możesz użyć tego, który jest najlepszy dla każdego. A kiedy masz konkurentów, „możesz” oznacza „musisz” (wrócimy do tego później), ponieważ jeśli nie wykorzystasz tej możliwości, zrobią to Twoi konkurenci.
Większość naszych konkurentów używała C i C++, a to sprawiało, że ich oprogramowanie było wyraźnie gorsze, ponieważ (między innymi) nie mieli sposobu na obejście bezstanowości skryptów CGI. Jeśli zamierzałeś coś zmienić, wszystkie zmiany musiały nastąpić na jednej stronie, z przyciskiem „Aktualizuj” na dole. Jak pisałem gdzie indziej, używając Lisp, który wielu ludzi nadal uważa za język badawczy, mogliśmy sprawić, że edytor Viaweb działał bardziej jak oprogramowanie desktopowe.
Wydania
Jedną z najważniejszych zmian w tym nowym świecie jest sposób przeprowadzania wydań. W branży oprogramowania desktopowego wydanie to ogromna trauma, podczas której cała firma poci się i napina, aby wypchnąć pojedynczy, gigantyczny fragment kodu. Nasuwają się oczywiste porównania, zarówno do procesu, jak i do produktu końcowego.
W przypadku oprogramowania serwerowego możesz wprowadzać zmiany prawie tak, jak w programie, który pisałbyś dla siebie. Wydajesz oprogramowanie jako serię przyrostowych zmian, zamiast okazjonalnej wielkiej eksplozji. Typowa firma produkująca oprogramowanie desktopowe mogła wypuszczać jedną lub dwie wersje rocznie. W Viaweb często wypuszczaliśmy od trzech do pięciu wersji dziennie.
Kiedy przechodzisz na ten nowy model, zdajesz sobie sprawę, jak bardzo rozwój oprogramowania jest zależny od sposobu jego wydawania. Wiele z najgorszych problemów, które widzisz w branży oprogramowania desktopowego, wynika z katastrofalnej natury wydań.
Kiedy wypuszczasz tylko jedną nową wersję rocznie, masz tendencję do radzenia sobie z błędami hurtowo. Na jakiś czas przed datą wydania składasz nową wersję, w której połowa kodu została wyrwana i zastąpiona, wprowadzając niezliczone błędy. Następnie wkracza drużyna ludzi od kontroli jakości i zaczyna je liczyć, a programiści pracują nad listą, naprawiając je. Zazwyczaj nie docierają do końca listy, a faktycznie nikt nie wie, gdzie jest koniec. To jak łowienie gruzu z pondu. Nigdy tak naprawdę nie wiesz, co dzieje się w oprogramowaniu. W najlepszym razie kończysz ze statystycznym rodzajem poprawności.
W przypadku oprogramowania serwerowego większość zmian jest mała i przyrostowa. To samo w sobie rzadziej wprowadza błędy. Oznacza to również, że wiesz, co należy najdokładniej przetestować, gdy masz zamiar wydać oprogramowanie: ostatnią rzecz, którą zmieniłeś. Kończysz z znacznie pewniejszym uchwytem na kod. Zasadniczo wiesz, co się w nim dzieje. Oczywiście nie masz zapamiętanego kodu źródłowego, ale kiedy czytasz kod, robisz to jak pilot skanujący panel przyrządów, a nie jak detektyw próbujący rozwiązać jakąś zagadkę.
Oprogramowanie desktopowe rodzi pewien fatalizm wobec błędów. Wiesz, że wysyłasz coś pełnego błędów, a nawet stworzyłeś mechanizmy kompensujące (np. wydania łatek). Więc po co martwić się o kilka więcej? Wkrótce będziesz wypuszczać całe funkcje, o których wiesz, że są zepsute. Apple zrobiło to na początku tego roku. Czuło presję, aby wydać swój nowy system operacyjny, którego data wydania była już czterokrotnie przesuwana, ale część oprogramowania (wsparcie dla płyt CD i DVD) nie była gotowa. Rozwiązanie? Wydali system operacyjny bez niedokończonych części, a użytkownicy będą musieli je zainstalować później.
W przypadku oprogramowania internetowego nigdy nie musisz wydawać oprogramowania przed jego działaniem, a możesz je wydać, gdy tylko zadziała.
Weteran branży może myśleć, że to dobrze brzmiąca idea, że nigdy nie trzeba wydawać oprogramowania przed jego działaniem, ale co się dzieje, gdy obiecałeś dostarczyć nową wersję swojego oprogramowania do określonej daty? W przypadku oprogramowania internetowego nie składałbyś takiej obietnicy, ponieważ nie ma wersji. Twoje oprogramowanie zmienia się stopniowo i ciągle. Niektóre zmiany mogą być większe niż inne, ale sama idea wersji nie pasuje naturalnie do oprogramowania internetowego.
Jeśli ktoś pamięta Viaweb, może to brzmieć dziwnie, ponieważ zawsze ogłaszaliśmy nowe wersje. Robiono to wyłącznie w celach PR. Dowiedzieliśmy się, że prasa branżowa myśli w kategoriach numerów wersji. Dadzą nam dużą relację z głównego wydania, oznaczającego nowy pierwszy cyfrę w numerze wersji, a zazwyczaj co najwyżej akapit dla wydania punktowego, oznaczającego nową cyfrę po przecinku.
Niektórzy z naszych konkurentów oferowali oprogramowanie desktopowe i faktycznie mieli numery wersji. A dla tych wydań sam fakt, który wydawał nam się dowodem ich zacofania, przynosił im wszelkie rodzaje rozgłosu. Nie chcieliśmy tego przegapić, więc zaczęliśmy nadawać numery wersji również naszemu oprogramowaniu. Kiedy chcieliśmy trochę rozgłosu, tworzyliśmy listę wszystkich funkcji, które dodaliśmy od ostatniego „wydania”, przypisywaliśmy nowy numer wersji do oprogramowania i wydawaliśmy komunikat prasowy mówiący, że nowa wersja jest dostępna natychmiast. Niesamowite, nikt nigdy nas nie przyłapał.
Do czasu, gdy zostaliśmy kupieni, zrobiliśmy to trzy razy, więc byliśmy na Wersji 4. Wersja 4.1, jeśli dobrze pamiętam. Po tym, jak Viaweb stał się Yahoo Store, nie było już tak desperackiej potrzeby rozgłosu, więc chociaż oprogramowanie nadal ewoluowało, cała koncepcja numerów wersji została cicho porzucona.
Błędy
Kolejną główną techniczną zaletą oprogramowania internetowego jest to, że można odtworzyć większość błędów. Masz dane użytkowników bezpośrednio na swoim dysku. Jeśli ktoś zepsuje Twoje oprogramowanie, nie musisz zgadywać, co się dzieje, jak w przypadku oprogramowania desktopowego: powinieneś być w stanie odtworzyć błąd, gdy osoba ta jest po drugiej stronie telefonu. Możesz nawet już o tym wiedzieć, jeśli masz wbudowany w swoją aplikację kod do wykrywania błędów.
Oprogramowanie internetowe jest używane przez całą dobę, więc wszystko, co robisz, jest natychmiast poddawane próbie. Błędy pojawiają się szybko.
Firmy produkujące oprogramowanie są czasami oskarżane o to, że pozwalają użytkownikom debugować swoje oprogramowanie. I właśnie to zalecam. W przypadku oprogramowania internetowego jest to faktycznie dobry plan, ponieważ błędy są nieliczne i przejściowe. Wydając oprogramowanie stopniowo, na początek masz znacznie mniej błędów. A kiedy możesz odtwarzać błędy i natychmiast wydawać poprawki, możesz znaleźć i naprawić większość błędów, gdy tylko się pojawią. Nigdy nie mieliśmy wystarczającej liczby błędów jednocześnie, aby zawracać sobie głowę formalnym systemem śledzenia błędów.
Powinieneś oczywiście testować zmiany przed ich wydaniem, więc nie powinno być wydawanych żadnych poważnych błędów. Te nieliczne, które nieuchronnie się przedostaną, będą dotyczyć przypadków granicznych i wpłyną tylko na tych nielicznych użytkowników, którzy się z nimi zetkną, zanim ktoś zadzwoni, aby narzekać. Dopóki naprawiasz błędy od razu, efekt netto dla przeciętnego użytkownika to znacznie mniej błędów. Wątpię, czy przeciętny użytkownik Viaweb kiedykolwiek widział błąd.
Naprawianie świeżych błędów jest łatwiejsze niż naprawianie starych. Zazwyczaj dość szybko można znaleźć błąd w kodzie, który właśnie napisałeś. Kiedy się pojawi, często wiesz, co jest nie tak, zanim jeszcze spojrzysz na kod źródłowy, ponieważ już podświadomie się tym martwiłeś. Naprawienie błędu w czymś, co napisałeś sześć miesięcy temu (średni przypadek, jeśli wydajesz raz w roku), to znacznie więcej pracy. A ponieważ nie rozumiesz kodu tak dobrze, bardziej prawdopodobne jest, że naprawisz go w brzydki sposób, a nawet wprowadzisz więcej błędów. [4]
Kiedy łapiesz błędy wcześnie, masz też mniej błędów złożonych. Błędy złożone to dwa oddzielne błędy, które oddziałują na siebie: potykasz się schodząc po schodach, a kiedy sięgasz po poręcz, ta odpada Ci w ręce. W oprogramowaniu tego rodzaju błąd jest najtrudniejszy do znalezienia i zazwyczaj ma najgorsze konsekwencje. [5] Tradycyjne podejście „łamać wszystko, a potem filtrować błędy” nieuchronnie prowadzi do wielu błędów złożonych. A oprogramowanie wydawane w serii małych zmian nieuchronnie tego unika. Podłogi są stale sprzątane z luźnych przedmiotów, które mogłyby później utknąć w czymś.
Pomaga, jeśli używasz techniki zwanej programowaniem funkcyjnym. Programowanie funkcyjne oznacza unikanie efektów ubocznych. Jest to coś, co częściej można zobaczyć w pracach badawczych niż w oprogramowaniu komercyjnym, ale w przypadku aplikacji internetowych okazuje się to naprawdę przydatne. Trudno jest napisać całe programy jako czysto funkcyjny kod, ale można napisać znaczące fragmenty w ten sposób. Ułatwia to testowanie tych części oprogramowania, ponieważ nie mają one stanu, co jest bardzo wygodne w sytuacji, gdy stale wprowadzasz i testujesz małe modyfikacje. Napisałem dużą część edytora Viaweb w tym stylu, a nasz język skryptowy, RTML, uczyniliśmy językiem czysto funkcyjnym.
Ludzie z branży oprogramowania desktopowego będą mieli trudności z uwierzeniem w to, ale w Viaweb błędy stały się prawie grą. Ponieważ większość wydanych błędów dotyczyła przypadków granicznych, użytkownicy, którzy się z nimi zetknęli, byli prawdopodobnie zaawansowanymi użytkownikami, przesuwającymi granice. Zaawansowani użytkownicy są bardziej wyrozumiali dla błędów, zwłaszcza że prawdopodobnie wprowadzili je w trakcie dodawania jakiejś funkcji, o którą prosili. W rzeczywistości, ponieważ błędy były rzadkie i trzeba było robić wyrafinowane rzeczy, aby je zobaczyć, zaawansowani użytkownicy byli często dumni z ich wyłapania. Dzwonili do wsparcia w duchu triumfu, a nie gniewu, jakby zdobyli punkty przeciwko nam.
Wsparcie
Kiedy można odtworzyć błędy, zmienia to Twoje podejście do obsługi klienta. W większości firm produkujących oprogramowanie wsparcie jest oferowane jako sposób na poprawę samopoczucia klientów. Albo dzwonią do Ciebie z powodu znanego błędu, albo po prostu robią coś źle i musisz to rozgryźć. W obu przypadkach nie można się od nich wiele nauczyć. I tak masz tendencję do postrzegania zgłoszeń serwisowych jako uciążliwości, którą chcesz jak najmocniej odizolować od swoich programistów.
Tak nie działały rzeczy w Viaweb. W Viaweb wsparcie było darmowe, bo chcieliśmy słyszeć od klientów. Jeśli ktoś miał problem, chcieliśmy wiedzieć o tym od razu, abyśmy mogli odtworzyć błąd i wydać poprawkę.
Dlatego w Viaweb programiści byli zawsze w bliskim kontakcie ze wsparciem. Pracownicy obsługi klienta znajdowali się około dziesięciu metrów od programistów i wiedzieli, że zawsze mogą przerwać wszystko zgłoszeniem prawdziwego błędu. Opuszczaliśmy spotkanie zarządu, aby naprawić poważny błąd.
Nasze podejście do wsparcia sprawiało, że wszyscy byli szczęśliwsi. Klienci byli zachwyceni. Wyobraź sobie tylko, jak by to było zadzwonić na linię wsparcia i być traktowanym jak ktoś, kto przynosi ważne wiadomości. Pracownicy obsługi klienta byli zadowoleni, ponieważ mogli pomagać użytkownikom, zamiast czytać im skrypty. A programiści byli zadowoleni, ponieważ mogli odtwarzać błędy, zamiast tylko słuchać niejasnych raportów z drugiej ręki.
Nasza polityka naprawiania błędów na bieżąco zmieniła relacje między pracownikami obsługi klienta a hakerami. W większości firm produkujących oprogramowanie pracownicy wsparcia są niedocenianymi ludzkimi tarczami, a hakerzy są małymi kopiami Boga Ojca, twórcami świata. Niezależnie od procedury zgłaszania błędów, prawdopodobnie będzie ona jednokierunkowa: pracownicy wsparcia, którzy słyszą o błędach, wypełniają jakiś formularz, który ostatecznie trafia (być może przez QA) do programistów, którzy dodają go do swojej listy rzeczy do zrobienia. W Viaweb było bardzo inaczej. W ciągu minuty od usłyszenia o błędzie od klienta, pracownicy wsparcia mogli stać obok programisty, słysząc, jak mówi „Cholera, masz rację, to błąd”. Zachwycało to pracowników wsparcia, słysząc „masz rację” od hakerów. Przynosili nam błędy z tym samym wyczekującym wyrazem twarzy, co kot przynoszący Ci mysz, którą właśnie zabił. Sprawiało to również, że byli bardziej ostrożni w ocenie powagi błędu, ponieważ teraz ich honor był na szali.
Po tym, jak zostaliśmy kupieni przez Yahoo, pracownicy obsługi klienta zostali przeniesieni daleko od programistów. Dopiero wtedy zdaliśmy sobie sprawę, że byli oni w efekcie QA, a do pewnego stopnia także marketingiem. Oprócz wyłapywania błędów, byli oni strażnikami wiedzy o bardziej niejasnych, podobnych do błędów rzeczach, takich jak funkcje, które dezorientowały użytkowników. [6] Byli również rodzajem grupy fokusowej; mogliśmy ich zapytać, którą z dwóch nowych funkcji użytkownicy chcą bardziej, a oni zawsze mieli rację.
Morale
Możliwość natychmiastowego wydawania oprogramowania jest dużym motywatorem. Często, idąc do pracy, myślałem o jakiejś zmianie, którą chciałem wprowadzić w oprogramowaniu, i robiłem to tego samego dnia. Działało to również w przypadku większych funkcji. Nawet jeśli coś miało zająć dwa tygodnie pisania (niewiele projektów trwało dłużej), wiedziałem, że zobaczę efekt w oprogramowaniu, gdy tylko zostanie ukończone.
Gdybym musiał czekać rok na następne wydanie, odłożyłbym większość tych pomysłów, przynajmniej na jakiś czas. Rzecz w pomysłach jest taka, że prowadzą do kolejnych pomysłów. Czy zauważyłeś kiedyś, że kiedy siadasz do pisania czegoś, połowa pomysłów, które się w tym znajdą, to te, które wymyśliłeś podczas pisania? To samo dzieje się z oprogramowaniem. Praca nad wdrożeniem jednego pomysłu daje Ci więcej pomysłów. Więc odłożenie pomysłu kosztuje Cię nie tylko opóźnienie w jego wdrożeniu, ale także wszystkie pomysły, do których wdrożenie by doprowadziło. W rzeczywistości odkładanie pomysłu prawdopodobnie nawet hamuje nowe pomysły: gdy zaczynasz myśleć o jakiejś nowej funkcji, dostrzegasz półkę i myślisz „ale mam już mnóstwo nowych rzeczy, które chcę zrobić na następne wydanie”.
Co robią duże firmy zamiast wdrażać funkcje? Planują je. W Viaweb czasami mieliśmy z tym problemy. Inwestorzy i analitycy pytali nas, co planujemy na przyszłość. Prawdziwą odpowiedzią byłoby: nie mieliśmy żadnych planów. Mieliśmy ogólne pomysły na rzeczy, które chcieliśmy ulepszyć, ale gdybyśmy wiedzieli jak, zrobilibyśmy to już. Co zamierzaliśmy zrobić w ciągu najbliższych sześciu miesięcy? Cokolwiek wyglądało na największą wygraną. Nie wiem, czy kiedykolwiek odważyłem się udzielić tej odpowiedzi, ale taka była prawda. Plany to tylko inne słowo na pomysły na półce. Kiedy wymyślaliśmy dobre pomysły, wdrażaliśmy je.
W Viaweb, podobnie jak w wielu firmach produkujących oprogramowanie, większość kodu miała jednego właściciela. Ale kiedy coś posiadałeś, naprawdę to posiadałeś: nikt oprócz właściciela fragmentu oprogramowania nie musiał zatwierdzać (ani nawet wiedzieć o) wydania. Nie było ochrony przed awarią poza strachem przed tym, że będziesz wyglądać jak idiota w oczach rówieśników, a to było więcej niż wystarczające. Mogłem sprawić wrażenie, że po prostu bezmyślnie pisaliśmy kod. Robiliśmy to szybko, ale bardzo dokładnie przemyśleliśmy, zanim wydaliśmy oprogramowanie na te serwery. A zwracanie uwagi jest ważniejsze dla niezawodności niż powolne działanie. Ponieważ zwraca dużą uwagę, pilot Marynarki Wojennej może bezpieczniej niż przeciętny nastolatek krojący bajgla, wylądować samolot o wadze 40 000 funtów przy prędkości 140 mil na godzinę na kołyszącym się pokładzie lotniskowca, w nocy.
Ten sposób pisania oprogramowania jest oczywiście mieczem obosiecznym. Działa znacznie lepiej dla małego zespołu dobrych, zaufanych programistów niż dla dużej firmy przeciętnych, gdzie złe pomysły są wyłapywane przez komitety, a nie przez ludzi, którzy je mieli.
Brooks od tyłu
Na szczęście oprogramowanie internetowe wymaga mniej programistów. Pracowałem kiedyś w średniej wielkości firmie produkującej oprogramowanie desktopowe, która zatrudniała ponad 100 osób w dziale inżynierii. Tylko 13 z nich pracowało nad rozwojem produktu. Reszta pracowała nad wydaniami, portami i tak dalej. W przypadku oprogramowania internetowego potrzebujesz (co najwyżej) tych 13 osób, ponieważ nie ma wydań, portów i tak dalej.
Viaweb zostało napisane przez zaledwie trzy osoby. [7] Byłem zawsze pod presją, aby zatrudnić więcej, ponieważ chcieliśmy zostać kupieni, a wiedzieliśmy, że kupujący będą mieli trudności z zapłaceniem wysokiej ceny za firmę z tylko trzema programistami. (Rozwiązanie: zatrudniliśmy więcej, ale stworzyliśmy dla nich nowe projekty.)
Kiedy można pisać oprogramowanie z mniejszą liczbą programistów, oszczędza to więcej niż tylko pieniądze. Jak zauważył Fred Brooks w The Mythical Man-Month, dodawanie ludzi do projektu zwykle go spowalnia. Liczba możliwych połączeń między programistami rośnie wykładniczo wraz z rozmiarem grupy. Im większa grupa, tym więcej czasu spędzą na spotkaniach negocjujących, jak ich oprogramowanie będzie działać razem, i tym więcej błędów uzyskają z nieprzewidzianych interakcji. Na szczęście ten proces działa również w odwrotnym kierunku: gdy grupy stają się mniejsze, rozwój oprogramowania staje się wykładniczo bardziej wydajny. Nie pamiętam, aby programiści w Viaweb kiedykolwiek mieli faktyczne spotkanie. Nigdy nie mieliśmy do powiedzenia więcej w danym momencie, niż mogliśmy powiedzieć, idąc na lunch.
Jeśli jest tu jakaś wada, to taka, że wszyscy programiści muszą być do pewnego stopnia również administratorami systemów. Kiedy hostujesz oprogramowanie, ktoś musi pilnować serwerów, a w praktyce jedynymi ludźmi, którzy mogą to zrobić poprawnie, są ci, którzy napisali oprogramowanie. W Viaweb nasz system miał tak wiele komponentów i tak często się zmieniał, że nie było wyraźnej granicy między oprogramowaniem a infrastrukturą. Arbitralne ustalenie takiej granicy ograniczyłoby nasze wybory projektowe. I tak, chociaż stale mieliśmy nadzieję, że pewnego dnia („za kilka miesięcy”) wszystko będzie na tyle stabilne, że będziemy mogli zatrudnić kogoś, czyją pracą będzie tylko martwienie się o serwery, nigdy się to nie zdarzyło.
Nie sądzę, żeby mogło być inaczej, dopóki aktywnie rozwijasz produkt. Oprogramowanie internetowe nigdy nie będzie czymś, co napiszesz, zapiszesz i wyjdziesz do domu. To żywa rzecz, działająca teraz na Twoich serwerach. Poważny błąd może nie tylko zepsuć proces jednego użytkownika; może zepsuć wszystkich. Jeśli błąd w Twoim kodzie uszkodzi jakieś dane na dysku, musisz go naprawić. I tak dalej. Odkryliśmy, że nie musisz pilnować serwerów przez cały czas (po pierwszym roku), ale zdecydowanie chcesz zwracać uwagę na rzeczy, które ostatnio zmieniłeś. Nie wydajesz kodu późno w nocy, a potem nie idziesz do domu.
Obserwowanie Użytkowników
W przypadku oprogramowania serwerowego jesteś bliżej swojego kodu. Możesz być również bliżej swoich użytkowników. Intuit jest znany z tego, że przedstawia się klientom w sklepach detalicznych i prosi o podążanie za nimi do domu. Jeśli kiedykolwiek obserwowałeś, jak ktoś po raz pierwszy używa Twojego oprogramowania, wiesz, jakie niespodzianki musiały na nich czekać.
Oprogramowanie powinno robić to, co myślą, że zrobi. Ale nie możesz mieć pojęcia, co będą myśleć użytkownicy, uwierz mi, dopóki ich nie obejrzysz. A oprogramowanie serwerowe daje Ci bezprecedensowe informacje o ich zachowaniu. Nie jesteś ograniczony do małych, sztucznych grup fokusowych. Możesz zobaczyć każde kliknięcie wykonane przez każdego użytkownika. Musisz dokładnie rozważyć, co będziesz oglądać, ponieważ nie chcesz naruszać prywatności użytkowników, ale nawet najbardziej ogólne próbkowanie statystyczne może być bardzo przydatne.
Kiedy masz użytkowników na swoim serwerze, nie musisz polegać na benchmarkach, na przykład. Benchmarki to symulowani użytkownicy. Z oprogramowaniem serwerowym możesz obserwować prawdziwych użytkowników. Aby zdecydować, co optymalizować, po prostu zaloguj się na serwer i zobacz, co zużywa cały procesor. I wiesz też, kiedy przestać optymalizować: w końcu doprowadziliśmy edytor Viaweb do punktu, w którym był ograniczony przez pamięć, a nie procesor, a ponieważ nie mogliśmy nic zrobić, aby zmniejszyć rozmiar danych użytkowników (cóż, nic łatwego), wiedzieliśmy, że możemy równie dobrze tam skończyć.
Wydajność ma znaczenie w przypadku oprogramowania serwerowego, ponieważ płacisz za sprzęt. Liczba użytkowników, których możesz obsłużyć na serwer, jest dzielnikiem Twoich kosztów kapitałowych, więc jeśli możesz sprawić, że Twoje oprogramowanie będzie bardzo wydajne, możesz sprzedawać taniej niż konkurenci i nadal zarabiać. W Viaweb obniżyliśmy koszt kapitałowy na użytkownika do około 5 dolarów. Teraz byłoby mniej, prawdopodobnie mniej niż koszt wysłania im pierwszej miesięcznej faktury. Sprzęt jest teraz darmowy, jeśli Twoje oprogramowanie jest rozsądnie wydajne.
Obserwowanie użytkowników może pomóc w projektowaniu, a także w optymalizacji. Viaweb miało język skryptowy o nazwie RTML, który pozwalał zaawansowanym użytkownikom definiować własne style stron. Odkryliśmy, że RTML stał się rodzajem skrzynki na sugestie, ponieważ użytkownicy używali go tylko wtedy, gdy predefiniowane style stron nie mogły zrobić tego, czego chcieli. Na przykład pierwotnie edytor umieszczał paski przycisków w poprzek strony, ale po tym, jak wielu użytkowników użyło RTML do umieszczenia przycisków po lewej stronie, uczyniliśmy to opcją (w rzeczywistości domyślną) w predefiniowanych stylach stron.
Na koniec, obserwując użytkowników, często można stwierdzić, kiedy mają kłopoty. A ponieważ klient zawsze ma rację, jest to oznaka czegoś, co musisz naprawić. W Viaweb kluczem do zdobycia użytkowników był test online. Nie była to tylko seria slajdów stworzonych przez ludzi od marketingu. W naszym teście użytkownicy faktycznie korzystali z oprogramowania. Zajęło to około pięciu minut, a na końcu zbudowali prawdziwy, działający sklep.
Test był sposobem, w jaki zdobyliśmy prawie wszystkich naszych nowych użytkowników. Myślę, że tak będzie w przypadku większości aplikacji internetowych. Jeśli użytkownicy będą w stanie pomyślnie przejść test, spodoba im się produkt. Jeśli się zdezorientują lub znudzą, nie spodoba im się. Więc wszystko, co mogliśmy zrobić, aby więcej osób przeszło test, zwiększyłoby nasze tempo wzrostu.
Studiowałem ścieżki kliknięć osób przechodzących test i odkryłem, że na pewnym etapie dezorientowali się i klikali przycisk „Wstecz” w przeglądarce. (Jeśli spróbujesz pisać aplikacje internetowe, odkryjesz, że przycisk Wstecz staje się jednym z Twoich najciekawszych problemów filozoficznych.) Dlatego dodałem komunikat w tym momencie, informujący użytkowników, że są prawie na ukończeniu i przypominający im, aby nie klikali przycisku Wstecz. Kolejną wielką zaletą oprogramowania internetowego jest to, że otrzymujesz natychmiastową informację zwrotną ze zmian: liczba osób kończących test wzrosła natychmiast z 60% do 90%. A ponieważ liczba nowych użytkowników była funkcją liczby ukończonych testów, nasz wzrost przychodów wzrósł o 50%, tylko dzięki tej jednej zmianie.
Pieniądze
Na początku lat 90. przeczytałem artykuł, w którym ktoś powiedział, że oprogramowanie to biznes subskrypcyjny. Na początku wydawało się to bardzo cynicznym stwierdzeniem. Ale później zdałem sobie sprawę, że odzwierciedla to rzeczywistość: rozwój oprogramowania to proces ciągły. Myślę, że jest to czystsze, jeśli otwarcie pobierasz opłaty abonamentowe, zamiast zmuszać ludzi do ciągłego kupowania i instalowania nowych wersji, aby nadal Ci płacili. I na szczęście subskrypcje są naturalnym sposobem rozliczania aplikacji internetowych.
Hostowanie aplikacji to obszar, w którym firmy będą odgrywać rolę, która prawdopodobnie nie zostanie wypełniona przez freeware. Hostowanie aplikacji to duży stres i wiąże się z rzeczywistymi kosztami. Nikt nie będzie chciał tego robić za darmo.
Dla firm aplikacje internetowe są idealnym źródłem dochodów. Zamiast zaczynać każdy kwartał od czystej karty, masz powtarzający się strumień przychodów. Ponieważ Twoje oprogramowanie ewoluuje stopniowo, nie musisz się martwić, że nowy model zawiedzie; nigdy nie musi być nowego modelu jako takiego, a jeśli zrobisz coś z oprogramowaniem, czego użytkownicy nienawidzą, dowiesz się o tym od razu. Nie masz problemów z nieściągalnymi rachunkami; jeśli ktoś nie zapłaci, możesz po prostu wyłączyć usługę. I nie ma możliwości piractwa.
Ta ostatnia „zaleta” może okazać się problemem. Pewna ilość piractwa jest korzystna dla firm produkujących oprogramowanie. Jeśli jakiś użytkownik faktycznie nie kupiłby Twojego oprogramowania za żadną cenę, nic nie tracisz, jeśli używa pirackiej kopii. W rzeczywistości zyskujesz, ponieważ jest to kolejny użytkownik pomagający uczynić Twoje oprogramowanie standardem – lub kto może kupić kopię później, gdy ukończy szkołę średnią.
Gdy mogą, firmy lubią robić coś, co nazywa się dyskryminacją cenową, co oznacza pobieranie od każdego klienta tyle, ile może zapłacić. [8] Oprogramowanie jest szczególnie odpowiednie do dyskryminacji cenowej, ponieważ koszt krańcowy jest bliski zeru. Dlatego uruchamianie niektórych programów na komputerach Sun kosztuje więcej niż na komputerach Intel: firma korzystająca z Sun nie jest zainteresowana oszczędzaniem pieniędzy i można jej bezpiecznie naliczyć więcej. Piractwo jest w efekcie najniższym poziomem dyskryminacji cenowej. Myślę, że firmy produkujące oprogramowanie to rozumieją i celowo przymykają oko na niektóre rodzaje piractwa. [9] W przypadku oprogramowania serwerowego będą musiały znaleźć inne rozwiązanie.
Oprogramowanie internetowe sprzedaje się dobrze, zwłaszcza w porównaniu do oprogramowania desktopowego, ponieważ jest łatwe do kupienia. Można by pomyśleć, że ludzie decydują się na zakup czegoś, a następnie je kupują, jako dwa oddzielne kroki. Tak myślałem przed Viaweb, na tyle, na ile w ogóle zastanawiałem się nad tym pytaniem. W rzeczywistości drugi krok może wpłynąć na pierwszy: jeśli coś jest trudne do kupienia, ludzie zmienią zdanie co do tego, czy tego chcieli. I odwrotnie: sprzedasz więcej czegoś, gdy jest łatwe do kupienia. Kupuję więcej książek, bo istnieje Amazon. Oprogramowanie internetowe jest po prostu najłatwiejszą rzeczą na świecie do kupienia, zwłaszcza jeśli właśnie zrobiłeś demo online. Użytkownicy nie powinni robić nic więcej niż wpisywać numer karty kredytowej. (Zrób im więcej na własne ryzyko.)
Czasami oprogramowanie internetowe jest oferowane za pośrednictwem ISP działających jako sprzedawcy. To zły pomysł. Musisz zarządzać serwerami, ponieważ musisz stale ulepszać zarówno sprzęt, jak i oprogramowanie. Jeśli zrezygnujesz z bezpośredniej kontroli nad serwerami, zrezygnujesz z większości zalet rozwijania aplikacji internetowych.
Kilku naszych konkurentów postrzeliło się w stopę w ten sposób – zazwyczaj, moim zdaniem, dlatego, że zostali przytłoczeni przez „garniturów”, którzy byli podekscytowani tym ogromnym potencjalnym kanałem, i nie zdawali sobie sprawy, że zrujnuje to produkt, który mieli nadzieję sprzedać za jego pośrednictwem. Sprzedaż oprogramowania internetowego za pośrednictwem ISP jest jak sprzedaż sushi przez automaty.
Klienci
Kim będą klienci? W Viaweb początkowo byli to indywidualni użytkownicy i mniejsze firmy, i myślę, że tak będzie w przypadku aplikacji internetowych. Są to użytkownicy, którzy są gotowi próbować nowych rzeczy, częściowo dlatego, że są bardziej elastyczni, a częściowo dlatego, że chcą niższych kosztów nowej technologii.
Aplikacje internetowe często będą najlepszą rzeczą dla dużych firm (chociaż będą one powoli to sobie uświadamiać). Najlepszą siecią intranetową jest Internet. Jeśli firma korzysta z prawdziwych aplikacji internetowych, oprogramowanie będzie działać lepiej, serwery będą lepiej zarządzane, a pracownicy będą mieli dostęp do systemu z dowolnego miejsca.
Argument przeciwko temu podejściu zazwyczaj opiera się na bezpieczeństwie: jeśli dostęp jest łatwiejszy dla pracowników, będzie również dla złoczyńców. Niektórzy więksi sprzedawcy wahali się przed użyciem Viaweb, ponieważ myśleli, że informacje o kartach kredytowych klientów będą bezpieczniejsze na ich własnych serwerach. Nie było łatwo dyplomatycznie przedstawić ten punkt, ale w rzeczywistości dane były prawie na pewno bezpieczniejsze w naszych rękach niż w ich. Kto może zatrudnić lepszych ludzi do zarządzania bezpieczeństwem, startup technologiczny, którego całym biznesem jest zarządzanie serwerami, czy sprzedawca odzieży? Nie tylko mieliśmy lepszych ludzi martwiących się o bezpieczeństwo, ale bardziej się o nie martwiliśmy. Jeśli ktoś włamałby się na serwery sprzedawcy odzieży, wpłynęłoby to co najwyżej na jednego sprzedawcę, można by to prawdopodobnie zatuszować, a w najgorszym przypadku mogłoby to doprowadzić do zwolnienia jednej osoby. Jeśli ktoś włamałby się na nasze, mogłoby to wpłynąć na tysiące sprzedawców, prawdopodobnie trafiłoby do wiadomości na CNet i mogłoby nas doprowadzić do bankructwa.
Jeśli chcesz trzymać swoje pieniądze w bezpiecznym miejscu, czy trzymasz je pod materacem w domu, czy wkładasz do banku? Ten argument dotyczy każdego aspektu administracji serwerem: nie tylko bezpieczeństwa, ale także czasu pracy, przepustowości, zarządzania obciążeniem, kopii zapasowych itp. Nasze istnienie zależało od prawidłowego wykonania tych rzeczy. Problemy z serwerem były dla nas wielkim tabu, jak niebezpieczna zabawka dla producenta zabawek, czy zatrucie salmonellą dla przetwórcy żywności.
Duża firma korzystająca z aplikacji internetowych w tym zakresie outsourcinguje IT. Jak drastycznie by to nie brzmiało, myślę, że to generalnie dobry pomysł. Firmy prawdopodobnie uzyskają lepszą obsługę w ten sposób niż od wewnętrznych administratorów systemów. Administratorzy systemów mogą stać się zrzędliwi i nieodpowiadający, ponieważ nie są bezpośrednio narażeni na presję konkurencyjną: sprzedawca musi radzić sobie z klientami, a programista musi radzić sobie z oprogramowaniem konkurencji, ale administrator systemu, jak stary kawaler, ma niewiele zewnętrznych sił, aby go utrzymać w ryzach. [10] W Viaweb mieliśmy mnóstwo zewnętrznych sił, które nas trzymały w ryzach. Ludzie, którzy do nas dzwonili, byli klientami, nie tylko współpracownikami. Jeśli serwer się zaciął, skakaliśmy; samo wspomnienie o tym przyprawia mnie o dreszcz adrenaliny, lata później.
Tak więc aplikacje internetowe będą zazwyczaj właściwym rozwiązaniem również dla dużych firm. Będą one ostatnie, które to sobie uświadomią, tak jak w przypadku komputerów stacjonarnych. I po części z tego samego powodu: przekonanie dużych firm, że potrzebują czegoś droższego, będzie warte dużo pieniędzy.
Zawsze istnieje tendencja do tego, że bogaci klienci kupują drogie rozwiązania, nawet gdy tańsze rozwiązania są lepsze, ponieważ ludzie oferujący drogie rozwiązania mogą więcej wydać na ich sprzedaż. W Viaweb zawsze byliśmy temu przeciwni. Straciliśmy kilku sprzedawców z wyższej półki na rzecz firm konsultingowych internetowych, które przekonały ich, że lepiej będzie, jeśli zapłacą pół miliona dolarów za niestandardowy sklep internetowy na własnym serwerze. Z reguły nie było im lepiej, co odkryło więcej niż jeden, gdy nadszedł sezon zakupów świątecznych, a obciążenie ich serwera wzrosło. Viaweb było znacznie bardziej wyrafinowane niż to, co otrzymali większość tych sprzedawców, ale nie mogliśmy sobie pozwolić, aby im o tym powiedzieć. Za 300 dolarów miesięcznie nie mogliśmy sobie pozwolić na wysłanie zespołu dobrze ubranych i autorytatywnie brzmiących ludzi, aby przedstawiali prezentacje klientom.
Duża część tego, za co płacą dodatkowo duże firmy, to koszt sprzedaży im drogich rzeczy. (Jeśli Departament Obrony płaci tysiąc dolarów za deski sedesowe, to częściowo dlatego, że sprzedaż desek sedesowych za tysiąc dolarów kosztuje dużo.) I to jest jeden z powodów, dla których oprogramowanie intranetowe będzie nadal prosperować, nawet jeśli prawdopodobnie jest to zły pomysł. Jest po prostu droższe. Nie możesz nic zrobić z tym dylematem, więc najlepszym planem jest najpierw skupić się na mniejszych klientach. Reszta przyjdzie z czasem.
Syn Serwera
Uruchamianie oprogramowania na serwerze to nic nowego. W rzeczywistości jest to stary model: wszystkie aplikacje mainframe są oparte na serwerach. Jeśli oprogramowanie serwerowe jest tak dobrym pomysłem, dlaczego przegrało ostatnim razem? Dlaczego komputery stacjonarne wyparły mainframe?
Na początku komputery stacjonarne nie wyglądały na wielkie zagrożenie. Pierwsi użytkownicy to byli wszyscy hakerzy – lub hobbyści, jak ich wtedy nazywano. Lubili mikrokomputery, ponieważ były tanie. Po raz pierwszy można było mieć własny komputer. Zwrot „komputer osobisty” jest teraz częścią języka, ale kiedy został po raz pierwszy użyty, miał celowo śmiałe brzmienie, podobnie jak dziś zwrot „osobisty satelita”.
Dlaczego komputery stacjonarne przejęły kontrolę? Myślę, że dlatego, że miały lepsze oprogramowanie. I myślę, że powodem, dla którego oprogramowanie mikrokomputerowe było lepsze, było to, że mogło być pisane przez małe firmy.
Nie sądzę, aby wiele osób zdawało sobie sprawę, jak kruche i niepewne są startupy na najwcześniejszym etapie. Wiele startupów zaczyna się niemal przypadkowo – jako kilku facetów, albo pracujących na etacie, albo studiujących, piszących prototyp czegoś, co może, jeśli wygląda obiecująco, przerodzić się w firmę. Na tym larwalnym etapie każda znacząca przeszkoda zatrzyma startup w miejscu. Pisanie oprogramowania mainframe wymagało zbyt dużego zaangażowania z góry. Maszyny deweloperskie były drogie, a ponieważ klienci to byłyby duże firmy, potrzebowałbyś imponująco wyglądającej siły sprzedaży, aby im to sprzedać. Rozpoczęcie startupu do pisania oprogramowania mainframe byłoby znacznie poważniejszym przedsięwzięciem niż po prostu zrobienie czegoś na swoim Apple II wieczorami. I tak nie powstało wiele startupów piszących aplikacje mainframe.
Przybycie komputerów stacjonarnych zainspirowało wiele nowego oprogramowania, ponieważ pisanie aplikacji dla nich wydawało się osiągalnym celem dla larwalnych startupów. Rozwój był tani, a klienci to byli indywidualni ludzie, do których można było dotrzeć przez sklepy komputerowe, a nawet pocztą.
Aplikacją, która wypchnęła komputery stacjonarne na główny nurt, był VisiCalc, pierwszy arkusz kalkulacyjny. Został napisany przez dwóch facetów pracujących na strychu, a jednak robił rzeczy, których nie mogło zrobić żadne oprogramowanie mainframe. [11] VisiCalc był w tamtych czasach tak dużym postępem, że ludzie kupowali Apple II tylko po to, aby go uruchomić. I to był początek trendu: komputery stacjonarne wygrały, ponieważ startupy pisały dla nich oprogramowanie.
Wygląda na to, że oprogramowanie serwerowe będzie dobre tym razem, ponieważ napiszą je startupy. Komputery są teraz tak tanie, że możesz zacząć, tak jak my, używając komputera stacjonarnego jako serwera. Niedrogie procesory zjadły rynek stacji roboczych (rzadko słyszysz teraz to słowo) i stanowią większość rynku serwerów; serwery Yahoo, które obsługują obciążenia tak wysokie, jak żadne inne w Internecie, wszystkie mają te same niedrogie procesory Intel, które masz w swoim komputerze stacjonarnym. A po napisaniu oprogramowania, wszystko, czego potrzebujesz, aby je sprzedać, to strona internetowa. Prawie wszyscy nasi użytkownicy trafili bezpośrednio na naszą stronę dzięki poczcie pantoflowej i odniesieniom w prasie. [12]
Viaweb był typowym larwalnym startupem. Baliśmy się rozpoczęcia firmy i przez pierwsze kilka miesięcy pocieszaliśmy się, traktując całość jako eksperyment, który mogliśmy w każdej chwili zakończyć. Na szczęście istniało niewiele przeszkód poza technicznymi. Kiedy pisaliśmy oprogramowanie, naszym serwerem WWW była ta sama maszyna stacjonarna, której używaliśmy do rozwoju, podłączona do świata zewnętrznego linią telefoniczną. Nasze jedyne wydatki w tej fazie to jedzenie i czynsz.
Jest tym więcej powodów, aby startupy pisały oprogramowanie internetowe teraz, ponieważ pisanie oprogramowania desktopowego stało się znacznie mniej zabawne. Jeśli chcesz teraz pisać oprogramowanie desktopowe, robisz to na warunkach Microsoftu, wywołując ich API i omijając ich wadliwy system operacyjny. A jeśli uda Ci się napisać coś, co się przyjmie, możesz odkryć, że po prostu robiłeś badania rynku dla Microsoftu.
Jeśli firma chce stworzyć platformę, na której startupy będą budować, musi uczynić ją czymś, czego sami hakerzy będą chcieli używać. Oznacza to, że musi być niedroga i dobrze zaprojektowana. Mac był popularny wśród hakerów, gdy pojawił się po raz pierwszy, i wielu z nich pisało dla niego oprogramowanie. [13] Widzisz to mniej w przypadku Windows, ponieważ hakerzy z niego nie korzystają. Ludzie, którzy dobrze piszą oprogramowanie, zazwyczaj teraz używają Linuksa lub FreeBSD.
Nie sądzę, abyśmy założyli startup do pisania oprogramowania desktopowego, ponieważ oprogramowanie desktopowe musi działać na Windows, a zanim będziemy mogli napisać oprogramowanie dla Windows, musielibyśmy z niego korzystać. Sieć pozwoliła nam ominąć Windows i dostarczać oprogramowanie działające na Unixie bezpośrednio do użytkowników przez przeglądarkę. To wyzwalająca perspektywa, bardzo podobna do pojawienia się komputerów PC dwadzieścia pięć lat temu.
Microsoft
Kiedy pojawiły się komputery stacjonarne, IBM był gigantem, którego wszyscy się bali. Trudno to sobie teraz wyobrazić, ale bardzo dobrze pamiętam to uczucie. Teraz przerażającym gigantem jest Microsoft, i nie sądzę, aby byli tak ślepi na stojące przed nimi zagrożenie, jak był IBM. W końcu Microsoft celowo zbudował swój biznes w ślepym punkcie IBM.
Wspomniałem wcześniej, że moja matka tak naprawdę nie potrzebuje komputera stacjonarnego. Większość użytkowników prawdopodobnie nie potrzebuje. To problem dla Microsoftu i oni o tym wiedzą. Jeśli aplikacje działają na zdalnych serwerach, nikt nie potrzebuje Windows. Co zrobi Microsoft? Czy będą w stanie wykorzystać swoją kontrolę nad pulpitem, aby zapobiec lub ograniczyć ten nowy rodzaj oprogramowania?
Moim zdaniem Microsoft opracuje jakiś rodzaj hybrydy serwer/pulpit, w której system operacyjny będzie współpracował z kontrolowanymi przez nich serwerami. Co najmniej pliki będą centralnie dostępne dla użytkowników, którzy tego chcą. Nie spodziewam się, że Microsoft pójdzie na całość i będzie wykonywał obliczenia na serwerze, mając tylko przeglądarkę jako klienta, jeśli będzie mógł tego uniknąć. Jeśli potrzebujesz tylko przeglądarki jako klienta, nie potrzebujesz Microsoftu na kliencie, a jeśli Microsoft nie kontroluje klienta, nie może popychać użytkowników w kierunku swoich aplikacji serwerowych.
Myślę, że Microsoft będzie miał trudności z utrzymaniem dżina w butelce. Będzie zbyt wiele różnych typów klientów, aby mogli je wszystkie kontrolować. A jeśli aplikacje Microsoftu będą działać tylko z niektórymi klientami, konkurenci będą mogli ich prześcignąć, oferując aplikacje działające z dowolnego klienta. [14]
W świecie aplikacji internetowych nie ma automatycznego miejsca dla Microsoftu. Mogą odnieść sukces w stworzeniu sobie miejsca, ale nie sądzę, aby zdominowali ten nowy świat tak, jak zdominowali świat aplikacji desktopowych.
To nie tyle konkurent ich potknie, co oni sami potkną się o siebie. Wraz z rozwojem oprogramowania internetowego będą oni stawiali czoła nie tylko problemom technicznym, ale także własnemu życzeniowemu myśleniu. To, co muszą zrobić, to kanibalizować swój obecny biznes, a ja nie widzę, żeby się na to odważyli. Ta sama bezkompromisowość, która doprowadziła ich tak daleko, teraz będzie działać przeciwko nim. IBM był w dokładnie tej samej sytuacji i nie mógł sobie z tym poradzić. IBM wszedł późno i niechętnie na rynek mikrokomputerów, ponieważ byli ambiwalentni wobec zagrożenia dla swojej kury znoszącej złote jajka, jakim były obliczenia mainframe. Microsoft będzie podobnie ograniczony przez chęć ratowania pulpitu. Kura znosząca złote jajka może być cholernie ciężkim ciężarem na plecach.
Nie mówię, że nikt nie zdominuje aplikacji serwerowych. Ktoś prawdopodobnie w końcu to zrobi. Ale myślę, że będzie długi okres radosnego chaosu, podobnie jak w początkach mikrokomputerów. To był dobry czas dla startupów. Wiele małych firm prosperowało i robiło to, tworząc fajne rzeczy.
Startupy, ale jeszcze bardziej
Klasyczny startup jest szybki i nieformalny, z niewielką liczbą osób i niewielką ilością pieniędzy. Te nieliczne osoby pracują bardzo ciężko, a technologia potęguje efekt podejmowanych przez nich decyzji. Jeśli wygrają, wygrają wielko.
W startupie piszącym aplikacje internetowe wszystko, co kojarzysz ze startupami, jest doprowadzone do skrajności. Możesz napisać i uruchomić produkt z jeszcze mniejszą liczbą osób i jeszcze mniejszą ilością pieniędzy. Musisz być jeszcze szybszy i możesz sobie pozwolić na większą nieformalność. Możesz dosłownie uruchomić swój produkt jako trzech facetów siedzących w salonie mieszkania i serwer umieszczony w ISP. My tak zrobiliśmy.
Z czasem zespoły stawały się mniejsze, szybsze i bardziej nieformalne. W 1960 roku rozwój oprogramowania oznaczał pokój pełen mężczyzn w okularach z oprawkami i wąskimi czarnymi krawatami, pracowicie piszących dziesięć linii kodu dziennie na formularzach kodowania IBM. W 1980 roku był to zespół ośmiu do dziesięciu osób noszących dżinsy do biura i piszących na vt100. Teraz to kilku facetów siedzących w salonie z laptopami. (A dżinsy okazują się nie być ostatnim słowem w nieformalności.)
Startupy są stresujące, a to, niestety, jest również doprowadzone do skrajności w przypadku aplikacji internetowych. Wiele firm produkujących oprogramowanie, zwłaszcza na początku, ma okresy, w których programiści spali pod swoimi biurkami i tak dalej. Niepokojącą rzeczą w oprogramowaniu internetowym jest to, że nic nie powstrzymuje tego przed staniem się domyślnym. Historie o spaniu pod biurkami zazwyczaj kończą się: wtedy w końcu wysłaliśmy to i wszyscy poszliśmy do domu i spaliśmy przez tydzień. Oprogramowanie internetowe nigdy nie jest wysyłane. Możesz pracować po 16 godzin dziennie tak długo, jak chcesz. A ponieważ możesz, a Twoi konkurenci mogą, masz tendencję do bycia zmuszonym do tego. Możesz, więc musisz. To Prawo Parkinsona działające wstecz.
Najgorsze nie są godziny, ale odpowiedzialność. Programiści i administratorzy systemów tradycyjnie mają swoje własne, odrębne zmartwienia. Programiści muszą martwić się o błędy, a administratorzy systemów muszą martwić się o infrastrukturę. Programiści mogą spędzić długi dzień z łokciami zanurzonymi w kodzie źródłowym, ale w pewnym momencie mogą iść do domu i zapomnieć o tym. Administratorzy systemów nigdy tak naprawdę nie zostawiają pracy za sobą, ale kiedy zostaną wezwani o 4:00 nad ranem, zazwyczaj nie muszą robić niczego bardzo skomplikowanego. W przypadku aplikacji internetowych te dwa rodzaje stresu się łączą. Programiści stają się administratorami systemów, ale bez jasno określonych granic, które zazwyczaj czynią pracę znośną.
W Viaweb spędziliśmy pierwsze sześć miesięcy na pisaniu oprogramowania. Pracowaliśmy w zwykłych długich godzinach wczesnego startupu. W firmie produkującej oprogramowanie desktopowe byłby to etap, na którym ciężko pracowaliśmy, ale czuliśmy się jak na wakacjach w porównaniu do następnego etapu, kiedy wprowadzaliśmy użytkowników na nasz serwer. Drugą największą korzyścią ze sprzedaży Viaweb firmie Yahoo (poza pieniędzmi) była możliwość zrzucenia ostatecznej odpowiedzialności za całość na barki dużej firmy.
Oprogramowanie desktopowe zmusza użytkowników do zostania administratorami systemów. Oprogramowanie internetowe zmusza programistów. Jest mniej stresu w sumie, ale więcej dla programistów. To niekoniecznie zła wiadomość. Jeśli jesteś startupem konkurującym z dużą firmą, to dobra wiadomość. [15] Aplikacje internetowe oferują prosty sposób na prześcignięcie konkurencji. Żaden startup nie prosi o więcej.
Wystarczająco Dobre
Jedną z rzeczy, która może Cię zniechęcić do pisania aplikacji internetowych, jest kiepskość stron internetowych jako interfejsu użytkownika. To jest problem, przyznaję. Było kilka rzeczy, które naprawdę chcielibyśmy dodać do HTML i HTTP. Ważne jest jednak to, że strony internetowe są po prostu wystarczająco dobre.
Istnieje tu podobieństwo do pierwszych mikrokomputerów. Procesory w tych maszynach nie były faktycznie przeznaczone do bycia procesorami komputerów. Były zaprojektowane do użycia w takich rzeczach, jak sygnalizacja świetlna. Ale faceci tacy jak Ed Roberts, który zaprojektował Altair, zdali sobie sprawę, że są po prostu wystarczająco dobre. Można było połączyć jeden z tych układów z niewielką ilością pamięci (256 bajtów w pierwszym Altair) i przełącznikami na panelu przednim, a otrzymasz działający komputer. Możliwość posiadania własnego komputera była tak ekscytująca, że było wielu ludzi, którzy chcieli je kupić, jakkolwiek ograniczone.
Strony internetowe nie zostały zaprojektowane jako interfejs użytkownika dla aplikacji, ale są po prostu wystarczająco dobre. A dla znacznej liczby użytkowników oprogramowanie, z którego można korzystać z dowolnej przeglądarki, będzie samo w sobie wystarczającą wygraną, aby zrównoważyć wszelkie niezręczności w interfejsie użytkownika. Może nie można napisać najlepszego arkusza kalkulacyjnego za pomocą HTML, ale można napisać arkusz kalkulacyjny, z którego kilka osób może korzystać jednocześnie z różnych lokalizacji bez specjalnego oprogramowania klienckiego, lub który może zawierać strumienie danych na żywo, lub który może powiadomić Cię, gdy zostaną wyzwolone określone warunki. Co ważniejsze, można pisać nowe rodzaje aplikacji, które jeszcze nie mają nazw. VisiCalc nie był tylko wersją aplikacji mainframe na mikrokomputer, w końcu – był to nowy typ aplikacji.
Oczywiście, aplikacje serwerowe nie muszą być oparte na sieci. Można mieć jakiś inny rodzaj klienta. Ale jestem całkiem pewien, że to zły pomysł. Byłoby bardzo wygodne, gdyby można było założyć, że każdy zainstaluje Twój klient – tak wygodne, że można by łatwo przekonać siebie, że wszyscy to zrobią – ale jeśli tego nie zrobią, jesteś w tarapatach. Ponieważ oprogramowanie internetowe niczego nie zakłada o kliencie, będzie działać wszędzie tam, gdzie działa sieć. To już duża zaleta, a zaleta ta będzie rosła wraz z rozprzestrzenianiem się nowych urządzeń internetowych. Użytkownicy polubią Cię, ponieważ Twoje oprogramowanie po prostu działa, a Twoje życie będzie łatwiejsze, ponieważ nie będziesz musiał go dostosowywać do każdego nowego klienta. [16]
Czuję, że obserwowałem ewolucję sieci tak blisko, jak każdy, i nie potrafię przewidzieć, co stanie się z klientami. Konwergencja prawdopodobnie nadchodzi, ale dokąd? Nie potrafię wybrać zwycięzcy. Jedną rzeczą, którą mogę przewidzieć, jest konflikt między AOL a Microsoftem. Cokolwiek .NET Microsoftu okaże się, prawdopodobnie będzie obejmować połączenie pulpitu z serwerami. Chyba że AOL się odeprze, zostanie odsunięty na bok lub przekształcony w kanał między oprogramowaniem klienckim a serwerowym Microsoftu. Jeśli Microsoft i AOL wejdą w wojnę klientów, jedyną rzeczą, która na pewno zadziała na obu, będzie przeglądanie sieci, co oznacza, że aplikacje internetowe będą jedynymi, które działają wszędzie.
Jak to wszystko się potoczy? Nie wiem. I nie musisz wiedzieć, jeśli postawisz na aplikacje internetowe. Nikt nie może tego złamać bez łamania przeglądania. Sieć może nie być jedynym sposobem dostarczania oprogramowania, ale jest to sposób, który działa teraz i będzie działał przez długi czas. Aplikacje internetowe są tanie w rozwoju i łatwe do dostarczenia nawet dla najmniejszego startupu. Wymagają dużo pracy, i to o szczególnie stresującym charakterze, ale to tylko zwiększa szanse dla startupów.
Dlaczego nie?
E. B. White z rozbawieniem dowiedział się od swojego przyjaciela rolnika, że wiele ogrodzeń elektrycznych nie ma przez nie przepływającego prądu. Krowy najwyraźniej uczą się ich unikać, a potem prąd nie jest już potrzebny. „Powstańcie, krowy!” – napisał – „Weźcie swoją wolność, gdy despoci śpią!”
Jeśli jesteś hakerem, który kiedyś myślał o założeniu startupu, prawdopodobnie dwie rzeczy powstrzymują Cię przed tym. Po pierwsze, nie wiesz nic o biznesie. Po drugie, boisz się konkurencji. Żadne z tych ogrodzeń nie ma prądu.
Jest tylko dwie rzeczy, które musisz wiedzieć o biznesie: zbuduj coś, co pokochają użytkownicy, i zarabiaj więcej, niż wydajesz. Jeśli te dwie rzeczy zrobisz dobrze, będziesz przed większością startupów. Resztę możesz rozgryźć w trakcie.
Może na początku nie będziesz zarabiać więcej, niż wydajesz, ale dopóki luka szybko się zmniejsza, będziesz w porządku. Jeśli zaczniesz z niedostatecznym finansowaniem, przynajmniej zachęci to do oszczędności. Im mniej wydajesz, tym łatwiej zarobić więcej, niż wydajesz. Na szczęście uruchomienie aplikacji internetowej może być bardzo tanie. Uruchomiliśmy za mniej niż 10 000 dolarów, a dziś byłoby to jeszcze tańsze. Musieliśmy wydać tysiące na serwer, a tysiące więcej na uzyskanie SSL. (Jedyną firmą sprzedającą oprogramowanie SSL w tamtym czasie był Netscape.) Teraz możesz wynająć znacznie potężniejszy serwer, z wliczonym SSL, za mniej niż zapłaciliśmy tylko za przepustowość. Możesz uruchomić aplikację internetową teraz za mniej niż koszt drogiego krzesła biurowego.
Jeśli chodzi o budowanie czegoś, co pokochają użytkownicy, oto kilka ogólnych wskazówek. Zacznij od stworzenia czegoś czystego i prostego, czego sam chciałbyś używać. Szybko wypuść wersję 1.0, a następnie kontynuuj ulepszanie oprogramowania, uważnie słuchając użytkowników. Klient zawsze ma rację, ale różni klienci mają rację w różnych kwestiach; najmniej wyrafinowani użytkownicy pokazują Ci, co musisz uprościć i wyjaśnić, a najbardziej wyrafinowani mówią Ci, jakie funkcje musisz dodać. Najlepszą rzeczą, jaką może być oprogramowanie, jest łatwość, ale sposób, aby to osiągnąć, to ustawienie domyślnych ustawień na właściwe, a nie ograniczanie wyborów użytkowników. Nie popadaj w samozadowolenie, jeśli oprogramowanie Twoich konkurentów jest kiepskie; standardem, do którego porównujesz swoje oprogramowanie, jest to, czym mogłoby być, a nie to, co mają Twoi obecni konkurenci. Używaj swojego oprogramowania przez cały czas. Viaweb miał być kreatorem sklepów internetowych, ale użyliśmy go również do stworzenia naszej własnej strony. Nie słuchaj ludzi od marketingu, projektantów czy kierowników produktu tylko ze względu na ich tytuły zawodowe. Jeśli mają dobre pomysły, wykorzystaj je, ale to Ty musisz zdecydować; oprogramowanie musi być projektowane przez hakerów, którzy rozumieją projektowanie, a nie przez projektantów, którzy trochę wiedzą o oprogramowaniu. Jeśli nie potrafisz projektować oprogramowania tak dobrze, jak je wdrażać, nie zaczynaj startupu.
Porozmawiajmy teraz o konkurencji. Obawiasz się prawdopodobnie nie grup hakerów takich jak Ty, ale faktycznych firm, z biurami, planami biznesowymi, sprzedawcami i tak dalej, prawda? Cóż, oni bardziej boją się Ciebie niż Ty ich, i mają rację. Jest znacznie łatwiej dla kilku hakerów wymyślić, jak wynająć przestrzeń biurową lub zatrudnić sprzedawców, niż dla firmy dowolnej wielkości, aby napisać oprogramowanie. Byłem po obu stronach i wiem. Kiedy Viaweb został kupiony przez Yahoo, nagle zacząłem pracować dla dużej firmy i było to jak próba biegu przez wodę po pas.
Nie chcę umniejszać Yahoo. Mieli kilku dobrych hakerów, a najwyższe kierownictwo było prawdziwymi „butt-kickers”. Jak na dużą firmę, byli wyjątkowi. Ale nadal byli tylko około dziesięciu razy mniej produktywni niż mały startup. Żadna duża firma nie może zrobić znacznie lepiej niż to. To, co jest przerażające w Microsoft, to to, że tak duża firma w ogóle może rozwijać oprogramowanie. Są jak góra, która potrafi chodzić.
Nie daj się zastraszyć. Możesz zrobić tyle, ile Microsoft nie może, ile oni mogą zrobić, czego Ty nie możesz. I nikt Cię nie powstrzyma. Nie musisz prosić nikogo o pozwolenie na rozwijanie aplikacji internetowych. Nie musisz zawierać umów licencyjnych, zdobywać miejsca na półkach w sklepach detalicznych ani błagać o dołączenie swojej aplikacji do systemu operacyjnego. Możesz dostarczać oprogramowanie bezpośrednio do przeglądarki, a nikt nie może stanąć między Tobą a potencjalnymi użytkownikami bez uniemożliwienia im przeglądania sieci.
Możesz w to nie wierzyć, ale obiecuję Ci, że Microsoft się Ciebie boi. Przeciętni menedżerowie średniego szczebla mogą nie, ale Bill tak, ponieważ sam był Tobą w 1975 roku, ostatnim razem, gdy pojawił się nowy sposób dostarczania oprogramowania.
Przypisy
[1] Zdając sobie sprawę, że większość pieniędzy tkwi w usługach, firmy budujące lekkie klienty zazwyczaj próbowały połączyć sprzęt z usługą online. To podejście nie działało dobrze, częściowo dlatego, że potrzebne są dwa różne rodzaje firm do produkcji elektroniki użytkowej i prowadzenia usługi online, a częściowo dlatego, że użytkownicy nienawidzą tego pomysłu. Oddawanie maszynki do golenia i zarabianie na żyletkach może działać dla Gillette, ale maszynka do golenia to znacznie mniejsze zobowiązanie niż terminal internetowy. Producenci telefonów komórkowych są zadowoleni ze sprzedaży sprzętu bez próby przechwycenia przychodów z usług. Taki powinien być prawdopodobnie model dla klientów internetowych. Gdyby ktoś po prostu sprzedawał ładnie wyglądające pudełko z przeglądarką internetową, której można używać do łączenia się z dowolnym ISP, kupiłby je każdy technofob w kraju.
[2] Bezpieczeństwo zawsze zależy bardziej od niepopełniania błędów niż od jakiejkolwiek decyzji projektowej, ale natura oprogramowania serwerowego sprawi, że programiści będą bardziej zwracać uwagę na niepopełnianie błędów. Naruszenie bezpieczeństwa serwera może spowodować takie szkody, że ASP (które chcą pozostać w biznesie) prawdopodobnie będą ostrożne w kwestii bezpieczeństwa.
[3] W 1995 roku, kiedy zaczynaliśmy Viaweb, aplety Java miały być technologią, której wszyscy mieli używać do rozwijania aplikacji serwerowych. Aplety wydawały nam się przestarzałym pomysłem. Pobierać programy do uruchomienia na kliencie? Prościej jest pójść na całość i uruchomić programy na serwerze. Nie traciliśmy wiele czasu na aplety, ale niezliczone inne startupy musiały zostać zwabione w tę pułapkę. Niewielu mogło uciec żywych, albo Microsoft nie mógłby sobie pozwolić na porzucenie Javy w najnowszej wersji Explorera.
[4] Ten punkt pochodzi od Trevora Blackwella, który dodaje „koszt pisania oprogramowania rośnie bardziej niż liniowo wraz z jego rozmiarem. Być może wynika to głównie z naprawiania starych błędów, a koszt może być bardziej liniowy, jeśli wszystkie błędy zostaną szybko znalezione”.
[5] Najtrudniejszym rodzajem błędu do znalezienia może być wariant błędu złożonego, w którym jeden błąd kompensuje drugi. Kiedy naprawisz jeden błąd, drugi staje się widoczny. Ale będzie wyglądać, jakby poprawka była winna, ponieważ to była ostatnia rzecz, którą zmieniłeś.
[6] Wewnątrz Viaweb mieliśmy kiedyś konkurs na opisanie najgorszej rzeczy w naszym oprogramowaniu. Dwóch pracowników obsługi klienta zremisowało w pierwszej nagrodzie z wpisami, które do dziś przyprawiają mnie o dreszcze. Obie problemy naprawiliśmy natychmiast.
[7] Robert Morris napisał system zamówień, którego używali klienci do składania zamówień. Trevor Blackwell napisał generator obrazów i menedżera, którego używali sprzedawcy do pobierania zamówień, przeglądania statystyk i konfigurowania nazw domen itp. Ja napisałem edytor, którego używali sprzedawcy do budowania swoich stron. System zamówień i generator obrazów zostały napisane w C i C++, menedżer głównie w Perlu, a edytor w Lisp.
[8] Dyskryminacja cenowa jest tak powszechna (jak często słyszałeś, jak sprzedawca twierdzi, że jego siła nabywcza oznacza niższe ceny dla Ciebie?), że byłem zaskoczony, odkrywając, że została zakazana w USA przez Robinson-Patman Act z 1936 roku. Prawo to nie wydaje się być rygorystycznie egzekwowane.
[9] W książce No Logo Naomi Klein mówi, że marki odzieżowe preferowane przez „młodzież miejską” nie starają się zbytnio zapobiegać kradzieżom w sklepach, ponieważ na ich docelowym rynku złodzieje sklepowi są również liderami mody.
[10] Firmy często zastanawiają się, co outsourcingować, a czego nie. Jedna z możliwych odpowiedzi: outsourcingować każde zadanie, które nie jest bezpośrednio narażone na presję konkurencyjną, ponieważ jego outsourcing wystawi je na presję konkurencyjną.
[11] Dwóch facetów to byli Dan Bricklin i Bob Frankston. Dan napisał prototyp w Basic w ciągu kilku dni, a następnie przez następny rok pracowali razem (głównie w nocy), aby stworzyć potężniejszą wersję napisaną w języku maszynowym 6502. Dan był wtedy na Harvard Business School, a Bob formalnie pracował na etacie, pisząc oprogramowanie. „Nie było wielkiego ryzyka w prowadzeniu biznesu” – napisał Bob – „Jeśli się nie uda, to się nie uda. Nic wielkiego”.
[12] Nie jest to tak łatwe, jak przedstawiam. Dotarcie do poczty pantoflowej zajęło żmudnie długo, a my nie zaczęliśmy otrzymywać dużej liczby relacji prasowych, dopóki nie zatrudniliśmy firmy PR (wprawdzie najlepszej w branży) za 16 000 dolarów miesięcznie. Jednak prawdą było, że jedynym znaczącym kanałem była nasza własna strona internetowa.
[13] Jeśli Mac był tak świetny, dlaczego przegrał? Znowu koszt. Microsoft skupił się na biznesie oprogramowania i uwolnił rój tanich dostawców komponentów na sprzęt Apple. Nie pomogło również to, że w krytycznym okresie przejęli kontrolę „garniturzy”.
[14] Jedną z rzeczy, która pomogłaby aplikacjom internetowym i pomogłaby zapobiec przyćmieniu oprogramowania następnej generacji przez Microsoft, byłaby dobra przeglądarka open-source. Mozilla jest open-source, ale wydaje się, że ucierpiała na tym, że tak długo była oprogramowaniem korporacyjnym. Mała, szybka przeglądarka, która byłaby aktywnie utrzymywana, byłaby sama w sobie wielką rzeczą, a także prawdopodobnie zachęciłaby firmy do tworzenia małych urządzeń internetowych.
Między innymi odpowiednia przeglądarka open-source spowodowałaby dalszy rozwój HTTP i HTML (jak np. Perl). Bardzo pomogłoby aplikacjom internetowym rozróżnienie między zaznaczeniem linku a jego kliknięciem; wszystko, czego by to wymagało, to trywialne ulepszenie HTTP, aby umożliwić wiele adresów URL w żądaniu. Menu kaskadowe również byłyby dobre.
Jeśli chcesz zmienić świat, napisz nowe Mosaic. Myślisz, że jest za późno? W 1998 roku wiele osób myślało, że jest za późno na uruchomienie nowej wyszukiwarki, ale Google udowodnił im, że się mylą. Zawsze jest miejsce na coś nowego, jeśli obecne opcje są wystarczająco słabe. Upewnij się, że najpierw działa na wszystkich darmowych systemach operacyjnych – nowe rzeczy zaczynają się od ich użytkowników.
[15] Trevor Blackwell, który prawdopodobnie wie o tym więcej z doświadczenia osobistego niż ktokolwiek inny, pisze:
„Poszedłbym dalej, mówiąc, że ponieważ oprogramowanie serwerowe jest tak trudne dla programistów, powoduje fundamentalną zmianę gospodarczą od dużych firm. Wymaga intensywności i poświęcenia od programistów, na które będą oni gotowi tylko wtedy, gdy będzie to ich własna firma. Firmy produkujące oprogramowanie mogą zatrudniać wykwalifikowanych ludzi do pracy w niezbyt wymagającym środowisku i zatrudniać niewykwalifikowanych ludzi do znoszenia trudności, ale nie mogą zatrudniać wysoko wykwalifikowanych ludzi do rozbijania sobie tyłków. Ponieważ kapitał nie jest już potrzebny, duże firmy mają niewiele do zaoferowania”.
[16] W oryginalnej wersji tego eseju odradzałem używanie Javascript. To był dobry plan w 2001 roku, ale Javascript działa teraz.
Dzięki Sarah Harlin, Trevorowi Blackwellowi, Robertowi Morrisowi, Ericowi Raymondowi, Kenowi Andersonowi i Danowi Giffinowi za przeczytanie wersji roboczych tego artykułu; Danowi Bricklinowi i Bobowi Frankstonowi za informacje o VisiCalc; i ponownie Kenowi Andersonowi za zaproszenie mnie do przemówienia w BBN.
Ten esej i 14 innych znajdziesz w Hackers & Painters.