For my Rails Portfolio Project, I chose to build a basic CRM (Customer/Client Relationship Management) web application. CRM apps range from simple contact management apps to complex lead & deal management apps which implement sophisticated automation, analytics, and AI. After some quick research, I took a close look at some apps on the more basic end of the spectrum, like Google Contacts and Clevertim, to better understand features and functionality. I decided to build a basic contacts/multipurpose CRM application.
I spent a lot of time thinking about models and their associations using charting software to diagram the associations. Although this was one of the smarter things I did at the beginning, my first draft was a mess. Too many models with a web of associations. After what seemed like an inordinate amount of time, before actually building anything, I scaled down (lol) and settled on five models (lol) – user, company, contact, schedule, and task, with much cleaner associations. At the center of everything is the user who can track companies and contacts, schedules and tasks, and companies and tasks. I called the app Nexus.
When “I thought” I had spent enough time planning the design, I started building my project using Rails resource generator because I love how it creates model, controller, routes, migrations and asset files all with one command in the terminal. So, I was off and running. Things went surprisingly well for quite a while. I got my user sign up/ sign in/ sign out authentication system working, built out my controllers and their crud actions, got my views up and rendering with the basic requirements and functionality when it dawned on me that the fundamental design of one side of my app didn’t make sense. Yeah, it was working and it was going to meet the requirements for the project, but I knew I wasn’t going to be happy unless I changed it. At “first thought” that meant renaming a table and flipping the associations between two models. I knew this was a bad idea, that there was more to this than just rewriting a couple macros in the models. I was more than half-way through my build and I felt vaguely, but intuitively queasy about what I was about to do, but there was no way around it, I was not going to be happy unless I overhauled my project mid-stream. So, shrugging off doubts, fears and ignoring that little voice inside that was screaming, => ”Don’t Do This!”, I set to work completely breaking my program. I spent a couple days debugging and hunting down all the ghosts before I got back to where I was and could start moving forward again. It was an arduous deal, but I wouldn’t change it.
In the end, I don’t think I made a mistake by changing my project. The mistake I made was not being thorough enough in the design planning, and to be fair, planning a web application with a lot of moving parts (even a basic app with moving parts) takes experience. So, I can’t say any of it was a mistake, as I learned so much. It has become just standard procedure that we spend weeks covering concepts at a rapid pace and it is in the project stage that you start to implement what you have learned and a more robust understanding coalesces as you actually build things out. I should probably go into more detail about the code and functionality of my app and all that I have learned and implemented, but to tell you the truth… I’m mentally worked! Lol. And tomorrow we start right into new concepts – full speed ahead and full tilt boogie. I’ve been at this for months, burning the candle at both ends, eating and breathing code, breaking stuff to build stuff and loving every minute of it!
As has been true of the last projects, I had a blast, learned a lot, and I’m hooked on code!
M