How and why I built a Project Management Tool from scratch?
First a little something about me
A solution is nothing without it's problem and how it solves it. Which is why first I will have to give you a background of who I am? I am Utsav Singh Rathour, CEO of Code Pixelz Media a web agency that handles client projects as well as has a few of it's own product-line like Code Themes, Yudlee Themes, Codepixelz's blog, WP Review Team, and now WPArmy. I at one time had a lot on my plate (and still do), but now worked a way out using WordPress to handle it and that is what I will be discussing here today.
The problem I wanted to solve
For me the problem was handling all those client sites and products and being on top of it. I wanted to work more on the task and less on the tool that we would eventually decide to use. We went through a few of them first. Some were a little too bulky for us and some didn't handle the problem like we wanted them to. I needed something that would help me assign work to everyone, keep a track of it and manage it between client projects and our internal product-line and all of these with ease and without investing too much time in creating new projects. While still being able to break the projects and tasks and most of all, I wanted the flexibility to have it managed from our own server.
What did I build?
So with those needs, I set out to build my own Project Management Tool. I had the basic idea of what I wanted and what would help me get the job done. So I pulled an all-nighter and came up with a tool that had what I needed and something that was good for me to use with my team. It wasn't complete, it wasn't built with everything in mind, but it had everything that I needed to start using it right away. My motto here was "Move fast and break things". Because, had I started adding all the functionalities and all the features that make a great tool, I would probably have still been working out the idea and work-flow, paying hundreds of dollars to other Project Management tools, that were too generic for me. I am not saying everyone should go out there and build their own Project Management tool, but for me, it worked out this way.
Surprisingly and not, I built this around WordPress. Why? Because I love WordPress and most importantly believed, it could help me achieve what I was trying to build and the process would be a breeze. Boy! was I right? Not bragging, but the decision to go with WordPress was the best and laid a solid foundation on what we would go on to create. WordPress along with Ajax and jQuery when I first created it and now with REST API coming into Core, ensures we can grow this and also when we release this for all (soon...), we also have the power to go mobile and speed is something we won't have to worry about as much.
I have to mention here, WordPress has got a lot more powerful with the inclusion of REST API in the core. The power that it provides right now compared to other CMS is unmatched.
For server, I found a good one at Wave Raide where I pay 8 euros for a VPS that has 6GB of RAM and 4 Cores. The server is awesome and cheap. Cheap because they provide zero support. But I was happy handling the server on my own, so I was fine with that.
Once I decided on what to use, I went to the how-to part of it. How I would handle tasks, projects, to-dos may be and also documents that would be required for the job. One of the best things about WordPress since 3.0 is custom post type. I created a custom post type to handle tasks. So each new task created was a new "task" post. It was segmented into different projects using Taxonomy. So basically I could now categorize tasks based on the project using this new "project" taxonomy.
The main thing now was handling the communication for that particular task. For which another built-in feature "Comments" came into play. I re-wrote some parts of comment handling (with "actions" and "filters" ofcourse). I added to them some metas for both post type and comment to store the status of the project, who it was assigned to, team members (users), when it was due and stuffs like that. So basically I used meta to store meta data for the task, comment and project.
Challenges and the fruit beared
One thing, that struck me later was handling client and keeping them out of the internal communication of the team. This was something that came into my mind much later, after I started bringing in clients to the system. I realized not all discussion were client-safe and not every communication that went on the task or project was important for the client.
To fix this, we added another meta, that would make the reply private and hide it from the client. Voila, now the client only saw, what was meant for them to see.
By hiding those replies, instead of losing client, we went on to build trust. Make it more professional and bugged client with lesser emails and notifications.
The best thing I learned from this was, filtering content is a very important thing, wether you are building a website or a relationship in real life.
First, it is tough to build everything from scratch, as things can skip out of your mind. Second, what you build is yours and the flexibility it provides is unmatched for. But with the second point, comes a lot of responsibility and a lot of un-asked for headache. You are always supposed to be on the top of the game. That probably is a good thing though, keeping you on-track and updated.
Another lesson learnt is to analyze the project before-hand and into smaller components and discuss with the team. An extra pair of eyes are always good either you are writing a project scope or a blog post. This can save you time, money and effort.
Tips and advice
Always, always break the work in hand into smaller components. Use what Mark Zuckerberg once said, that Facebook used as their motto "Move fast and break things". A human mind is full of ideas and once you move to one, you will probably be bombarded with a bag full of other complementing ideas. Your part is to segregate what is required, build it first and push it. Move to the next feature only when you are done with what you were working on. Why? Because this gets work done. This method, helps you move ahead on your task in hand. Smaller steps but a step forward nonetheless.
Final thoughts and next steps
Wrapping up, this is a story of how I made things work for me and how, moving fast and breaking things. I learned a few lessons the hard way and some that came in my way because I took things in my own hand. The lessons learned both ways were pretty fruitful and now after using this for over 2 and half years internally and with various tiny, timely upgrades, I think we are closing on releasing this for others as well. We might release this soon for others to use as well.
The best thing about creating something is maintaining it against the tide of time. We are working now to make this better, timely upgraded and soon yours, as well.