Właściwe połączenie planowania i programowania nowego projektu

10

Zaraz rozpocznę nowy projekt (gra, ale to nieważne). Podstawowa idea tkwi w mojej głowie, ale nie wszystkie szczegóły.

Nie chcę zaczynać programowania bez planowania, ale poważnie walczę z pragnieniem, aby to zrobić. Chcę wcześniej zaplanować, aby zapobiec refaktoryzacji całej aplikacji tylko dlatego, że wymaga nowej funkcji, o której mogłem pomyśleć. Z drugiej strony nie chcę planować wielu miesięcy (czasu wolnego) i zaczynać od tego, ponieważ obawiam się, że w tym czasie stracę motywację.

To, czego szukam, to sposób na połączenie obu bez dominacji nad drugą. Czy powinienem realizować projekt na sposób scrum? Czy powinienem tworzyć historie użytkowników, a następnie je realizować? Czy powinienem pracować w oparciu o funkcje? (Mam pewne doświadczenie w scrumie i klasycznym sposobie „specyfikacji na kod”).

Aktualizacja : co powiesz na rozpoczęcie od „manekina kliknięcia” i późniejsze wdrożenie tej funkcji?

WarrenFaith
źródło

Odpowiedzi:

5

Jesteś na dobrej drodze. Nie musisz spędzać miesięcy na planowaniu, ale zdecydowanie powinieneś mieć jakiś plan.

Planowanie pomoże Ci uporządkować myśli, zidentyfikować potrzebne technologie, wyjaśnić problemy i da Ci mapę drogową do pracy, z której możesz podzielić się na mierzalne cele.

Ponadto możesz zaplanować kilka dni, aby odkryć, że jest to strata czasu. Być może podczas planowania zdajesz sobie sprawę, że jesteś daleko od swojej ligi lub że to, co próbujesz zrobić, nie może zostać sprzedane. Lepiej to teraz odkryć, abyś mógł ponownie zainwestować swój czas w inne swoje pomysły, niż iść tą drogą tylko po to, by zgubić się w lesie, otoczony przez strome winorośle i ścieżki omylnej logiki, która kręci mózg w węzły.

jmort253
źródło
Platforma targetowania to moja codzienna praca, więc znam większość technologii, z których chcę korzystać. Chyba użyję prostego scrum i podstawowego planu. Mogę zacząć od zaległości i zaplanować każdą iterację.
WarrenFaith
Ciągle piszesz „planowanie” źle. Pomyślałem, że zwrócę na to uwagę, ponieważ nie mogę edytować Twojego komentarza :) Ale tak, myślę, że scrum jest świetnym podejściem, ponieważ zachowuje elastyczność i daje ci szansę podjęcia decyzji, czy warto w ogóle kontynuować projekt.
jmort253
Oo W języku niemieckim jest odwrotnie: planowanie z jednym n i programowanie z dwoma m ...: D Dzięki!
WarrenFaith
@WarrenFaith - Przepraszamy! To właśnie wychodzi mój etnocentryzm! Dzięki za zwrócenie uwagi na mój błąd;)
jmort253
11

Zaplanuj minimalny opłacalny produkt i zaimplementuj go. Następnie posłuchaj użytkowników, zaplanuj kolejne ulepszenie logiczne i zaimplementuj je. Powtarzać.

Steven A. Lowe
źródło
3
... i za każdym razem, gdy masz pomysł na coś, co według Ciebie byłoby fajne, po prostu zapisz pomysł w scrum-backlog, ale nie wdrażaj go, dopóki nie zostanie osiągnięty minimalny opłacalny produkt.
k3b
głównym pytaniem pozostaje, jak głęboko powinienem to zaplanować. Jeśli mógłbyś mi również dać tę radę, odpowiedź została zaakceptowana.
WarrenFaith
1
@WarrenFaith: cechy - >> historie - >> przypadki testowe.
Steven A. Lowe
4

Bez względu na to, ile czasu spędzasz na planowaniu i projektowaniu programu, zawsze i tak przepisujesz jego części. To jak grawitacja, a nie sprytne zaprzeczanie jej istnieniu.

