⇥ Happy holidays to all
The last business day before the holidays is usually one of the busiest days of the year for me—and today was no exception: we launched a special promotion on our single issues, and announced a brand new book by Cal Evans.
The last business day before the holidays is usually one of the busiest days of the year for me—and today was no exception: we launched a special promotion on our single issues, and announced a brand new book by Cal Evans.
Overall, the spontaneity with which PHP has been developed in the past is a combination of sheer recklessness (“I’ll commit and deal with the consequences later”) and a process of discovery that improves what is worth improving, while letting the rest wither (but, unfortunately, almost never die).
Poor Lord Black! He spent some of his company’s money and, next thing he knows, he’s being convicted of fraud.
I normally reply to comments with comments (somehow, replying with a new post feels like cheating), but in the case of my previous post about BusyBox, the variety of comments makes it impossible, so I want to note a few additional thoughts:
Of course we can’t have all possible freedoms, as some freedoms conflict.
Call me a hopeless naïve, but I believe that true freedom doesn’t need to be picked-and-chosen.
Personally, I have no problem with the BusyBox folks suing the pants off of those companies that infringe on their license. They are, after all, very clear on their adoption of the GPL and what they expect those who use their software to do.
I’m not sure how I can make it more abundantly clear than that, so I’m not even going to try.
At php|architect (and now at Python Magazine), we are often accused of using DRM to protect our PDF files. I have mentioned in the past that this is not true, but the accusations continue—probably thanks to two facts: (a) people have no idea what DRM is and (b) technology really, truly, sucks. Let me explain.
BusyBox is a very useful set of core UNIX utilities designed with size in mind. As such, it is often used in embedded system, where memory comes at a premium and a compact environment is necessary.

You might have stumbled across an article from Microsoft Technet titled 10 Immutable Laws of Security. It’s a really good piece, and I often point newbie users to it for a quick primers on the do’s and don’ts of security—it’s well written, relatively concise and authoritative.
Law #10: Technology is not a panacea
I wish more people would pay attention to this rule—outside of the realm of security. The ready availability of technology, together with the “your safety is someone else’s responsibility” attitude that pervades our society, has lulled us into thinking of technology in general, and software in particular, as something that has to be foolproof.
The problem is that software can only be as smart as the person who wrote it. Where more than one person is involved, the software they write is less smart than the sum of the intelligence of its creators. This means that the cost of development is not linear, but becomes exponentially higher with the complexity of the features that are being programmed.
Unfortunately, the complexity of a feature is usually inversely proportional to its simplicity from a user’s perspective. The mere act of insert a key in your car’s lock these days calls upon many high-precision features, both in software and hardware, that make the key and lock safe and secure, impervious to theft and, well, easy to use. But, to you, the user, it’s just a key and lock. If somebody told you that getting the key to fit in the lock and the whole mechanism to work probably took several million dollars worth of development time—and, still, the end product is susceptible to problems like freezing—you’d think that somebody was either crazy or outright lying. If that somebody were an engineer, you’d probably be wrong.
If complexity makes development expensive, in a controlled environment it’s relatively easy to do a bit of cost analysis and determine whether building something is worth the time (and money). A feature that saves, say 5 hours a month of customer support time but takes 100 hours of development time to develop must be considered very carefully—but the math is fairly straightforward.
The real—and hidden—threat behind not managing your development process well is, of course, feature creep and bloat. It is sometimes hard for a developer to refuse writing a new feature in a piece of software because of a number of overlapping problems: programmers like to program, and nothing is quite as challenging and rewarding as writing software that solves a problem—regardless of how real the problem is; it is difficult for a developer to make a user understand that because something looks simple to use, it isn’t necessarily simple to write. And users (including the developers and their increasingly bloated development tools) are simply jaded by the impossibly complex, and yet affordable technology that surrounds them.
How do you solve bloat? With a firm, but simple and unobtrusive development policy:
On the subject of cost analysis, I think it’s important to point out that there is a good way and a bad way of doing it… but that’s the topic for a future post.