The holidays have begun. Apart from having fun, I have started reading the archives of Joel on Software, one of the most popular blogs on software, usability, software engineering etc.
Wait, I know you are going to stop reading this post because I mentioned software engineering. Now, be a little patient and go through the rest of the post ;-)
The "Painless" series of articles on Joel's blog is just too good. Software engineering texts by Roger S. Pressman are very good to read. But, they are intimidating to the beginner :). Therefore, this series of "Painless" articles should help us to get started and be efficient too.
Mostly, we start our projects by opening the popular text editor and start spewing code. And, there are actually 12 better ways to write code. Once, we complete coding, we figure out that we have missed something and later fix it, which brings its own separate set of problems. At this point, the project goes haywire and becomes like the figure on the left :).
So, all we need is a good spec to which we can refer and understand where things change and what all parts are getting affected. Start here to go about writing effective specs.
Normally, we work without schedules and don't understand the importance of them. Working on a schedule is very important because we know where we are and where we take wrong turns. Here is a way to painlessly schedule your project :)
After you begin to code, you introduce a new set of bugs right? Is there a way to painlessly track bugs? Yes there is :D. Read this article. Most probably, you work in a team and if the team members are a bunch of nuts whom you are finding difficult to manage, read this and this. They provide significant insight on how things happen at the bigger level. Lastly, if you are developing web applications, this article on "Less is More" is excellent.
Oh! and here are 2 nice case studies from Joel's company itself.
I have linked part 1 of the articles, check the archive for other parts.
Now, that you have read all the links and the basics are firmly established, I recommend going back to the tables and designing your software that way.
Happy Software Engineering !!