This applies to most of the programming, not just Unity.
Code should be readable. Follow Clean code guidelines, to make single file, class, method, variable, etc as readable as possible. Meaningfull variable names ( No "x" but "Position.X", no "accMngrExt" but "accountManagerExtension") and continue with method names that should describe what they do, just by reading the name. Clean code book is something that every programmer should read. Atleast the first few chapters.
Code should be easily located. With file structure, you can isolate contexts so, that when you are looking for character shooting function or world spawn generator interface, you can just navigate through self explaining file structure. Ie.
World/generation/interfaces or character/actions/shooting ( just an example ).
I have programmed as a hobby, for almost 20 years and as a professional, few years. I write crappy code. We all do. Some might hide it behind nice looking patterns some leave it right there :)
To be able to see that I did something wrong is the first step to cleaner code.
What you should right now do, is to wrap up all the code you have done to build runnable game. Then sit down and without personal attacks, just read the code and find the really smelly parts. Start refactoring. Usually, the code that first comes out, is not the best code. Its code that "just works". Its code, that you wrote, without precisely knowing, what you are even doing. Refactor it. Now you know what it should do, how it can be done and you can write it better. Cleaner.
I mentioned file structure. I find this thing very important with every project, that has more than one file. We spend so much time finding correct functions to fix, right places to add certain behaviour that we should not make it harder, by using overscoped file structure. What I mean is, that you should not have a folder named "Character" and stuff everything there, but brake it down to "inventory", "actions", "AI" and don't be afraid to brake even those down, until you have separated everything that does not share immediate context with each others.
Just remember, THIS is the point where quitters quit. Things are not rainbow colored roses anymore, you notice that you are just a human and even you do errors. Now you can really start to learn. Refractoring code is something you should always do. Everyday. Code is never ready. Even something that looked good yesterday, is now ( after few bug fixes ) looking like old testament was shredded to pieces and clued together by group of monkeys.
TL;DR;
Refactor your code to be more readable. Do it step by step, don't force it. Start with the most buggy parts. Read your code. If you can't understand what it says while reading like a book, it needs to be refactored. If you need to comment code, to understand what it does, you need to refactor it. If your friend does not understand, you need to refactor it. Any english speaking person, should understand what your code does, when its read.
WAIT, Theres more!
REAL teams use somekind of task manager system. Something, that keeps track of new features, milestones, bugs and everyting relating to the project. We use JIRA. You can get JIRA as a standalone ( free for 5 users and you host it yourself (quite easy)) or as could service. Its cheap, like 10$/ month.
Next step is to start learning agile development. Don't just say to other developer, do feature x, but break it to parts. To user stories. Those are great and easy to start with.
So, start tracking your project. That is the first thing you should do, if you don't already do it. Fill it with all the bugs you find, all the features that full version of game has. Brake all the future features to smaller pieces, so that there is tasks that can be done in few hours.
With tracking, you start to get picture of what is really going on. You can see bug amount and an estimate about what is ready next week.
With agile, comes the "stand up"-session. You really should discuss daily, for few minutes ( per person ) about Did yesterday go as planned, what are you doing today and do you have any problems. This is important. With this meeting, you can see, if there is problems coming up, if some feature is harder to implement than was thought or some bug has reappeared or anything. This should be help face-to-face or as video-chat.
Now you are in position, where you know, what works and whats to come.
Use code versioning system, such as GIT. You can open public code reposity to github or private repository to BitBucket ( JIRA integrates nicely to it ). This helps you with the new feature implementation, bug fixing and refactoring. If something goes wrong, you can always revert to point in code, where everything worked.
If it works, let it be. This might be the most important thing I can say. While refactoring and clean code is nice, working code is the top priority. Always do best you can, but learn to move forward. Tasks help with this. If task says "as a AI, I wanna chase the player using sprint", then its done, when your code does exactly that.
TL;DR2
Get task management software, such as JIRA. Use versioning software like GIT. Create tasks, complete tasks.