I am basically working on https://github.com/KirisurfProject/ entirely alone. This is around 4000 lines of Go code, plus around 1000 lines of Racket (a Lisp) code for the GUI part; the equivalent in Java or some other less concise language is probably several times that.
The project is currently a research project for a paper I'm writing, but I hope to develop it into a stable and maintainable user application.
Finding collaborators is actually quite hard, despite the fact that I am in CS in the University of Waterloo and all my classmates know quite a bit of programming. My choice of language is rather weird (but I REALLY hate writing this type of app in "mainstream" languages!), most classmates aren't familiar with highly concurrent network apps or even dealing with raw TCP streams (the most network stuff they ever do are REST systems in Ruby or something), and finally I'm not really sociable. Nobody is going to do substantial work on it for free since nobody owes me any favors and the work is nontrivial. Any token compensation I try to offer end up being the object of ridicule.
I am already running into a few problems. Doing things the "right" way seems very tiring, like opening, commenting on, and closing bug reports by myself. Documentation in particular very tedious to make, since I always think "I could have used this time to code more awesome features!".
Finally, my coding style evolves over time - I never coded such a large project in Go before, and my early code is much less organized compared to my recent code. Obviously I end up with messes of wrapper objects wrapping around the spaghetti parts to present a non-spaghetti interface to the non-spaghetti parts, but that makes the spaghetti parts even harder to fix.
The worst part comes when, basically, a routine in the non-spaghetti portion needs to call a badly buggy (but very unreadable) routine in the spaghetti portion. In quite a few places I end up using the equivalent of try-catch to catch fricking array-out-of-bounds and assertion failures, and simply try the same buggy function over and over again until the race condition / whatever doesn't occur. Obviously this is a very serious code smell.
What are good strategies for solo coding except "get a job/friend"? All the coding patterns I've read about on Wikipedia concern group coding.