Software Architecture and Project Workflow - Questions for Developers

Hey guys! **
Our team consists of Indie Game Developers and recently we realized our codebase was getting ugly and unmanageable and also that our workflow wasn’t going so well.
So we’re starting this initiative - We are reaching out to every developer before starting to make some decisions here;
Also: I’d like ** To consult you guys on how your teams work in aspects such as workflow and software architecture
.

**We believe this post will be of use for every developer dealing with these important issues in the future. **
We believe we can gather as much of the knowledge from the community as possible about these issues onto this post.

So here we go!

**On Workflow - How do you Deal with: **
[In the context of a team of many programmers and many artists/content-creators]

- Version Control your Code and Content Assets

- Deal with Continuous Integration

- Document your Software

- Do Automated Tests

**On Architecture - How do you Deal with: **

***Modifiability ***- The Ability for the System to Change with Ease and to Make Changes with minimum Risk and Cost.
***Performance ***- The Ability of the System to Perform Well even under Heavy-Load
***Testability ***- The Ability to produce Quality Bug-Free code with Ease
***Usability ***- The Ability of the System to be Easy to Use (By programmers)

Bonus: ** How do you Deal with Dependency Injection? **

***Interoperability ***- The Ability to communicate with other systems and tools
***Availability ***- The Ability to recover from Runtime-Crashes or Pipeline-Crashes
***Security ***- The Ability to resist user’s exploitations and protect the Customer from such Attacks.

EDIT: We are not a Startup, we are Indie Developers.

To be blunt, if you’re a software startup and you don’t have somebody that can answer those questions already then you don’t have the right people on board.

I would suggest finding an experienced Development Lead/Manager to help get you on the right track.

Hi mid_gen, my mistake, we are not a Startup. I’m going to change it in the original post.
We are Indie Developers, with unproven and untested people.

This is a big change of scope, but still I’d love to hear your opinion about it!

Hmm well you’ve asked a very broad question, pretty much “How do you develop software” :slight_smile:

Perforce, Git or similar

Jenkins? I haven’t used it for UE but should work fine

Wiki for design docs. Self-documenting and commented code. Naming conventions.

Depends on your game, does it have a lot of systems? Complicated economy? Tests may be important. First person shooter? Not so much.

On Architecture - How do you Deal with:

This is all very generic software development/engineering best practice. Not something that can be answered piecemeal on a forum really.

Largely not an issue with games, not clients anyway. If you have a back-end that needs to interop, then usual architecture best practices apply.

Server only…depends on the game. If a FPS server crashes? So what, just fire it up again. Need a fault-tolerant back-end for an MMO? That’s a whole profession in itself.

A whole profession in itself, assuming you’re talking about back-end security. Cheat prevention is another, very comprehensive subject on it’s own.

A lot of what you mentioned could simply be solved by good programming practice (and a lot of patience!). How much experience do the programmers have on your team? You could honestly almost write a small book on all of these subjects and there best practices. If you are looking to educate your team quickly, I would consider using a service like Pluralsight. They have some good content on there for both beginners and professionals a like. Plus I find the format in which the lessons are presented help you pick up concepts faster than reading a book. The important thing however is to get a good grasp on the core concepts and fundamentals of programming development. You don’t necessarily need to know every advanced programming concept. get good at the basics and that will win you half the battle. That will also make picking up the more advanced topics easier.