Project

   Project is a highly planned endeavor. TODO: moar

How To Do Projects Well

   THIS IS NOT A "[1]PRODUCTIVITY"/"MOTIVATION" ARTICLE. If you're seeking
   "productivity", go capitalisting somewhere else.

   Firstly a word of warning: stuff about how to plan projects, lead them,
   get people "motivated" and so on is a huge, huge milking cow of
   "[2]productivity" writers and capitalists, to a large degree this is a
   bullshit topic growing alongside gigantic capitalist [3]bullshit projects
   and entrepreneurship religions. Never fall into this trap, never let
   concerns about how to make art take too much of the time that should
   actually be spent on making the art itself. With this said, we may offer
   some useful word of advice.

   Also let it be said that everyone has to find his own way of doing
   projects, it's just like with learning for example: everyone has his own
   ways, what works for one may not work for another. The advice here will
   come firstly from the author's ([4]drummyfish) personal experience and
   secondly from general [5]LRS principles. Also even though we'll mostly be
   talking about programming projects, a project can be anything really, what
   we say applies also to making a [6]music CD or writing a [7]book. Here we
   go:

     * As always, keep everything [8]free, [9]LRS, well designed,
       non-commercial etcetc. Minimize [10]dependencies; dependencies of your
       project are for example the [11]programming language you use,
       libraries for formats that you use, assets of third parties you use,
       minimum hardware demands of a computer that can handle the project
       etc. Just a reminder. Also think with your brain.
     * Prefer one man projects to many men projects: Firstly LRS projects
       should be simple enough to be manageable by a single man, which has
       many advantages, for example ensuring a coherent artistic vision
       without any compromise, legal simplicity (e.g. with relicensing),
       ensuring that the project can REALLY be controlled by a single man
       (true [12]freedom), and also very importantly the cost of
       collaboration. Multiple people on a project -- even just two --
       introduce many inconveniences, issues and [13]friction, e.g. that of
       communication (every thought has to be explained, put into words for
       others and they still may not completely get it, communication tools
       will have to be set up and maintained, ...), resolving editing
       conflicts (multiple people working on the same thing at once), making
       decisions (voting? discussions?), disagreements, arguments, "codes of
       conducts" and similar bullcrap. LRS does value collaboration, but
       mainly loose collaboration, i.e. making bigger things out of smaller
       things that are made by single people. But more people projects are
       cool, e.g. wikis or maybe projects by very close people who are
       already used to working together efficiently.
     * Do NOT be too ambitious, especially with first projects. This is
       EXTREMELY important and you have to realize that even if you think
       something will be easy, it won't be so, a project will always be at
       least 20 times harder than you estimate (even if you already have
       experience in estimating project difficulty). Making a game is not
       just about programming it (which itself means debugging, refactoring,
       writing tests, debugging tests, organizing repos, designing APIs,
       studying libraries, ...), you'll also have to document it, play test
       it (many, many times over), debug it, optimize it, package it, make a
       website for it and a billion other things. If you decide to make a
       game like GTA (or even just Pokemon clone or something) but you
       haven't made at least 10 games already, YOU WILL FAIL, it will be a
       disaster and completely wasted time. Unless you've done like 10
       projects already, choose dead simple things like Tetris clone or
       something (see [14]exercises for beginner project tips). Remember, the
       goal of your first project isn't the thing in question but rather
       learning about making a project and finishing it.
     * [15]FINISH THE FUCKING PROJECT. Unfinished project will just have
       wasted your time, it will leave you disgusted, broken, depressed and
       defeated, it will be of no use to anyone, you'll just feel like
       [16]shit. For this it is important to choose something simple -- if
       you finish the thing, you'll be happy regardless of how simple it
       really was, you'll be eager to make more things, people will be able
       to use your project, they'll be thanking you for it which will further
       make you more happy and so on. Even if it's a freaking minesweeper,
       you've made your own game now, it brings happiness to people, you can
       take a look at it every time you'll feeling down and be a bit happier.
     * Take long breaks, enjoy the fact this is not a "[17]job" -- when
       you've become fed up with your project, take a pause. If you have
       other projects, you may hop onto another one (but if you're simply
       overall tired, just take a full vacation, go play games or whatever).
       In a week, month or a year you'll start to feel the urge to get back
       to it and when you do, it's a sign you'll be enjoying doing it again,
       it's very likely you'll then get a period of """[18]productivity"""
       (better said just enjoyment) and inspiration. Also when you get stuck
       or stand before an important decision taking a break is very much
       advised, you need a fresh mind and even if you make a decision, take a
       few more days to see if you still think it's good after some time.
     * Have multiple projects in progress. This is cool for several reasons,
       for example it prevents a burn out of a single project -- if one
       projects becomes boring, shows to lead nowhere or you simply get tired
       of it for a while, you switch to a different one. Even if it fails
       completely and you delete it, you still have many other "children", it
       won't be a disaster. Sometimes you have a period when you want to
       program, so there's a programming project waiting for you, other times
       you feel like you wanna do music, and there is the project that needs
       some music, just ready for you. So this also stimulates you in
       different ways. And sometimes you get surprised if some small project
       turns into something unexpected maybe. It's just good to have this
       diversity in your art.
     * Do everything yourself and keep switching tasks. This is similar to
       the other point about having multiple projects, just within a single
       project. Be your own programmer, graphic designer, musician, tester,
       writer and so on -- at least as much as possible. This not only helps
       you become a cool generalist, an independent, non-capitalist living
       being, but also prevents burn out from doing the same activity over
       and over.
     * Publish everything immediately, don't wait until the project is
       "polished", this NEVER, never ends well. Really just have everything
       public at all times, keep no secrets, make it public even if it's
       buggy, shit, cringe, dangerous or whatever. This doesn't mean "go
       promote your buggy unfinished game", but simply "have your
       work-in-progress git repo public". This is not capitalism in which you
       work in secrecy and then "ship" a "product". Just make art and let
       anyone watch you, give you "feedback", advice and so on, get rid of
       shame, don't let others waste time on making what you're already
       making, don't let perfectionism paralyze you so that you'd never
       release your art.
     * If you ARE ambitious, separate the thing into multiple less ambitious
       projects. Firstly this is just a good design, you shouldn't make a
       huge monolithic program but rather multiple simple things out of which
       it is easy to make the big thing. This achieves multiple things:
       you'll have several parallel projects as advised above and also if you
       don't finish the grandiose piece, you'll still probably finish at
       least some parts of it that will be useful on its own. So if you
       really want to make that GTA clone (and have at least 20 years of
       experience so that you can even think about it), rather make several
       projects such as a 3D renderer, physics engine, a pack of car 3D
       models etc. When all of the projects are ready, you may try to merge
       them into the magnum opus.
     * "It would be cool" is not a good enough motivation for a bigger
       project. You can't start a big thing just out of boredom. Finishing a
       greater thing will be painful, you'll be through sleepless nights,
       periods of desperation, headaches and burn outs, you'll sacrifice
       social life to hunting down bugs and rewriting shitty code. To keep
       yourself going through this it's not enough to know that "the result
       will be nice I guess". It needs more -- you must absolutely feel it is
       necessary to make the thing, you have to think the world NEEDs you to
       make it, only then you will keep torturing yourself to make it to the
       finish. So choose very wisely.
     * Before making a big thing of type X make a small thing of type X or as
       it's been said "plan to throw one away". This is to say that you can't
       make a good game if it's the first game you're making, so you better
       make your first game small knowing that it ill suck rather than making
       a big game that would suck. The first thing is just for the
       experience. You can't prepare yourself for making an operating system
       just by reading a book, you have to make one to REALLY comprehend what
       it will be about, to see the whole picture and to properly plan it.
     * Don't spontaneously start projects, don't rush, only start well
       thought through things. As a creative being you'll be getting hundreds
       and hundreds of amazing ideas -- don't think you're a genius, this is
       common for many people, even normies get many ideas for great games
       and "apps" and whatever, so don't get too excited, it is important you
       judge carefully what to do and what to leave for later: planning and
       actually MAKING the thing is the actual part that will distinguish you
       from the normie. Write your amazing ideas down if you need, but don't
       jump in on any new great idea that appears, always let any idea sit
       for at least half a year, maybe even several years. It is very
       tempting to start new things but you must have self control, or else
       you'll end up like the [19]dog that starts chasing any new smell it
       catches and will be just chaotically running around without any goal,
       making unplanned projects that will fail every time. If an idea should
       deserve your valuable time, it has to pass the great filter of time --
       if it survives in your head after a few months, in all the avalanche
       of new and new ideas, you know it may truly be worth trying.
       Furthermore you also have to have a good plan for any project you
       start and this planning requires a lot of thinking ahead -- you should
       only start writing code once you have the whole project in your head.
       This planning CANNOT be rushed, you can't plan it over a weekend, this
       is not [20]capitalism where things are made on schedule, this is
       [21]art that needs its time, it must wait for inspiration, small
       improvements and rethinks over the time that it's sitting in your
       head. In this meantime stay with your already work in progress
       projects.
     * Start small and humble (if it's meant to be big, it will become big
       naturally), focus on the thing you're making (not its promotion or
       "management"). Some nubs just see [22]Steve Jewbs or [23]Che Guevara
       and think "I'LL BE A BIG PROJECT LEADER", they pick some shitty idea
       they don't even care too much about and then just start capitalisting,
       they buy a suit, coffee machine, web domains, set up a kickstarter,
       make a Jewtube video, Twitter account, logos, set up [24]promotional
       websites, write manifestos and other shite. Yes, manifestos are cool,
       but only promise yourself to write it once the project is fucking done
       and worth something ;) Sometimes they hype a million people to jump on
       board, promising to make a HUGE, gigantically successful and
       revolutionary thing, while having 3 lines of code written so far.
       Congratulations, you now have nothing and the pressure of the whole
       world to make something big. This is the best way to hell. At BEST you
       will become a slave to the project, will hate it and somehow manage to
       make an ugly, rushed version of it because you didn't foresee what
       obstacles there would appear but which you would still have to solve
       fucking quickly because everything is falling on your head and people
       are shitting on you, angry that you're already two years late and
       you're already burned out and depressed and out of budget. Just don't
       be such a capitalist pussy, make a nice small thing in your basement
       and let its value show itself.
     * Make it a habit/routine to do your project. As with everything
       requiring a lot of time investment and dedication (exercise, language
       learning, ...), it's important to make it a routine (unless of course
       you're taking a break) to really do something significant. A small,
       spontaneous, irregular polish of your project is great too, but to
       really do the biggest part you just need a habit. People often say
       they're lazy and can't get into it -- everyone is lazy and everyone
       can get into it. Here is the trick: start with trivial things, just to
       get into the habit, i.e. at first it's literally enough to write 1
       line of code every day. At the beginning you're not really doing much
       of any significant "work", you are just setting up your habit. Anyone
       can write 1 line of code per day: just tell yourself to do this --
       write 1 line and then, if you want, you're done. You will find that
       second or third day you'll be writing 10 lines and in a week you will
       quite likely be looking forward to it, soon you'll have the other
       problem -- getting yourself to stop.
     * Milestones and psychological mini rewards are nice to keep you going.
       It's nice to split the project into some milestones so that you see
       your "progress", it's very good if each milestone adds something
       visible, something you can "touch" -- for example with a game just the
       moment when you become able to physically move through the level
       always feels very rewarding, even if you've done it many times before,
       it's always a bit surprising what joy a simple feature can bring.
       Exploit this to increase joy of making your art.
     * Don't expect or aim for any reward other than the finished project,
       don't expect/chase [25]money, fame, gratitude, don't expect that
       anyone will notice or thank you for the project. You are making it
       only because you want something that doesn't yet exist to exist and
       that's the only reward you can and should ever expect. Firstly this
       makes your project [26]selfless, secondly it makes it pure,
       non-corruptable, only dedicated to its goal and nothing else, thirdly
       it spares you suffering from failed expectations.
     * When you're hard stuck, go away from it for a (possibly long) while.
       As they say before making decisions: "sleep on it" (maybe even many
       times) -- there's something about letting your mind rest for a while
       that makes your subconsciousness solve things, or at least make you
       comprehend the issue better, see it from a different angle. Therefore
       when stuck, go do something else -- this is also why it's preferable
       to have several projects, but generally it's good to just take a break
       and do something meditative like going for a walk, making something
       out of wood, doing some sport, sleeping, listening to music and so on.
       Stop trying to solve the issue you had and just relax for a few days,
       maybe weeks. It is quite possible inspiration will come from
       somewhere, fresh air will help you think and maybe a solution will
       occur to you during this time [27]spontaneously, but even if it
       doesn't, when you come back to the project you'll be very fresh,
       rested, your thoughts will be sorted, unimportant stuff filtered out,
       it's like you've got a different man on the task who will help the
       desperate past self. Sometimes you get back and immediately spot a
       simple and elegant solution. Really, this works like [28]magic.
     * ...

Links:
1. productivity_cult.md
2. productivity_cult.md
3. bullshit.md
4. drummyfish.md
5. lrs.md
6. music.md
7. book.md
8. free_software.md
9. lrs.md
10. dependency.md
11. programming_language.md
12. free_software.md
13. friction.md
14. exercises.md
15. finished.md
16. shit.md
17. work.md
18. productivity_cult.md
19. dog.md
20. capitalism.md
21. art.md
22. steve_jobs.md
23. che_guevara.md
24. marketing.md
25. money.md
26. selflessness.md
27. zen.md
28. magic.md