Sunday, August 5, 2007

Importance of process improvement over software methodology

The MPMM site has an explanation of what a methodology is. But what do you understand from the first 3 words of the explanation “A methodology tells”? I believe the word “tells” can be interpreted differently, such as an instruction or explaining some finding. How many times have you heard someone blaming a project that is ineffective executed due to poor design or insufficient requirement gathering? A very interesting quote from HackNot - “To Those About to Hack”:

people whose immediate reaction to the imposition of a deadline is to rush head-long into the coding task, giving little or no consideration to so-called "formalities" such as requirements elicitation, design, planning and preparation. Since the advent of Agile Methods, this approach seems to be frequently euphemized as "being agile". Fearing the bogeyman of BDUF (Big Design Up Front) as espoused by the AM proponents, the Georges decide to opt for no design at all. They just start hacking, figuring they can always come back and refactor it later ... and sometimes, they actually can. Other times, as George found out above, the decisions you make early in a project limit the options available to you later.

Interestingly, Classic Mistakes Updated has a list of 36 mistakes for Rapid Development. If there are so many classic mistakes, then why should it be chosen to be used in the first place? Methodology should be a set of guidelines to follow, but not following it blindly. Choosing the right methodology to use, fine tuning it to suit a project and discipline in applying what is defined is an important process and execution in such project management. Else, no perfect methodology will work.

How often did a project get into the closing stage of a project management phase? More often than not in the real world, project team is usually rushed to start the next project even before the current project has been closed. As such, members of the team do not have the time to reflect and review on what they have done and what challenge they have encountered from their past experience. Thus, result in making the same mistake over and over again without improving. Therefore, to get out of the loop, process improvement is very important then just applying software methodologies on projects blindly.

Methodology is all about process and improving the process should be a major consideration to look at, as everyone and organization should work towards improvement. Capability Maturity Model and Six Sigma are some process improvement model that may be applicable to you. Do give a consideration on the power of process and the importance of process improvement in the future. Give more thoughts on it, rather than trying to sound cool talking about the latest methodology without trying to improve.

Monday, April 30, 2007

Database Performance Tuning Methodology

Recently, I have attended a course on the SQL Server 2000 Performance Tuning & Optimization Workshop. The course covered in detail all the components of the system such as the architecture, hardware and the database. The availability of the different tools were also introduced on how they can be use to analyze the performance of the database. Reflection on the course conducted, I realize that the principles or a methodology in performance tuning was not really discussed and covered in detail.

With some research on the internet, looking for the principles or a methodology on performance tuning, nothing much was found and discussed. Interestingly, the only substantial list of basic principles on performance tuning is found in one of the site. But I don’t think they should be constituted as principles, but more on the components to work with or look at when optimizing the database performance. What I am looking for are actually a set of principles or methodology that how should one go about with the optimization of a database performance.

Finally, I managed to find this book SQL Server 2000 Performance Tuning from Microsoft Press that discussed the performance tuning methodology. I believe this methodology is as important as understanding the components of the system and making use of the different tools. The following is a series of steps that maximize the efficiency at solving performance problems on the systems:

1. Determine the problem
2. Formulate a potential solution to the problem
3. Implement the solution
4. Analyze the results

Does a system with load or significant load suffer performance issue? Optimizing the database is not just about having a perfect database design and having the best hardware right from the start, but a lot more is in the review and on the maintenance of the database. At the start, database are seldom working at the maximum load or even half the load, so it is more likely that along the way an application evolve and push the database towards a higher load. Database performance is rarely slow due to all its components hitting their 100% usage, but it is usually due to one of its components hitting their limit resulting in a bottlenecks. A usual saying: “A chain is as strong as its weakest link” and this truly applies to the database performance.

To optimize a database performance, analyzing the existing performance and look out for bottlenecks are important. With this, the problem can be determined, and formulating a solution and implementing the solution can follow. And lastly, analyzing the result of the implemented solution will tells how effective was the solution implemented. With such a methodology, I believe it can be applicable to any database. However, to understand the components and making use of different tools available, I will said is more dependent on the type of database and it will takes more than a book to cover such topics. Also, such information can be easily found and discussed on the internet.

Some useful links on the performance tuning for the different database:
Oracle9i Database Performance Tuning Guide and Reference
Microsoft SQL Server 2000 RDBMS Performance Tuning Guide for Data Warehousing

Thursday, April 26, 2007

Windows Swap Files on Two Drives

I have just gotten a new PC after a long four years of modding, resuscitating and resurrecting a P4 2.4Ghz / AMD Althon 2400+. Yes, I have changed three motherboards, three power supplies, two CPUs, 4 hard disks, 1 CDROM drive, 2 graphics cards and 4 sticks of RAM. All in all I have more than 1 Tb of hard disk space in 7 hard disks :P

Well, I finally threw in the towel and gotten a brand new computer:


The new computer is fast and quiet! However it is also very bright, thanks to the blue LED on the Centurion 5. Sigh.

Well, here is the problem. I have a old Maxtor SATA 120Gb hard disk lying in my cupboard after my first motherboard with a SATA controller died. All my subsequent motherboards does not have SATA controller. Since the 965G-DS4 can support up to 6 SATA drives, I was more than happy to pop the Maxtor into the computer.

After assembling a new computer, the natural thing for a geek to do is to optimize the system to run at the most optimum speed right? And when you have an additional drive in the computer, you will want to move the Windows paging file to the non-system drive right? But wait. The new drive is SATA2 while the old one is SATA only, therefore it will be a lot faster right?

A quick check using Nero DriveSpeed confirms my suspicion: the new Seagate is at least two times faster than the old Maxtor. So does it makes sense to move the paging file to the another slower drive, or should I leave it on the current faster drive, considering that I have 2Gb RAM, so swapping should be rare (yeah right...)

After some searching, I found the perfect solution: two swap files, one on the faster system drive and one on the older drive. Turns out that Windows will automatically select the faster drive to write to. Clever piece of software :P