Yep! The time has come to refactor and make our source code more object oriented.
The general goal of this project is to make it more easy for other developers to pick up our code and build on top of it.
The current setup is involving two github repositories.
faraday-motion/vesc
Github Link
This repo is an implementation of the Vedder BLDC tool code that allows us to talk to the VESC motor controller.
At the time of this writing there's a branch that actually allows us two way communication with the vesc.
faraday-motion/core-software
Github Link
This code is responsible for pretty much everything. It implements the vesc library (described above) and handles controller connections, controlling of the Hyperboard/Spine. There's some code for LEDs and servos. The code is reliable but needs refactoring.
The Grand Plan
Objectives
- Make it easy for anybody to setup a development environment.
- Object oriented
- Allow configurations at compile and run time.
- Adopt a modular, plugin like structure.
4.1 Make it easy for others to write extensions to the core.
- Support more than one micro controller.
- Document everything.
Road map / Milestones
Stage 1 - Objectify the Code
1. Implement PlatformIO
1.1 Use the PlatformIO as a dependency manager.
2. Objectification of the source code.
3. Implement compile time configurations
4. Implement run time configurations
5. Write the first version of the documentation
6. Come up with more creative names for the repositories 
Stage 2 - It's all about extensibility
Before I can go ahead with describing this stage I have to research on what are the best practices on writing C++ for extensible applications.
If you have some hints on how could this be done please do write a reply to this post 
Do you want to contribute?
Great! There's a long way to go. Start by dropping a reply in this thread about your ideas and get the code from Github.
Alright this is pretty much it for now. Let's get our hands dirty.
Edit (March 8, 2017 ): Finally got the time to write up a plan of development.