When most people think of Open Source PHP projects, some immediately spring to mind. If you’re a developer or a blogger, there are obvious choices, but what about options for small to medium businesses? What Open Source projects are out there to help with day to day operations and track how projects are going?
Towards that goal, we have web2project.
In ancient times (also known as 2007), web2project forked from another project. Our primary goal was to build a project management system focused on real-world business needs, was extensible without hacking core, and to do it in a timely manner. Along the way, we had a lot of work to do and spent the first year making it happen. From a development perspective a few things were key and immediately useful:
First, we had to get the data to where users actually wanted it. While there were a number of options, an iCalendar feed was the fastest and most effective. From a users’ information page, you can generate a token-based feed to add all of your assigned tasks and events to an application like iCal, Thunderbird, Outlook, or even Google Calendar. The ability to get everything on one calendar was a useful step.
Next, one of the weaknesses of the old system was extensibility. Installing some modules required patience and detailed copy/paste skills. To address this, we surveyed other systems. The solution came from the WordPress world in the form of “hooks“. If you’re not familiar with the concept, “hooking” is a way to insert behaviors into an existing application at runtime. Within web2project we use hooks to trigger scheduled tasks such as email reminders and make every module searchable without touching core. As time goes on, we plan to add optional post and pre-save actions.
On the operational side, we started writing Unit Tests. In the last 16 months, we’ve added nearly 400 tests. The first priority was historically problematic components. Almost by accident, we found and closed dozens of issues. More importantly, it’s allowed us to refactor and even completely eliminate code with confidence. We’re nowhere near complete, but we’ve been able to shift our focus to commonly used and relatively stable pieces.
On the user side, we tackled one of the most complicated problems that I’ve ever faced in the PHP world: Timezones. We wanted to use the PHP 5.3 DateTime functionality, but over 90% of our community is using 5.2.x, so it just wasnt’ an option. That said, Derick Rethans’ presentations on Date/Time handling were fantastic. There were still some issues with previously stored data, but all future datetimes were covered automatically.
Finally, there were dozens of performance and stability fixes implemented. While I’d like to describe the tools and strategies we used, my php|architect article covering exactly that is due out later this month. Since I can’t do it justice here, I’ll let you wait for the article.
Overall, since our first release in June 2009, we’ve followed it with one major and four minor releases. While this might be an aggressive schedule, it’s given us the ability to iterate quickly and get useful functionality and fixes into the hands of people sooner rather than later. At present we have a roadmap covering major features like Critical Path Management and Resource tracking and minor features like shared authentication with systems like Drupal If you’re interested in getting involved, we have a number of places you can help or if you just want to give it a try, check out web2project on SourceForge.