I am about to embark on a project mostly using C# that will involve client and server communication.
I'm wondering how to plan out a project like this.
I usually just jump into smaller projects and figure things out as I go because I have a diagram in my head.
How do I design a complex project before knowing everything it will require takes?
How do I know if I have a good design or a crappy one?
Sounds stupid, I know, but I have taught myself everything I know so I haven't really had any experience working in groups or with instructions.
"How do I design a complex project before knowing everything it will require takes?"
If that's worrying you, then figure out everything it will require.
Read Walker Royce's Software Project Management.
Projects have four parts.
Inception. Defining the Scope of effort and the things you will deliver. What you're doing now.
Elaboration. Getting the details of "what" it's supposed to do. Determining "how" it will do that. What you need to do next.
Construction. Architecture, Programming, Testing, Integration.
How do you validate your design? Several techniques that you can apply.
a. Technology Spikes, also known as a Spike Solution. Confirm the technology in depths as soon as possible.
b. Test-Driven Development. Always plan for testing what you're building.
c. Incremental, Agile development. Look at scrum. Build in pieces starting from the most important and valuable piece.
Transition. Usually to production, but sometimes to other folks for integration.