PHP Application Development (Part 1)
So, what are you making?
I am programming a PHP-based IRC Bot, using PHP 5 object oriented programming, codenamed Failnet.
Features include authorization, access lists for users, factoids, and much more.
You can check the wiki for a more detailed list for the plans concerning the Failnet 2.0 line, and you can look through the SVN for what is currently in development.
Failnet currently encompasses over 7,394 lines of code and nearly 150 SVN commits to the project as a whole, and there is a project analysis on Ohloh for it.
What is it like, doing it all yourself?
Well, you are all on your own. Instead of having a set of guidelines to follow, it's all up to you to choose what to do. This freaks some people out; yet others enjoy it.
Why?
You follow your own standards. Don't like them? Change them. You won't get constantly bossed around by the project lead saying it isn't good enough simply because you are the project lead. (This isn't entirely true though -- if you are developing something for a specific autdience, you need to adapt your standards to suit their needs as well, otherwise you can and most likely will lose that audience.)
For some people, being this independent is a problem. They simply don't know what to do. These people are so used to having a structure to follow that they get flustered when designing their own independent project simply because they do not have anyone providing that structure for them. To be honest, I was at that point once -- I had started a project and couldn't handle the size of it. Simply put, I didn't have enough experience with programming at the time and didn't know how to proceed.
For those people that don't feel comfortable with building your own project from the ground up, I say this to you: step back, and go do something else. You aren't ready. When you feel like you have enough experience to start your own independent project, then you should consider it, but not until then.
Creating your own PHP application (even when you borrow large pieces of code from another project) is a substantial undertaking, and you have to be prepared. It takes dedication, caffeine, and most importantly patience for beginning your own project.
What have you gained from all of this?
During the time that I've spent building Failnet, I have come to understand some of the things that developers of large projects emphasize -- it isn't easy being in charge. You have to do a lot, and I mean a lot of research into ways to do things.
I can't begin to say how often I've written code, then gone back to it later, scratched my head and said "what the heck is this?", then scrapped it entirely and rewrote it because I did not like how it worked. Time and time again I have gone back to the featurelist of my project and ripped a part out of it because it wasn't well thought out, it wasn't very doable, or it was just plain stupid. I can only imagine if Failnet grew popular, the feature requests I would get; in fact I dread it. But such is the curse of being widely used, and every heavily distributed application gets an enormous amount of requests that the developers have to go through and say "not only no, but HECK NO" to.
Now I understand the strenuous development process that the larger applications go through. It really opens your eyes, working on a larger-scale independent project.
How do you do it?
Well, you take a long time to sort everything out. When you are writing an entirely independent application, it takes even more time to sort out what you want it to do.
If you don't sort it out and code as you go, everything turns out a mess. I've experienced this on a few things that I've made -- it wasn't pretty.
If you are alone in building the project, or you are one of very few active developers, do yourself a favor and do not set public deadlines. It will be the end of you if you set deadlines if you have an audience -- they will nag you to death if you miss a deadline. Not to mention it reflects badly on your application.
It is also a good idea to hunt around for similar projects.
I did this myself with Failnet, and in the end it paid off. I found another IRC Bot coded in PHP with a great design, which was Phergie. I would have used it myself instead of writing my own, however I didn't like how it was coded in some places. The IRC protocol integration was beautiful, and the runtime method of using plugins to interact with encountered events was sheer awesome. The main issue was that I didn't want multiple connections at all -- that was overkill. Not to mention some of the methods were just outright stupid to have -- you could set the properties in the classes that made up in Phergie to public and just wipe out two methods for each property, since these properties were only to retrieve and set the property's value.
So, I took a bit here, and a bit there, and started rebuilding my code. Now, I've fully integrated the plugins system, and have begun integrating an SQLite database for the bot. It is amazing how far this project has come in the time I have been developing it -- when I started this project it was a mess of functions that powered Failnet. Today, Failnet boasts robust coding methods, powerful backend systems, plugins, and several other features.
When will your project be done?
Like any other open source project, it'll be done when it is done.

