Surprise! Week 10

Introduction

I’m still here! What, after 9 weeks of weekly progress updates, did you think I was just going to stop? This week has been a bit daunting, to say the least. I’ve decided to start moving from simple CRUD apps with limited models into a more complex app with user-controlled nested forms and complex data relationships. Because of the complexity of the app itself, I’m relying as much as possible on gems to allow me to focus on development of the architecture of the app itself. Gems such as Devise for handling user authentication and CanCanCan (a continuation of the Ryan Bates’s now-defunct CanCan gem) for easily handling authorization are great. This app has been good for me for a couple of reasons, but I think the most important benefit to tackling a large problem is the planning it’s forced me to do. With this project, it’s not possible to add a couple of scaffolds and call it a day. I’m anticipating this app to start off pretty complex, and only grow as time goes on, so it’s important to plan models and structure from the onset. Some people use white boards to help plan their models, while others might use notecards; I’m using the latter. In addition to helping me to visualize the overall app structure, the notecards can serve as milestones of sorts—as a feature is completely implemented and tested, I can check it off the list. I find it to be a nice way to document progress and prevent scope creep in my own projects. In the intro, I briefly mentioned user-controlled nested forms in my app. This was perhaps the hardest thing to wrap my brain around. For this feature, the Railscasts website has been great. There are railscasts dedicated to dynamic form storage via hashes in a database column, as well as ones focused on using hstore as a storage strategy (NoSQL structure within a single database column). It’s relatively early in the app’s development, but having a resource as well-documented as Railscasts makes me feel confident I’ll be able to figure out what’s needed without too much stumbling around. In addition to everything covered in the previous three paragraphs, I’m continuing to refine my simpler app (the URL shortener). I’m designing and refining the UX, reconfiguring parts of the app to interact via Ajax so generating a short URL is a more pleasant / seemingly quicker experience. Whew! That was a lot to go over. Luckily we’re finished—until next week!