This is a list of books currently on my To Read shelf... literally. I do not suggest or anti-suggest any of them at this time as I haven't read them yet.
Current Efforts:
Blue Parabola, LLC
HubAustin
web2Project
PHP'ers:
Cal Evans
Eli White
Elizabeth Naramore
Joe LeBlanc
Matthew Turland
Matthew Weier O'Phinney
Planet PHP
Tony Bibbs
Business/mISV:
Bob Walsh
Eric Sink
Joel Spolsky
Micah Baldwin
Paul Graham
Past Projects:
CodeSnipers
HOBY
Judicial Watch
mobile FoxNews.com
NRTW
Great Tools I use:
Drupal
GitHub
NetBeans for PHP
phpUnit
Subversion
Zend Framework
This is not the home of dotProject or web2project. It is the home of CaseySoftware, LLC. Any dotProject support questions should be referred to their support forums.
A few weeks ago at the PHPBenelux Conference, I gave my presentation on the rebirth of dotProject as web2project where I covered one way of rebooting a project. But after catching Elizabeth Naramore's talk on "Technical Debt" again, it got me thinking..
Within web2project, we made the deliberate decision to work on our technical debt. Even after 2 major, 5 minor, and one patch level release, we still occasionally find issues ranging from annoyances to things that will require major refactorings*. Either way, since we're steadily documenting them, we're constantly getting a better picture of the state of the system and its strengths and weaknesses.
Alternatively, we could have trashed the code and started from scratch..
The classic example is Netscape 5.
In the 4.x series of Netscape (circa 1997), they had a successful product with high market share but behind the scenes, the underlying code was "a mess". It was difficult to extend, expand upon, fix, and do all those great things developers know and love. It was the classical technical debt dilemma.
To solve the problem, they put a basic support team on Netscape 4.7.x and dedicated everything and everyone else to rebuilding the system from the ground up as Netscape 5. Weeks, months, and even years passed and the Netscape community was split. You could continue developing for Netscape 4.x which was known to be a dying product or you could develop for Netscape 5.
No wait, Netscape 5 didn't exist yet.
Despite the best intentions, Netscape killed their community. Their product lines were completely stationary while a little company called Microsoft picked up market share with Internet Explorer 5.0, 5.5, and then 6.0. As much as we (now) hate IE 6.0, it was the only viable option out there for years. Regardless, even with Internet Explorer hitting nearly 95% market share, Netscape 4.7 was still out there. It was still under active use.
Ignoring a problem doesn't fix it.
Just because you set a codebase aside and do it the "right" way, your problems don't disappear. The same bugs that annoyed people yesterday will be there today and tomorrow. In fact, when the bugs are still there a week, month, or year from now, they move beyond annoyances and into frustrations as people think (or say) things like "this has been broken for years.. why haven't they fixed it!?"
And frustration leads to the Dark Side.
When you consider tossing your code and starting over, at first glance it seems like a great technical option. You get to go back and do things the "right" way. You get to architect it the "right" way. You get to put those great concepts in from day one instead of grafting them on later. It's a beautiful notion and sounds like a great idea...
Unfortunately, unless you get the replacement out there quickly, you run a risk of killing your organization. Your competitors have months (or years) to catch up and pass you. Your bugs and feature lists sit open indefinitely. But worst of all, your community is stuck somewhere between a dead project and a non-existent one. Where do they go?
It's the worst of all worlds.. and entirely avoidable.
* The scariest problem is our project_list_data function with Cyclomatic Complexity of 145 million.. which is down from 195 million. It "passes" data in via a series of globals and "returns" data the same way. Don't worry, we're working on it.
Netscape is a classic
Netscape is a classic example of a rewrite that went horribly wrong. That being said, it's also worth pointing out that Netscape resulted in Mozilla and Mozilla resulted in Firefox. Which, according to W3Schools, has 42.8% of the browser market and is the largest share of the plurality of browsers out there (http://www.w3schools.com/browsers/browsers_stats.asp). That being said, lots of people DID lose their jobs at Netscape and IE had an opportunity to grow into a huge browser market, from which Firefox has had to claw back.
A better example might be dotProject itself, which committed to rewriting the code from the ground up for the next major release and still hasn't released, years after the fact. Meanwhile, web2project has not only released major revisions, but has moved leaps and bounds beyond the original software, while improving the overall quality of the "rejected" code base.
Netscape vs Mozilla
Yes, eventually something better - Mozilla Foundation, Firefox, etc - came along but in the meantime, Microsoft had free reign of the web for almost six years.
And now almost seven years after Firefox 1.0 (2004 iirc), a ~40% market share is the peak..
(And yes, Firefox is my primary browser.)
Tools
Hi Keith,
Can you advise on some tools/procedures/best practices to measure cyclomatic complexity?
Tools
turns out on github, https://github.com/pceres/lint_php
Tools for Cyclomatic Complexity
Also, check out Cal Evans' "Five Tools.." slides here:
http://www.phparch.com/2010/11/codeworks-2010-slides/
He covers a bunch of tools we have and use on a daily basis.
Post new comment