One of the interesting* tidbits I learned is that just having an idea about a feature is far from being able to actually do something with it. Hell, even implementing the feature is just the first step in a very long road.
* Read: annoying instead of interesting.
Here are the things that you need to do just in order to actually call a feature Ready To Show (vs. Done **):
- Implement backend.
- Expose over the wire.
- Write client API.
- Create user interface.
- Distribution (replication/sharding)
Those things are just what you need so you can actually show something meaningful, rather than a bunch of code and a lot of hand waving. This can be pretty annoying at times, mostly because it puts a lot of work that has to be done before we can actually show it to people.
** And just because people will ask, to get to done you need:
- The ability to test easily
- Performance trials
- Longevity trails
- Production proofing
I’m probably forgetting a bunch of stuff, but those are what pops to mind.
The nice thing about getting to show something is that we can usually parallelize the work for the all of those by handing this to different people.