Pracowałem nad projektem trzy miesiące temu, a potem nagle pojawił się kolejny pilny projekt i zostałem poproszony o zwrócenie mojej uwagi.
Od jutra wracam do starego projektu. Zdaję sobie sprawę, że nie pamiętam, co dokładnie robiłem. Nie wiem od czego zacząć.
Jak mogę udokumentować projekt, aby za każdym razem, gdy patrzę wstecz, nie zabierało mi więcej niż kilka minut, aby zacząć od miejsca, z którego wyjechałem. Czy są najlepsze praktyki?
project-management
documentation
Aquarius_Girl
źródło
źródło
Odpowiedzi:
Chciałem tylko przekazać kilka rad, które nie będą przydatne w obecnej sytuacji, ale możesz zacząć je wdrażać, aby pomóc w przyszłości.
Oczywiście są oczywisti kandydaci, tacy jak listy rzeczy do zrobienia i dzienniki problemów; przyjrzenie się ostatnio dodanym problemom powinno dać ci wskazówkę co robiłeś, kiedy byłeś wyłączony z projektu.
Przy poprzednich projektach, nad którymi pracowałem, oczekiwano, że ludzie będą prowadzić dziennik projektu w ramach procesu zarządzania jakością. Treść nie była bardzo jasno sprecyzowana, ale pomysł polegał na prowadzeniu codziennego dziennika rzeczy związanych z projektem, które mogą być przydatne do dalszej pracy w przyszłości lub do przeglądu działań po zakończeniu; na przykład:
Obserwacje dotyczące jakości projektu
Todo elementy / problemy , których nie chcesz formalnie rejestrować w narzędziu do śledzenia problemów
Decyzje projektowe - szczególnie nietrywialne.
Napotkane problemy i sposób ich rozwiązania. Bardzo ważny, moim zdaniem: kiedy napotkasz problem, zanotuj go w dzienniku.
Te dwa ostatnie punkty są bardzo ważne. Często napotykałem podobną sytuację lub problem - czasami w zupełnie innym projekcie - i myślałem „hmm, pamiętam, że spędziłem nad tym dzień, ale jakie było rozwiązanie ponownie?”
Kiedy po pewnym czasie wrócisz do projektu, czytanie dziennika projektu (niezależnie od tego, czy jest to Twój, czy najnowszy programista) powinno przywrócić Cię do przepływu, który miałeś po opuszczeniu projektu, i ostrzec Cię przed niektórymi pułapkami w przeciwnym razie mogą wpaść ponownie.
źródło
Listy rzeczy do zrobienia są magiczne. Ogólnie rzecz biorąc, musisz zachować aktywną listę rzeczy do zrobienia dla każdego projektu, a nawet gdy jesteś zajęty programowaniem, jeśli pomyślisz o czymś, co trzeba zrobić i nie możesz tego zrobić natychmiast, to trafia na listę. Przechowuj tę listę w dobrze znanym miejscu, w arkuszu kalkulacyjnym lub pliku tekstowym w folderze projektu elektronicznie lub w dzienniku papierowym.
Ponadto, ilekroć opuszczasz projekt na noc (lub w weekend), weź notatkę z napisem i napisz następną rzecz, którą zamierzasz zrobić na notatce, i przyklej ją do monitora. To zwiększa prawdopodobieństwo, że szybko wrócisz do niego następnego ranka.
Edytuj :
Powinienem wspomnieć, że listy rzeczy do zrobienia (w szczególności listy rzeczy do zrobienia z priorytetem posegregowane według miejsca i projektu) są kluczową częścią książki Getting Things Done , na którą mam duży wpływ.
źródło
todo
cel w swoim makefile, który zrzuca je również użyteczne.Co zrobić teraz?
Domyślam się, że nie zrobiłeś żadnej z następnej sekcji. Więc wyszukiwanie listy rzeczy do zrobienia nie będzie działać.
Jak ulepszyć to dla siebie w przyszłości?
Po pierwsze, musisz mieć system śledzenia twoich todos. Czy masz teraz taki system? Jak zarządzasz obecną pracą projektową?
Mogłem jutro zostać potrącony przez autobus, a mój zespół miałby dobry pomysł na ponad 90% moich akcji. Wynika to z faktu, że mam spójny system dokumentowania moich:
Ponadto używam VCS i komentuję mój kod, jeśli to konieczne.
Działa to dla mnie i mojego zespołu, ponieważ jestem głównym programistą. Możesz użyć jakiegoś systemu śledzenia problemów dla zespołu. Lub zaległości podczas pracy z Agile. Istnieje mnóstwo opcji. Jeśli naprawdę Cię to interesuje, przeczytaj artykuł Getting Things Done lub inne odpowiednie metodologie zarządzania zadaniami, które istnieją niemal dokładnie z powodu tego, co opisujesz.
Jaki jest sens?
Specyfika systemu jest mniej istotna niż to, że jest to system spójny i używasz go . I że go używasz. I użyj tego. To jest ważne. Ważniejsze niż ładny, idealny system, którego nie używasz. Nie rób „dobrze, większość mojej pracy jest tutaj, ale niektóre są w mojej głowie”, bo inaczej będziesz nienawidził wracania do projektu.
Upewnij się także, że twoje komentarze wyjaśniają „dlaczego”, a nie tylko „co” dla kodu. O wiele łatwiej jest przeczytać „to naprawić błąd w IE8” i przypomnieć sobie, co robi kod, niż komentarz po prostu wyjaśniający szczegóły techniczne.
źródło
Moim zdaniem „wznowienie” projektu kodu składa się z dwóch części:
Jest to jedna z tych rzeczy, które moim zdaniem, jeśli wykonujesz kontrolę wersji we właściwy sposób, będzie to twój „drugi mózg”.
Gdzie skończyłeś ? Tak długo, jak często popełniasz kod, spójrz na swój ostatni zestaw zmian. Najprawdopodobniej pobudzi coś do myślenia. Jeśli nie, spójrz na kilka ostatnich, zaczynając od najstarszych i powtarzając zatwierdzenia.
Jeśli chodzi o to, co pozostało do zrobienia , zaległości powinny służyć temu celowi (lub liście rzeczy do zrobienia lub jakkolwiek chcesz ją nazwać. Zasadniczo elementy na przyszłość).
Nie jestem etatowym programistą. Jestem programistą, który hakuje w nocy i weekendy. Z tego powodu, kiedy praca lub inne rzeczy niezwiązane z programowaniem mają wyższy priorytet, czasami mogę spędzać dni i tygodnie, nawet nie podnosząc mojego kodu na pierwszy rzut oka. Powyższe okazało się dość skuteczne.
źródło
To nie ma być pełna odpowiedź - jest już kilka bardzo dobrych, które wspominają o ważnych rzeczach, takich jak korzystanie z VCS i oprogramowania do zarządzania projektami - ale raczej uzupełnienie dodające kilka punktów, których nie widziałem w żadnym innym, okaże się bardzo pomocny i mam nadzieję, że inni również mogą być pomocni.
1. Żadne zadanie nie jest za wcześnie ani za małe, aby je spisać
Ludzie zwykle sporządzają listy rzeczy do zrobienia dla rzeczy, które planują robić w przyszłości , ale ponieważ programowanie wymaga koncentracji, a ponieważ możemy przerwać w dowolnym momencie , uznałem, że pomocne jest zapisanie nawet tego, co robię teraz, lub co mam zacząć w ciągu kilku sekund . Możesz czuć, że znajdujesz się w strefie i nie możesz zapomnieć o rozwiązaniu, które właśnie uderzyło cię w tej chwili aha , ale kiedy twój współpracownik wpadnie do twojej kostki, aby pokazać zdjęcie jego zainfekowanego palca u nóg , i jesteś tylko w końcu się go pozbyć, zaczynając gryźć się na własnym ramieniu , możesz żałować, że nie napisałeś szybkiej notatki, nawet jeśli tylko na kartce Post-It ™.
Oczywiście lepszy może być inny, bardziej trwały nośnik (szczególnie lubię OmniFocus ), ale chodzi o to, żeby przynajmniej gdzieś go mieć , nawet jeśli skończysz za 20 minut, a potem wyrzucisz Post-It ™. Chociaż możesz odkryć, że informacje te stają się przydatne, aby wystawiać klientowi arkusze czasu pracy lub faktury, lub gdy szef / klient pyta cię, nad czym pracowałeś i nie pamiętasz. Jeśli upuścisz wszystkie te notatki w pudełku, szufladzie lub folderze, to kiedy nadejdzie duża przerwa - przerywający projekt - możesz je przejrzeć i zapamiętać wiele rzeczy, które zrobiłeś, aby doprowadzić kod do punktu, w którym znajdź go po powrocie do projektu.
2. Użyj tablicy na biurku, aby uchwycić pomysły na duże obrazy
Obok biurka mam tablicę o wymiarach 3 x 4, więc kiedy rozpoczynam projekt, mogę przeprowadzić burzę mózgów na temat rozwiązań wszystkich problemów, które dostrzegam w projekcie. Mogą to być schematy architektoniczne, przypadki użycia, listy zagrożeń i przeszkód lub cokolwiek, co wydaje się istotne dla Ciebie.
Niektóre bardziej sformalizowane podejścia wymagają generowania diagramów i przypadków użycia i tak dalej jako „rezultatów” w formie papierowej lub elektronicznej, ale uważam, że może to spowodować wiele dodatkowej pracy i po prostu stać się serią podprojektów, które kończą się oderwanie się od faktycznego celu głównego projektu i tylko część sformalizowanego procesu, który musisz zrobić, ale na który nikt nie zwraca dużej uwagi. Tablica to najprostsza rzecz, która faktycznie działa, przynajmniej z mojego doświadczenia. Jest tak wytrwały, jak chcesz (z kamerą) i, co najważniejsze, pozwala od razu odrzucić pomysły.
Myślę, że lepiej z piórem w dłoni, więc zrzut myśli na białą powierzchnię przychodzi mi naturalnie, ale jeśli nie uważasz, że tak jest w twoim przypadku, oto kilka pytań, które mogą pomóc ci zdecydować, co jest istotne :
(Kiedy po raz pierwszy spisuję pomysły, martwię się tylko tym, że mają one sens dla mojego obecnego ja. Gdy są już na dole, mogę bardziej krytycznie na nie spojrzeć i wprowadzić zmiany, aby upewnić się, że mają sens dla mojego przyszłego ja lub innych. o komunikowaniu się z innymi podczas ich zapisywania na początku może prowadzić do blokowania pisarzy - umysłu zablokowanego przez konkurujące ze sobą cele. Najpierw zejdź na dół; martw się o jasność później).
Polecam wydać pieniądze, aby kupić przyzwoitą tablicę, co najmniej 3 „x 4”, i powiesić ją w miejscu, w którym normalnie pracujesz. Tablica fizyczna ma wiele zalet w porównaniu z dowolnym systemem wirtualnym.
Tracisz wiele korzyści, jeśli po prostu użyjesz tablicy w pokoju konferencyjnym, a następnie zrobisz migawkę telefonem. Jeśli zarabiasz na programowaniu, jest to warte kosztu porządnej tablicy.
Jeśli masz inny projekt, który przerwie ten, który zapełnił twoją tablicę, być może będziesz musiał skorzystać z migawki w telefonie, ale przynajmniej będziesz miał to za 3 miesiące, kiedy „pilny” projekt zostanie zakończony i będziesz musiał wróć do drugiego. Jeśli chcesz odtworzyć go na swojej tablicy, prawdopodobnie zajmie to tylko 15 minut i może się okazać, że możesz go znacznie ulepszyć, co sprawia, że ta niewielka inwestycja czasu jest bardzo opłacalna.
3. Poinformuj interesariuszy o kosztach przerwania projektu
Metafora samolotu jest dla mnie pomocna: rozpoczęcie i ukończenie projektu jest jak latanie samolotem. Jeśli wyskoczysz w połowie lotu, samolot nie będzie po prostu siedział w powietrzu i czekał, aż wrócisz do niego, i potrzebujesz sposobu na podróż z bieżącego projektu / lotu do następnego. W rzeczywistości, jeśli jesteś w środku lotu z Phoenix do Fargo i powiedziano ci, że musisz przerwać ten lot, aby wziąć inny samolot z Denver do Detroit, musisz wylądować pierwszy samolot w Denver (który na szczęście nie jest daleko od toru lotu - nie zawsze tak jest z rzeczywistymi przerwami) i ktoś musi wymyślić, co zrobić z ładunkiem i pasażerami. Nie będą tylko siedzieć i czekać wiecznie.
W przypadku projektów chodzi o to, że przejście z jednego projektu do drugiego wymaga dużego nakładu czasu i pozostawia wiele do stracenia, z którymi trzeba sobie poradzić.
W projekcie jest oczywiście i nieuchronnie wiele rzeczy, które dzieją się w twojej głowie podczas pracy i nie każda myśl może być przekształcona do postaci seryjnej na piśmie, i nie każda część tych myśli, które są zserializowane, pozostanie po deserializacji. Chociaż możemy częściowo uchwycić nasze myśli na piśmie, jest to format bardzo stratny.
Problem (jak widzę) polega na tym, że menedżerowie projektów i inni ludzie biznesu myślą o projektach jako o szeregu kroków, które często można dowolnie zamawiać (chyba że istnieje wyraźna zależność od ich wykresu Gantta) i które można łatwo rozdzielić między ludzi lub opóźnione, aż będzie to najwygodniejsze dla firmy.
Każdy, kto dokonał dowolnej ilości programowania, wie, że projekty oprogramowania nie mogą być traktowane jak klocki Lego, które można przenosić w dowolny sposób. Uważam, że metafora podróży lotniczych daje przynajmniej zainteresowanym stronom coś konkretnego, o czym mogą myśleć, że nie można tego traktować jako szeregu różnych kroków, które należy zmienić według kaprysu. Przynajmniej ułatwia zrozumienie , że takie zakłócenia wiążą się z pewnymi kosztami. Oczywiście nadal jest to ich decyzja, ale chcesz uświadomić im o tym, zanim przerwie jeden projekt, aby dać ci inny. Nie bądź wojowniczy, ale udzielaj pomocnych informacji i pomocnej perspektywy programisty, gotów zrobić wszystko, czego od ciebie potrzebują, ale po prostu oferuj informacje, których mogą nie być świadomi, jeśli im nie powiesz.
W skrócie:
źródło
Możesz sprawdzić historię projektu w oprogramowaniu do kontroli wersji sprzed trzech miesięcy. Przeczytaj swoje komunikaty zatwierdzania i najnowsze różnice, aby dowiedzieć się, nad czym pracujesz.
źródło
Korzystanie z systemu kontroli źródła z odpowiednimi strategiami rozgałęziania i łączenia w połączeniu z systemami śledzenia problemów (takimi jak Redmine lub GitHub ) pomaga w podziale dokonanych zmian, nadaje im kierunek i dokumentuje brakujący „kontekst” jako naturalna część przepływu pracy.
źródło
Jest wiele długich odpowiedzi. Oto krótkie pytanie o tym, co najbardziej mi pomaga:
Jednak różnice, komentarze, komentarze post-it, listy rzeczy do zrobienia lub tablica Kanban mogą z czasem być interpretowane z powodu braku kontekstu. Oto jedna najważniejsza rzecz:
CZYSTE KOD.
źródło
main
, która dla programu o dużych rozmiarach będzie raczej abstrakcyjna. Następnie mogę zanurkować głębiej i zobaczyć na przykład architekturę tego, jak program sam się oczyszcza. Ponadto czysty kod oznacza, że funkcje / zmienne / itp. mają nazwy, które mają sens i zawierają oświadczenie o ich znaczeniu. Jeśli zamiast tego piszę kod Spaghetti / tylko do zapisu, często budzę się następnego ranka / miesiąca / roku, patrzę na mój kod, a jedyną myślą będzie wtf-did-i-do-tam. Tak samo jest, gdy ...Po pierwsze, oznacza to, że w projekcie istnieje opis wysokiego poziomu i struktura kodu, które można łatwo zrozumieć w ciągu kilku minut - w przeciwieństwie do zillionowych linii kodu bez widocznej struktury i bez komentarzy.
Oto najlepsze praktyki, które zastosowałem w ciągu ponad 20 lat kariery w projektach od bardzo małych do bardzo dużych i dobrze służyły mi i moim zespołom. Zastosuj w kolejności podanej w miarę rozwoju projektu:
Użyj kontroli wersji, co daje bezpłatny zapis tego, co się stało, kiedy i kto zastosował zmiany. Pozwala także w dowolnej chwili wrócić do wcześniejszej wersji.
Zmodularyzuj swój kod (w zależności od języka i środowiska programistycznego, użyj klas, modułów, pakietów, komponentów).
Udokumentuj swój kod. Obejmuje to dokumentację podsumowującą na górze każdego pliku (co to robi? Dlaczego? Jak go używać?) Oraz szczegółowe komentarze na poziomie funkcji, procedur, klas i metod (co to robi? Argumenty i zwracane wartości / rodzaje? skutki uboczne?).
Dodawaj
TODO
iFIXME
komentuj podczas kodowania. Pomaga to zapamiętać, dlaczego i dziwactwa, które nieuchronnie wejdą do twojej bazy kodu, i że później poprosisz WTF ?! . Na przykład:Przyzwyczaj do rysowania diagramów w celu dokumentowania struktury i złożonych zachowań, takich jak sekwencje wywołań między modułami / obiektami / systemami itp. Osobiście wolę UMLet, ponieważ jest szybki w użyciu, tworzy ładną grafikę i, co najważniejsze, nie przeszkadza . Ale oczywiście powinieneś użyć dowolnego znalezionego narzędzia do rysowania. Pamiętaj, że celem takich rysunków jest krótka komunikacja, a nie precyzyjne określenie systemu (!!).
Dodaj testy jednostkowe wcześnie. Testy jednostkowe świetnie nadają się nie tylko do testowania regresji, ale są także formą dokumentacji użytkowania modułów.
Dodaj dokumentację zewnętrzną kodu wcześnie. Zacznij od README, który opisuje wymagane zależności do uruchomienia i rozwoju projektu, jak go zainstalować, jak go uruchomić.
Nawyk automatyzacji powtarzalnych zadań . Np. Cykle kompilacji / kompilacji / testowania powinny być skrypty w jakiejś formie (np. W JavaScript
grunt
, Pythonfabric
, JavaMaven
). Pomoże to szybko przyspieszyć po powrocie.W miarę rozwoju projektu dodaj więcej dokumentacji, generując dokumenty kodu źródłowego (używając jakiejś formy komentarzy w stylu JavaDoc i odpowiedniego narzędzia do generowania z niego HTML lub PDF).
Jeśli Twój projekt wykracza poza pojedynczy komponent i zawiera bardziej złożone wdrożenie, pamiętaj o dodaniu dokumentacji projektowej i architektury . Ponownie zauważ, że celem tego jest przekazanie struktury i zależności, a nie drobiazgowych szczegółów.
źródło
Oprócz sugestii dotyczących śledzenia projektu, list rzeczy do zrobienia, Trello itp. Coś, co przeczytałem raz, co pomaga, jeśli ćwiczysz TDD, polega na tym, aby zawsze odejść od projektu z nowym testem negatywnym, który można wdrożyć za każdym razem, gdy powrócisz do projektu (jutro , w przyszłym tygodniu lub w przyszłym miesiącu)
Usiądź, wykonaj „Uruchom testy” i wybierz miejsce, w którym zostało przerwane.
źródło
next-steps
. Nie jestem pewien, co obawy dotyczące specyfiki podejścia do kontroli wersji mają wspólnego z podstawową zasadą niepowodzenia testu jako pomocy w uruchomieniu mózgu po powrocie do czegoś. Ponownie zaproponowano to oprócz standardowych metod, takich jak zaległości, listy rzeczy do zrobienia itp.Oprócz komentarzy / list rzeczy do zrobienia / zobowiązań ważne jest, aby być realistycznym.
W zależności od wielkości, złożoności i stanu, w którym opuściłeś pracę, ponowne rozpoczęcie pracy nad projektem może trochę potrwać. W przypadku znacznej bazy kodu złożonej z wielu współdziałających elementów uzyskanie pełnej prędkości może zająć kilka dni.
Przydaje się stara dobra cierpliwość.
Kiedy po pewnym czasie wracam do projektu przytłoczony, zazwyczaj wybieram najprostszą i najmniejszą jednostkę zadania i realizuję ją. Nie pozwala mi się zgubić, próbując zapamiętać wiele rzeczy naraz, i nieco podbija pewność siebie. Często zdarza mi się, że w ciągu kilku godzin automatycznie podejmuję coraz większe zadania.
źródło
Prowadzę dziennik mojej pracy. Co zrobiłem dzisiaj, co było dzisiaj trudne, jaki jest następny krok, jakie pomysły miałem dzisiaj na przyszłość. Dodaję też trochę narracji o tym, jak wyglądał ten dzień: czy była interesująca rozmowa lub spotkanie? Czy coś złościło lub zachwyciło? Pomaga to spojrzeć na to z innej perspektywy, kiedy później czytam swój dziennik.
Kiedy po pewnym czasie wracam do projektu, czytam kilka ostatnich pozycji w dzienniku, aby przyspieszyć projekt. Wszystkie te codzienne szczegóły są niezwykle ważne dla zapamiętania procesu rozwoju. Robią naprawdę dużą różnicę w porównaniu do listy rzeczy do zrobienia lub zwykłej dokumentacji projektu, ponieważ przypominają o tym, jak to było pracować nad projektem, a nie tylko jak korzystać z produktu.
źródło
Dla mnie uważam, że najprostszym sposobem wznowienia projektów jest po prostu ciągłe zapisywanie notatek na temat twojej pracy. Uważam, że „OneNote” Microsoftu jest szczególnie dobry do przechowywania i grupowania stron notatek. W szczególności pasek wyszukiwania sprawia, że niezwykle łatwo jest szybko znaleźć swoje notatki.
Oto kilka rzeczy, które robię w OneNote, które pomagają mi wznowić postępy w projektach:
Dzienniki dzienne / tygodniowe - prowadź dzienny lub tygodniowy dziennik postępów, aby pomóc Ci zorientować się w postępach, które już osiągnąłeś w projekcie.
Lista rzeczy do zrobienia - mam ogólną listę rzeczy do zrobienia, ale prowadzę również osobną listę rzeczy do zrobienia dla projektów, nad którymi pracuję, aby zapamiętać, co jeszcze muszę zrobić dla projektu. Czasami zostawiam również // TODO: elementy w moim kodzie.
Uwagi do projektu - rzeczy, na które zwracam uwagę, obejmują łącza do elementów śledzenia / śledzenia projektu, fragmenty kodu, napotkane problemy, podjęte decyzje, plany i opisy potencjalnych rozwiązań, listę zmian kodu, linki do katalogu repozytorium kodów, wiadomości e-mail do projektu i linki do dokumentacja projektu.
Tak więc, za każdym razem, gdy wracam do projektu, mogę otworzyć notatki i prawie natychmiast mogę zobaczyć, jak duży postęp został osiągnięty w projekcie, ile pracy pozostało do zrobienia, a nawet zobaczyć mój tok myślenia.
źródło
W przypadku prostych projektów robię to:
źródło