Trzeba zdawać sobie sprawę, że refaktoryzacja jest normalną częścią rozwoju i to tylko kwestia decyzji, kiedy to zrobisz. Poczekaj długo, a skończysz z ogromną ilością spaghetti, błagając o całkowite przepisanie. Nie śmieszne.

Moją propozycją jest trochę zaplanować, ale zacznij kodować jak najszybciej i refaktoryzuj, refaktoryzuj, refaktoryzuj, aby utrzymać kod w dobrej formie. Zasada DRY (nie powtarzaj się) jest do tego świetnym wskaźnikiem.

Martin Wickman
źródło
Dzięki za odpowiedź. Wiem, że refaktoryzacja nie jest niczym niezwykłym, ale nie chcę zapobiegać refaktoryzacji spowodowanej brakiem planowania.
WarrenFaith
@Warren - niezaplanowanie nie zapobiega refaktoryzacji. Możesz albo zakodować rozwiązanie na komputerze, albo spróbować zakodować je w głowie lub na papierze. Myślę, że oba są nieskuteczne. Zacznij kodować, wiedząc, że zmienisz go później.
kevin cline
@kevin cline: Ok, zróbmy różnicę między refaktoryzacją istniejącego kodu dla nowej funkcji lub ulepszeń i przepisz prawie całą aplikację dla nowej funkcji. Mogę żyć z pierwszym, a nie z drugim ..
WarrenFaith
@WarrenFaith: Dopóki kod jest ciasny i ma kształt, powinieneś być w stanie unikać przepisywania. Dopiero raz widziałem przepisywanie, gdy system stał się wielką kulą błota (bez refaktoryzacji) lub zasadniczą zmianą techniczną (zmiana platformy).
Martin Wickman,
3

Kiedy jestem na tej pozycji, czasami korzystam z TDD (programowanie testowe) i zaczynam planować testy dla najbardziej złożonej części opracowywanego przeze mnie systemu. Alternatywnie, mogę złożyć jakiś pseudo-kod wysokiego poziomu, ponownie dla najbardziej złożonych obszarów. Uważam, że ten proces daje mi luźny plan działania i pomaga mi określić, które obszary mogą być najbardziej czasochłonne.

Dla mnie to podejście działa, ponieważ żyje gdzieś pomiędzy kodowaniem a planowaniem. Gdy masz już pomysły na test i / lub pseudo kod, możesz przejść przez każdą sekcję logiczną i zaimplementować kod. Często najpierw stawiam czoła najtrudniejszej części proponowanego rozwiązania, ponieważ zazwyczaj najtrudniejsza część jest podstawową funkcją aplikacji i zawsze można opóźnić wszelkie dzwonki i gwizdy.

Ponieważ komentujesz, że większość kodu jest w twojej głowie i jesteś gotowy, aby zanurzyć się i zaprogramować, zastosowanie tego podejścia może pomóc ci skoncentrować się na każdej sekcji bez zmącenia umysłu przez system jako całość.

Podsumowując bardziej zwięźle, można powiedzieć: „Najpierw zmierz się z najtrudniejszą częścią, podziel i podbij za pomocą pseudo kodu i / lub planów TDD”!

BradB
źródło
Nie jestem fanem TDD, ale i tak dziękuję!
WarrenFaith
Niekoniecznie mówię o używaniu TDD, miałem na myśli to, że używam go jako struktury do „planowania” mojego kodu. W ten sposób nie skaczę od razu do pisania kodu i nie spędzam dużo czasu na pisaniu masowych dokumentów / planów projektów, które są trochę za daleko od faktycznego kodowania. Chodzi o znalezienie szczęśliwego medium. Zasadniczo możesz to samo osiągnąć za pomocą długopisu i papieru. Powinienem również zauważyć, że nie piszę testu na WSZYSTKO - tylko bardziej złożone obszary.
BradB
3

Po prostu spróbuj uczynić kod modularnym. Wszystko, co planujesz, zostanie prawdopodobnie wyrzucone podczas następnej iteracji.

davidk01
źródło
2

Poleciłbym przynajmniej zapisać swoje pomysły. W zależności od wielkości projektu może nie być wymagane wiele formalnego planowania. Jeśli jednak jest bardzo duży, możesz zaoszczędzić sobie bólu głowy i poświęcić kilka dni na bardziej szczegółowe planowanie.

Kenneth
źródło