Tuesday, October 30, 2007

Proposals for MySQL Conference

I submitted proposals for the MySQL Conference & Expo.

SQL AntiPatterns II

I thought it would be a no-brainer to do a sequel of my 2007 talk, "SQL AntiPatterns". That talk was very well attended, thanks to Jay Pipes' endorsement in his guide to the conference. It's not hard to come up with all-new content for a sequel!

Topics in this presentation:
* Corrupt your data by storing images in files instead of BLOB fields.
* Kill your query performance using the HAVING clause.
* Use the FLOAT datatype and lose money.
* Add an "id" column to every table -- whether it needs one or not.
* Prepare queries using parameters for identifiers and keywords.

Designing Models and Such: using MySQL in MVC Applications

I just recently finished working for Zend Technologies, spending a year developing the database access components for the Zend Framework.

A database like MySQL is an integral part of virtually every web application. This talk describes practical ways to leverage MySQL in your project, to meet goals of development productivity, application performance, and security.

Model-View-Controller (MVC) is a popular architecture pattern for web applications, but it may be novel to PHP developers. Designing Models in an MVC application is the subject of many questions, so this talk will focus on these issues.

Examples use the Zend Framework web application library for PHP 5.

Topics:
* Designing database-backed Model classes for MVC applications
* Caching data and metadata appropriately
* Storing authentication credentials in a database
* Configuration management and testing issues
* Logging application events to a database

The audience for this talk is assumed to know object-oriented programming concepts in PHP 5.

Tuesday, October 23, 2007

Leaving Zend

I've worked at Zend for the past 13 months, heading up an open source project called the Zend Framework. Zend Framework is a library of PHP 5 classes providing simple, object-oriented solutions for most features common to modern web applications. I was the project manager as well as developing a lot of code, tests and documentation, and engineering the product releases through its 1.0 release.

When I joined Zend in September 2006, that project had made a few "Preview Releases", but it was losing momentum. My assignment was to organize the project, finish development of the 50+ components in the library, make regular beta releases to demonstrate progress, and to move the product to a general 1.0 release as rapidly as possible.

To achieve this goal, I knew we had to manage the scope of the project carefully. There's always tension between CSSQ (Cost, Scope, Schedule, and Quality) in any project. The project already had bare-bones cost, we had high standards for quality (who doesn't?), and Zend placed a very high priority on making a general 1.0 release as soon as possible. So the only thing remaining to control was the scope.

We were blessed with an enthusiastic user community, but this meant that we had dozens of people submitting feature requests and proposals for new components every week. Though the ideas were genuinely very attractive, there was simply no way to add them to the project scope without causing consequences to the schedule or quality of the project. And there were some features that we wish we had time to do before we had to reach that 1.0 milestone.

Some members of the user community voiced objections to the emphasis on schedule over feature-set. I hope they understand that we were following the priorities of Zend, who is after all the sponsor of the project.

We released Zend Framework 1.0 on June 30, 2007, and followed it with a couple of bug-fix releases in July and September. Zend Framework is accelerating in popularity, with over 2.3 million downloads to date. I feel proud to have contributed to a successful web application component library. It's very satisfying to see so many people using code I worked on, making their own projects more successful.

I was honored to work with a great team of software developers. I learned a lot from Darby, Matthew, and Alexander as we worked together, about technical subjects, productivity, and teamwork. Those guys were great to work with, and I hope to work with them again someday. There are a lot of other fine people at Zend and in the Zend Framework developer community, but I worked most closely with those three.

I completed my assignment at Zend successfully. But Zend and I were unable to define a next objective for me. That usually means it's time to declare victory and move on, so I gave notice and I finished working there last week.

During the time I was on the project, the Zend Framework increased by:

  • 104,000 lines of PHP code in its core library;

  • 100,000 lines of PHP code in its unit tests;

  • 3,945 unit test functions (overall code coverage from tests is 84%);

  • 40,000 lines of documentation;

  • 200 new community contributors.