Rather than just picking an idea and jumping right into writing code, we think it's a good idea to spend some extra time up front to explore several different ideas, compare them, and choose the one that ranks best based on the following factors:
- Will the project be useful to at least a small niche of other developers?
- Can we get to an MVP within a reasonable amount of time (maybe a month?) with the limited amount of time we each have available per week
- Is there room for continued growth of the project once we reach an MVP?
- Do the technical steps involved in building the project rely mostly on things we've already learned (thus allowing us to practice and improve our efficiency with our current skillset), while also offering a good challenge for each of us to learn a few new things?
- These new things could be: more advanced features of the Ruby language, more advanced OO design concepts, or even just having to dig into the documentation for other libraries
- And most importantly, are we all enthusiastic about the project?
This means the first step is for each of us to come up with a few ideas.
Based on these criteria, we had a couple initial ideas about what features/qualities the project might have. These should get our creative juices flowing and also give us some direction.
It makes sense to build a Sinatra extension given that we've all built (and may currently be building) Sinatra apps. Also, Sinatra requires lots of manual setup so it makes sense to try and help developers quickly deal with some of the more mundane parts of that setup and reduce writing boiler plate code.
In the future when we start working with Rails, we can add that integration.
Given the ever increasing wide range of html elements, the fact that dynmically generating html code is at the core of web development, and that developers are always looking for ways to declutter their views (in the MVC sense of the word), a set of easy to use helper methods that focus on generating a specific (or small subset of) html element(s) seems like a good way to go.
It can't be a boiler plate code problem that could easily be solved with a text editor plugin or snippet. It must have a dynamic aspect that requires conditional logic, knowledge of the current state of the application, basically things that can't be done with static client-side code (or ideally that can't even be solved purely with client-side javascript).