While creating the first usable modules for the build environment for my game engine project, I took a step back and extrapolated a bit, where those tools, combined with already existing functionality on the web, would end up and whether or not it would be worth the pain, to actually go into that direction.
Ultimately, the concept I ended up with was quite an amazing one.
A beating heart for your software projects
Other than designing and programming the functionality of a given product idea, what else is there, that needs to be done, to help that product come alive? How many of this stuff is simple stupid and boring handiwork, repeated for every new project, all over again where you, at least once in a while, thought, that this could really be done better by a robot.
The answer to both of those questions is: Quite a freaking lot!
Setting up a build cycle; Working out a distribution chain for the finished product; Pulling together the finished product into the delivery format; Setting up a basic design for the presentation; Configuring a build server; Providing Bug-tracking and Feature-request-tracking. The list is not finished here, but you get the idea.
The Sandbox, when it would be done, would get rid of all those insults to the human brain.
The idea is, to create a consolidated portal for a given product, that integrates all the basic platforms, your project needs to live on into one. The Sandbox would be able, to interact with your source-control repository, to create templated project facades for you. It would have a build server integrated, to nightly build your product and run your unit tests. It would have wikis, idea-torrents and any number of other collaboration tools you like as well as providing a professional product presentation to potential customers via blogs and about pages.
All this stuff would be there, to accomplish one simple goal: To get your brain focussed on your actual assets.
- For programmers this means, to be able to concentrate on coding while knowing, that all the surrounding stuff is handled by the environment for them.
- For architects that means, to be able to concentrate on collecting basic concepts and ideas, solving integration problems and coming up with good architectures, rather than searching for tools and searching for people who should be involved on all four corners of the globe.
- For product owners that means, staying closer to the project team and knowing exactly and effortlessly about possible hold-ups or problems, the team is facing, as well as being able to tell immediately, whether a release date will be matched or which features will be included, without having to chaise the team for tiny bits of information all day.
Obviously, as great as the final product of my little brainwave might be, there is a lot of ground to cover, between here and there. Also it should come as no surprise, that one could keep adding potential features to this until the end of all days.
So to start thing of, the smallest subset of features should be found, that still feels complete in the sense, that it carries the initial idea. After that first iteration is designed and implemented, more stuff could be added in small junks and the product could start evolving.
I am still struggeling a little bit, to point my finger, on what that part should actually be. So far I am thinking along the line of:
The portal for a given product should be able, to
- Load a given project from a given source control repository.
- Run a build on the sources, to get a final product
- Package that product and store it somewhere (Maybe the repository?)
- Update a Downloads web page, so that it presents the last nightly build of the product, for people to download.
Interfaces to Programming Language specific features and specific technology, such as, which type of version control repository to use, should be abstracted away into interfaces, that the Sandbox could be enhanced easily in those places.
At the moment, I do think, that this should be the core of The Sandbox, around which all the other features should be attached.
What do you think? Is that subset to large or to small? Maybe you think it should be an entirely different feature set, to start with.
Discuss away in the comments.