Just sharing some of my inconsequential lunch conversations with you... RSS  

Wednesday, October 31, 2007

When to know your project is probably not working?


  1. your customer has organized a betting system on how long will your project be up running until the system it was supposed to substitute will be restored and
  2. the first hours are already taken... :)
This is probably the last opportunity you'll have to reevaluate your project before a sure catastrophe. Be sure to use it wisely.

The fastest Windows Vista notebook tested this year is...

... a Mac!

The fastest Windows Vista notebook PCWorld as tested this year is a Mac. Try that again: The fastest Windows Vista notebook PCWorld have tested this year--or for that matter, ever--is a Mac. Not a Dell, not a Toshiba, not even an Alienware.

in: bink.nu

Still learning after all this years

When working over some architectural decisions over a project, and when trying to simplify an approach, my customer gave me this valuable lesson:

Sometimes architects have the tendency to simplify to omission.

Lesson learned.

Monday, October 29, 2007

WPF Composite Client it's coming to stay!

in: MyTechnobabble

The Acropolis team just announced that the core Acropolis concepts will be rolled into future .NET Framework releases. While we're excited about this evolution of Acropolis technologies into the core platform over time, we're selfishly excited to have been chosen to pave the road from here to there for customers building Composite client applications.

Great news. I'm an Acropolis fan and firm believer on the composition benefits. When great design meets great simplicity things just can't go wrong. Happy to see that CAB and WCSF usage mistakes weren't repeated.

Posting like their is no tomorrow

This is my 100th post in October. My good friend André Cardoso has posted yesterday the following comment in anticipation for this moment:

October has been a productive month in post generation ;)

Almost 100 posts... 2 days to go, and 3 posts left.

Keep up posting (or jabbing, as Jeff Atwood puts it - http://www.codinghorror.com/blog/archives/000983.html)

Huau, jabbing, let say what Atwood is saying:

My theory is that lead generation derives from Google rank and that the best way to increase Google rank is to be like a professional fighter: neither jabs nor haymakers are enough. You must be always jabbing and you must regularly throw haymakers. Blog continuously to keep your hit-rate and link-traffic high and write longer pieces, containing the high-value words associated with your niche, occasionally.

And continues saying:

I don't care if you suck at writing. I don't care if nobody reads your blog. I don't care if you have nothing interesting to say. If you can demonstrate a willingness to write, and a desire to keep continually improving your writing, you will eventually be successful.

Hey, Jeff's reading my blog after all! Ummm, here's where I no longer agree with Atwood. Jeff, quality is good, or else you'll end up loosing your time reading pathetic blogs like mine. Jeff goes on:

As near as I can tell, between RSS stats and log stats, around 100,000 people read this blog every day

That's right, Jeff, I'm with you. Except that I get 70 unique visitors on a good day, and don't have a clue of how many people read my blog from RSS.

Jeff sees blogging as a way to success. I look for blogging as a way to give something back to the net, building a free and global knowledge base. And doing so we are also doing a social and political revolution: ending the era of editors and opinion makers. And yes, I'm also hooked up with blogging, so blogging is also a therapy.

Do your self a favor: save your time reading silly blogs like this one and start posting your own blog! Act now!

Why does it seem...

This is the best of the Dilbert stripes I've read for sometime:

Reference Implementation of the Web Client bundles from

Heard it from Brad Abrams.

Here is a brief summary of what the reference implementation shows (shamelessly stolen from Brad who had shamelessly stolen from Blaine)

  • Composability : Building a composite web application
    • Modularity: Building complex sites based on modules that can be independently developed, tested, versioned, and deployed
    • Page composition: Creating composite Web pages that contain multiple user control views. The user controls can be used across modules and can be independently developed, tested, versioned, and deployed.
    • Testing of UI Logic: Utilizing unit tests to test Web page logic
  • Responsiveness : Improving usability and performance of the composite user interface utilizing ASP.NET AJAX.
    • Autocomplete : Providing a list of suggestions to a user that are retrieved based on the characters they have entered.
    • Validation : Validating user input on both the Web browser and the Web server.
    • Live Form: Dynamically updating a field in the browser based on input from another field.
    • Live Search : Searching against LOB data from within the browser.
    • Live Grid : Adding, Removing and Modifying records in a grid.
    • Popup : Utilizing AJAX popup's to dynamically display data that is retrieved from the server.
    • JSON Service: Calling a Web service from the browser.
  • UI Appearance: Creating and modifying the look and feel of the UI
    • Layout management: Creating a common user experience across different independent modules, separating the responsibility of the UI design from UI development.
    • User profile–based UIs: Changing the behavior of the UI based on the user identity and profile information
    • Navigation: Providing role-based site navigation.
  • Security : Improving site security
    • Authentication: Identifying registered users of a site
    • Authorization: Changing permissions for different users
    • Data security: Validating input data to reduce the probability of cross-site scripting and SQL injection attacks.
  • Manageability:
    • Easy deployment: deploying and updating modules independently of other modules.
    • Logging and Exception Management: Providing a standard logging and exception management approach to ensure the operations team can more easily operate the application.

Take a look and see for your selves.

Leopard takes Tiger's space

Here's Greenfield's early opinion about Leopard:

Tiger is now a Leopard and the spots have been upgraded

Not much than stripes to spots found for now. Hope this changes over time...

Mozilla's Prism

Mozilla's response to Silverlight?

Prism is an application that lets users split web applications out of their browser and run them directly on their desktop.

… Prism isn’t a new platform, it’s simply the web platform integrated into the desktop experience. Web developers don’t have to target it separately, because any application that can run in a modern standards-compliant web browser can run in Prism. Prism is built on Firefox, so it supports rich internet technologies like HTML, JavaScript, CSS, and and runs on Windows, Mac OS X, and Linux.

The Mozilla Labs’ posting compares it to Adobe AIR and Microsoft Silverlight:
Unlike Adobe AIR and Microsoft Silverlight, we’re not building a proprietary platform to replace the web. We think the web is a powerful and open platform for this sort of innovation, so our goal is to identify and facilitate the development of enhancements that bring the advantages of desktop apps to the web platform.

And while Prism focuses on how web apps can integrate into the desktop experience, we’re also working to increase the capabilities of those apps by adding functionality to the Web itself, such as providing support for offline data storage and access to 3D graphics hardware.
in: infoq


Sunday, October 28, 2007

Asus Eee PC 701 review

According to cnet:

The Eee PC is stonking value for money, but its small size and cramped keyboard make it occasionally difficult to use.

It's still too much. At least comparing with the first projections from Asus. Nevertheless it seems like a great solution to carry to meetings and holidays.

P&P vNext, according to ALT.NET

Glenn Block has just posted a summary of ALT.NET wish list regarding P&P. Though not completely agreeing, here's ALT'NET list:


  1. Guidance on core concepts and principles like OOP, separation of concerns, layering, etc
  2. Guidance on good software engineering and design practices, code quality, TDD, DDD, BDD, code smells, CI
  3. Patterns / Anti-patterns - GOF / Fowler, etc (Don't make up new ones)
  4. Tutorials / examples
  5. Be Neutral / Pragmatic
    1. Trusted advisor on different tools, techniques and methods i.e. Stored Procs vs Dynamic SQL
    2. Existing OS solutions (NHibernate, Log4Net, etc)
  6. Be Critical including of community efforts
  7. Advocate community endeavors
  8. Engage with the OSS community


  1. Focus on toolkits and factories
  2. Become an evangelism org / marketing machine for the platform. (Though it's okay to become an evangelism org for patterns and good engineering practices.)
  3. Be Dogmatic (our way is the only way, or even the best way)
  4. Dumb down developers

Not to focus on toolkits and factories has advantages (greater pool from where to retrieve solutions) but also problems (too broaden offering won't facilitate integration, will rise the need of education on different toolkits and SFs, and above all may confuse most application enterprise architects...)

It may seem heretic for ALT.NET guys but I'm currently in the process of porting log4net usage to EL. Don't get me wrong, I just love log4net, but I think we really need to leverage application architecture plumbing. EL seems like the right placeholder to absorve great concepts, even without the best of the implementations. And though I'm using NHibernate, I'm waiting for my LINQ for Entities review on a real world project: if it works ok, I'll probably stop using NHibernate. And boy, do I love NHibernate...

I'm a long time NDoc user, and as many I am disappointed with it's failure - though I haven't yet swapped it to SandCastle.

When working on large projects we often observe a plethora of toolkits doing exactly the same, just because my company flavored Spring.Net, and another company digged EL, and another just did it with their own library.

This may seem like M$FT evangelism, but it really isn't. It's just me being pragmatic. I want to use the great concepts that came from the java and ALT.NET communities materialized on stable and enterprise drives toolkits.

Still using nUnit and CC.NET, but would like to use the Visual Studio equivalents...

Saturday, October 27, 2007

Real World NHibernate: Reducing startup times for large amount of entities

Ayende as posted the problem, but still hasn't the solution. This is a problem that seems to be affecting a lot of people (including me), and it was one of the problems discussed at Alt.Net.

Yet another .NET blogger going to Microsoft

Yet another .NET blogger and open source contributor sets sails to Redmond. Now was Rod Conery's time, the SubSonic guy, and the lucky team is yet again ScottGu's dream team.

I'm afraid this trend can turn against Microsoft in the long run. These people were in fact working for Microsoft's interests, just out of Microsoft's roll pay. They were helping creating great software over Microsoft technologies, and creating communities around it. And they were credible, not just because of their recognized competence, but also because they were independent. Hope they keep up with the pace they had.

The development process

Every now and then, enterprises need to redefine their development process. The next time my company will decide to redefine our process, here are some links I feel we should read:

Why these? Because they are written by some experienced and critical people. People that doesn't easily eat hypes and bullshit. Nevertheless people that believe we should continue our quest for development processes even when past experiences failed. And finally people that know that we are not looking for the Silver Bullet, but for a better way to do our work.

New OS on the block

in: infoq

1. 40MB of RAM to the virtual machine and ran the stripped down operating system with 10 active processes taking up only about 33MB of RAM.

2. The actual kernel is claimed to be about 4MB in size. Further reductions included for a minimal install:

  • 100 Files
  • 25MB in disk utilization
  • no graphical user interface
  • minimal http server
  • boot time of less than 20 seconds
3. We are talking about... Windows code-named Windows 7, the next Microsoft OS.
Yes, no typo error here, Microsoft. Uau, the world is really changing...

Microsoft: 88 Million Copies of Vista Shipped

in: bink.nu

Despite underwhelming consumers and being snubbed by enterprises, Windows Vista's numbers keep growing, with Microsoft Corp. saying Thursday that it has now shipped 88 million copies of the operating system, almost double the number of copies of XP in the same amount of time at its launch.


It does exclude the tens of millions of Windows corporate volume licenses. There, many enterprises continue to hold off on deploying Vista, acknowledged CFO Chris Liddell, though he expects them to start deploying it when Vista Service Pack 1's arrival in the first quarter of next year.

Linux Losing Market Share to Windows Server

in: bink.nu

Experts say that migrations from Unix to Linux have slowed down because all the low-hanging fruit has now been picked. Linux growth in the U.S. x86 server market has, over the past six quarters, started to falter and reverse its positive course relative to Windows Server and the market as a whole.

The annual rate at which Linux is growing in the x86 server space has fallen from around 53 percent in 2003, when Windows Server growth was in the mid-20 percent range, to a negative 4 percent growth in calendar year 2006, IDC Quarterly Server Tracker figures show.

Over the same time period, Windows has continued to report positive annual growth, outpacing the total growth rate in the x86 market by more than 4 percent in 2006, indicating that Linux has actually lost market share to Windows Server over this time.

Not quiet a trend, but somewhat in line with this other.

Microsoft Architect Forum 2007 :: Session3: Software Architecture

The 3rd session was presented by José António Silva. Though his focus was on composite applications, he ended up showing OBA, re enforcing Microsoft's message that desktop applications are still needed. He ended up with references to WCSF and SCSF software factories, Acropolis, Astoria and with a great link on the new syncronization features of Orcas: www.syncguru.com.

Microsoft Architect Forum 2007 :: Session2: Services Architecture

Jota has presented the second session, on Services Architecture. Better then my notes, here Jota's.

I've retained from the 1st part the SOA vision, as:

  • from within the enterprise, as a transactional mechanism, driven by upper management toward cost reduction
  • from the users, as an interaction forum, driven by users, toward adding value

The 2nd part was about the Internet Service Bus, a Microsoft initiative toward hosting a message bus proxy/hub to facilitate connectivity, identity and workflow over services. Follow Jota's post and you'll end up with an RFID demo. And for strange as it seems, it doesn't come with directory...

His conclusions:
  • Software+Services objective is to add agility and flexibility
  • ISB strong holds are:
    • loose coupling
    • trust
    • composibility, discoverability

Microsoft Architect Forum 2007 :: Session1: Software+Services

This last Wednesday I went to Microsoft Architect Forum 2007, held at the Lisbon. Here are some of my notes over the 1st session:

Session: Software+Services
Beat Schwegler

1. Service Transformation trends

  • Service Delivery (of which SaaS is a model)
  • Service Composition (of which SOA is a model)
  • Service Experience (of which Web20.,0 is a model)

2. Service Players [this is how I've named them]

  • Desktop
  • Enterprise
  • Online
  • Devices

Schwegler argued that the software won't just defect from the desktop to the cloud. Though this is a trend, other relationships are still needed, and the role of the desktop, while changing, is still of great importance.

3. Strategy [toward these new paradigms]

  • Experience: consistent across multiple clients
  • Deployment: on-premise and hosted
  • Development: extend tools and platforms to the cloud
  • Business Models: expand monetization applications and models
4. Others

Schwegler talked about the importance of federation and composition of services - on respect to composition of services he referenced popfly.

5. Conclusion

Service+Service is a concept of ANDs:

  • software AND service
  • hosted AND on-premise
  • RIA AND web AND desktop
  • transaction based AND subscription based AND advertisement based model

My conclusion: Schwegler gave us the "the future will not exist solely over the cloud" message. Microsoft depends heavily on the desktop model to perform, and is sometimes afraid of defections to the cloud (Google Apps and SaaS in general). But though frightened, Microsoft is right: we won't depend solely on the cloud. At least for now.

Writing PDF documents

Here's a great little library to write PDF files on C#: iTextSharp. iTextSharp is a port of java's iText.

With iTextSharp we can:

  • Serve PDF to a browser
  • Generate dynamic documents from XML files or databases
  • Use PDF's many interactive features
  • Add bookmarks, page numbers, watermarks, etc.
  • Split, concatenate, and manipulate PDF pages
  • Automate filling out of PDF forms
  • Add digital signatures to a PDF file
  • And much more...

Give it a try.

Calculating PI using F# on a (Virtual) Super Computer

Here's a great example of grid computing. The implementation uses Alchemi, an open source grid computing framework that allows you to painlessly aggregate the computing power of intranet and Internet-connected machines into a virtual supercomputer (computational grid) and to develop applications to run on the grid.

This frameworks creates virtual computers from a grid of ordinary desktops, and hopefully will help soon me on a long awaiting project: an operations research highly intensive data project.

Google AdSense earnings

2 weeks later, here are my earnings: $0,63. Dear IRS, you guys will have to wait for over 7 years to get your hands on my taxes...

Saving power

I've finally found the right remote power controller for the right price which really doesn't wastes power.

I've found it at LIDL. It is a Mandolyn 9952, a set of:

  • remote controller
  • 3 remotely controlled sockets
  • 1 remotely controlled dimmer
I've got my self two of these set, for 25€ each, and started setting them up. Here's my topology:

  • Channel1: electronics at the living room; for now my old 32' CRT TV (16W standby) and my old XBox (9W just for being linked into the socked))
  • Channel2: portable power adapters and networking; power adapter at the living room (9W), power adapter at the bed room (9W), ADSL modem + Wireless AP (26W)
  • Channel 3: electronics at the bedroom; 20' CRT TV (16W)

I didn't make reference to my bedroom DVD and living room Home Cinema because they don't waste power on standby.

A word of advise to the range: all my (small) apartment is in range! That pretty cool, but comes with a price: hope my neighbor doesn't get nothing on these frequencies...

And here's the economical analysis, assuming I'm only using all of these 4 hours a day: (20/24) x (16 + 9 + 9 + 9 + 26 + 16) x 24 x 30 / 1000 x 0,12 = 6,12€ / month savings! I'll have my ROI back in 8 months. Try and find businesses with better ROI while helping to save the planet and let's still allows you to turn of your TV from your bed :)

What's the definition of recursion?

I haven't eared about this one for ages, and here it was on a DotNetRocks episode dedicated to F#:

What's the correct dictionary definition for recursion? See: recursion.

Friday, October 26, 2007

FogBugz World Tour video now available

And it's about time! Hopefully Joel will now have time to return to what it used to be prior to this crazy tour. JoelOnSoftware it's an institution to geeks like me, and has for the past months serving as no more than "Travel Channel".

Welcome back :)

Evidence Based Scheduling

Here are two cool article about evidence based scheduling:

Here's how FozBuz does it. Please play the video, is not just about it's great content, but it's also also incredibly fun!

VS2008 Beta2 VPCs expiring prematurely

Oops. Boy, was I lucky. On the previous releases I've downloaded the VM, but I've been working on Orcas Beta2 on a clean W2K3 install.

Software+Services != Software as a Service

Some days ago I was earing Schwegler at a conference here in Lisbon talking about Software+Services. Let's start with Microsoft's definition of Software+Services:

Microsoft’s “Software+Services” vision combines the best of hosted and on-premise software to deliver compelling experiences for our customers. It’s about giving customers a choice and having integration across multiple devices and delivery methods to build flexible and optimized solutions for all customers. We call this approach ‘software + services.’

More powerful devices, expanding data storage capacity on devices and in massive data centers (“the cloud”), and the growing ubiquity of broadband networks have given rise to a new generation of software that resides on the Internet, is downloaded quickly when it’s needed, and is consumed directly within a Web browser.

Today, by combining elements of these Internet services with client and/or server software, we can deliver solutions that provide new capabilities and deliver new levels of utility, convenience, and flexibility. This “software plus services” approach offers an ideal balance between… the ubiquity and connectivity the Internet provides, and the rich interactivity and high performance provided by software that runs on a device with a powerful processor.

A good example is the Exchange experience, in which users can access email, contacts, and calendar on the PC through Outlook, in the browser through Outlook Web Access, on the phone through Outlook Mobile, and in the case of Exchange 2007, via voice through Outlook Voice Access, all of which are synchronized on the back end. And from a delivery perspective, Exchange can be deployed on-premise, hosted by a partner or hosted by Microsoft as a service.

This is really not completely new. Last year, at TechEd Europe, Clemens Vasters and Steve Schwartz did a great series where these models were discussed with another tags.

The new thing here is the high emphasis over this model, and the constant fear of the cloud. The "the future will not exist solely over the cloud" message. Microsoft depends heavily on the desktop model to perform, and is sometimes afraid of defections to the cloud (Google Apps and SaaS in general) and probably even to OpenOffice. Some other times Microsoft seems to be afraid of being reduced to VM usage over Parallels on Mac OS X. And that won't happen for the time being, as Apple just cannot understand the enterprise people.

And naturally, as I've mentioned earlier, Microsoft as nothing to be worried about. Instead of trying so desperately to push Office, which is a product good enough to sell by itself, Microsoft should lower Office prices. Instead of trying to push Windows only smart clients, Microsoft should extend their offering over Mac OS and Linux - and yes, Silverlight is a great start. On the CLR/DLR and ASP.NET they are definitely on the right track. As they have done with Vista, where Microsoft chose security and reliability over features.

Let me end with:
  • Not everything that glows is gold.
  • There are times where desktop application do make sense.
  • Just love the transparent connected/disconnected model experienced in Outlook. It's a peaty we cannot have that kind of experience over the net - could you pleeeeeeeease copy Google Gears?

Thursday, October 25, 2007

Five-step guide to ensure software failure

Here is Spolsky's five-step guide to ensure software failure:

  1. Mistake No. 1: Start with a mediocre team of developers.
  2. Mistake No. 2: Set weekly milestones.
  3. Mistake No. 3: Negotiate the deadline.
  4. Mistake No. 4: Divide tasks equitably.
  5. Mistake No. 5: Work till midnight.

Thanks, Joel, but how about writing the five step guide to software success? Applying Boole's algebra over the failing rules isn't quite enough, right? But it helps, thanks :)

Wednesday, October 24, 2007

Great teams have members that defy roles

Brad Abrams states:

The best teams I have worked in and with are those that defy the traditional roles and responsibilities. Putting up artificial walls between extremely closely related disciplines can only be detrimental to getting great team work.

I couldn't agree more. Brad ends with a few pragmatic thoughts for PMs in this sort of situation.

Microsoft to Pay $240 Million for Stake in Facebook

Here's another chapter of the social networking/advertisement war:

Microsoft has won a high-profile technology industry battle with Google and Yahoo to invest in the social networking upstart Facebook.


The astronomical valuation for Facebook is evidence that Microsoft executives believed they could not afford to lose out on the deal. Google appears to be building a dominant position in the race to serve advertisements online. Fearing it might lose control over the next generation of computer users, Microsoft has been trying to match and in some cases block Google’s plans, even if that effort is costly.

We are now stepping outside what is typically a business decision,” said Rob Enderle, the founder of the strategy concern Enderle Group. “This was almost personal. I wouldn’t want to be the executive that’s on the losing side at either firm.”

This reminds me of a car I bought some years ago. I put to car dealers fighting with each other. Needless to say, that was the better deal I've made, after a personal decision was made by one of the buyers. And no, it wasn't a $240 million deal...

Eight suggestions to get a program loaded into your head

In "Holding a Program in Your Head", Paul Graham, co-founder of Viaweb and writer of "Beating the Averages", argues that "your code is your understanding of the problem you're exploring. So it's only when you have your code in your head that you really understand the problem."

Here's his list:

  1. Avoid distractions
  2. Work in long stretches
  3. Use succinct languages
  4. Keep rewriting your program
  5. Write re-readable code
  6. Work in small groups
  7. Don't have multiple people editing the same piece of code
  8. Start small
I'm afraid I'm at the present time perfectly incapable of avoiding distractions. And fun as it may be to get to participate on quiet a lot of projects at the same time, this distractions often come with a price tag to pay...

Read about it at: infoq

Is Desktop application software dead?

Google would like us to think nearly all of the software will soon be used online. Microsoft would like us to think desktop applications will still rule. As in many other issues, the truth will probably lie somewhere in between. One thing is for sure, Microsoft seems really threatened, not by the competition but with some of it's historical inability to understand the cloud. On the other side they do understand the enterprise world like no many, and most of the enterprises won't embrace online operations as easy as individuals.

Bottom line is: sorry Google, they just won't. And sorry, Microsoft, they'll definitely have to change.

Opensource Windows frontend for Oracle databases

Here's a cool alternative to TOAD and SQL Developer. It's source is open, and is incredible light and fast!

... SQLTools++, which is based on the original open source tool SQLTools (http://www.sqltools.net). SQLTools is a Windows frontend for Oracle databases and offers a quite powerful text editor and result set browser, along with numerous other useful tools, like schema/object browser and DDL extraction tools. You can find more information about SQLTools on the original home page. Although it is far from being as comprehensive as other tools available like TOra or TOAD, it has its unique features, and in addition to that it is lightweight (The installer is just about 1MB in size), fast and does not need an installation, so you can run it directly from any storage medium like an USB stick, which makes it a good choice as quick access tool if you come to a new place and need to quickly check database related issues. All you need is a valid installation of an Oracle client and your copy of SQLTools.

The version available on this site offers some additional functionality and enhancements which I found to be useful. Most of the features added/modified are about better handling of the tool and better support of SQL statement performance tuning. You'll get instant support for many features Oracle provides in that area with a single click (e.g. DBMS_XPLAN.DISPLAY_CURSOR output for 10g and later, and an emulation of that functionality for 9i is currently being worked on), which makes SQL tuning much easier.

Give it a try! Thanks for the tip, Marco :)

Monday, October 22, 2007

Yet another map finder in F#

Here's another WideFinder Naive F# Implementation.


I was fooling around with Vista Speech, and this phrase got my attention: "Train your computer to better understand you". My first reaction was to roll on the floor laughing. But then I realized this may be a problem with our actual mindset: we train people to understand computers when we should be training computers to understand us.

F# Learning - checkpoint

I've reached half of the 'Foundations of C#' so I decided to drop some lines. In the last year I had read a lot of F# samples, and they tend to be as clean as they could be. I now have the clear understanding that people who designed F# (or the languages that influenced F#) designed it for usage in the "real world". Yes, F# definitely is not a purist Functional Programming language. It cames packed with some of the imperative constructs that we know so well, right next to the cool FP goodies.

My next chapters will be 8 and 9, User Interfaces and Data Access. Yeap, looks like I'm about to enter the real world now.

Sunday, October 21, 2007

SQL Server 2008: hierarchyid Data Types

Relational databases have matured to such a level that doesn't leave much room for improvement. Here's one of the rare exceptions: hierarchyid Data Types.

Use hierarchyid (Transact-SQL) as a data type to create tables with a hierarchical structure, or to reference the hierarchical structure of data in another location. Use Hierarchical Methods (SQL Server) to query and perform work with hierarchical data by using Transact-SQL.

Hierarchical data is defined as a set of data items that are related to each other by hierarchical relationships. Hierarchical relationships are where one item of data is the parent of another item. Hierarchical data is common in databases. Examples include the following:

  • An organizational structure
  • A file system
  • A set of tasks in a project
  • A taxonomy of language terms
  • A graph of links between Web pages
Here's a sample:

SELECT * FROM Employees WHERE EmployeeId.GetAncestor(1) = @value

Saturday, October 20, 2007

When Ubuntu grows up...

... it wants to be a Vista/MacOSX. At least is what they're aiming with lots of eye candy. And now for another Vista/MacOSX look the same: these eye candy refuses to run on my old hardware... arghhhh, I give up, they'll end up all the same, and wining about each other... In that respect, I really feel I'm diferent: I just wine about everyone :)

I hate when companies imposes their software

Why in the hell software like Adobe Reader tries to impose google toolbar? Why in hell's name do I have to put up with google toolbar, an add on that serves better google's interests than my own?

The other day I've experienced even a worse experience: I've installed Flash9 on a fresh installation, and with no question asked, google toolbar was silently installed. If this wasn't enough, IE7 started complaining about the newly installed toolbar. And as I refused to trust the toolbar IE7 kept whining, making browsing experience quite frustrating.

Please stop this, Adobe and google.

Introducing F# [links]

Here are 23 more links from microsoft.apress:

Using an Object-Oriented Database in a Web Site

Here's an unexpected post from microsoft.apress:

This article describes some of the ways in which an OODB differs in principle and in practice from the more familiar relational databases, and identifies some of the products which are suitable for use with ASP.NET. One of the simplest OODBs to get started with is the open-source db4o, which I will use to demonstrate some of the benefits of this type of database.

Cool... Except for the current performance problems, I've no doubts about the future of object oriented databases. But then again, I've been known to fail in the past :)

Blogging source code

I'm now trying this online formatter. It as strong advantage over CopySourceAsHtml: it's lighter and more maintainable.

On the downside: the syntax highlighting is server sided, not attached to the IDE, meaning new keywords won't get highlighted.

More of the same with LINQ

As I've mentioned earlier I loved the Don Box's generator approach for reading lines from file. So I set my self to do something of a plagiarism and decided to do the same for directory traversal.

After a first disappointment (DirectoryInfo.GetDirectories and Path.DirectoryInfo were implemented on the class library years ago, so there was no reason do it with FindFirst/FindNext as I wanted), I had to realign my goal: I then decided to do some querying over directory contents.

Here's my first approach:

var query =
from files in RecursiveGetFiles(new DirectoryInfo(@"c:\projects"))
group files by files.Extension into g
orderby g.Count() descending
select new { Extension = g.Key, Count = g.Count() };

foreach (var extension in query)
"{0}: {1}"


Here's a sample over a project of mine:


















And there, it return the count of extensions for my projects directory. Those of you from the Unix community may feel terrible disappointed: a simple shell command of 2 or 3 utilities piped together would do the same. PERL, Ruby or Python would do it with ease. And you're right, in C# I even had to write the helpers:

public static IEnumerable<FileInfo> RecursiveGetFiles(DirectoryInfo directoryInfo)
foreach (DirectoryInfo subDirectoryInfo in RecursiveSubDirectories(directoryInfo))
foreach (FileInfo fileInfo in subDirectoryInfo.GetFiles())
yield return fileInfo;

static IEnumerable<DirectoryInfo> RecursiveSubDirectories(DirectoryInfo directoryInfo)
yield return directoryInfo;

foreach (DirectoryInfo directory in directoryInfo.GetDirectories())
foreach (DirectoryInfo subDirectory in RecursiveSubDirectories(directory))
yield return subDirectory;

But there's something kind of extraordinary going on here: the language I used for the querying was:
  1. (kind of) Natural - for those who know SQL
  2. Declarative / simple to write/read/mantain source
  3. Got the power of relational algebra
  4. As I didn't write the imperative 'how to', but the declarative 'what', the compiler didn't loss any optimization opportunity
  5. Strongly typing - and with that, statement completion
Probably not to others, but some of these are new to us on the .NET world.

On a future post I'll try and get read of the helpers - do it just using LINQ, on one expression. Maybe with some help from here.

Recovering LINQ 101 Samples

Here's and old post I keep visiting for reference.

Friday, October 19, 2007

slashdot hardware support

Here a nice litle article about the hardware architecture that supports slashdot.org.

P&P links

Here a nice round-up of some key patterns & practices team links J.D. Meier figured he'd like to share with the rest of us - lets do some RSS reader updates.

Function Memoization

Recursion is a great, but some times unnecessarily expensive. Take the case of Fibonacci: we've just computed the previous results for the series, why compute them again?

Here's a nice sample:

...we can Memoize fib so that if it calls fib again with the same argument then it will not recalculate but instead use the previous result. This will move our exponential function to a linear one at the cost of linear space to store the previous results (we could possibly use a weak reference hash map instead to solve problems with space if they existed). In fact, subsequent calls to fib with previously computed values will be evaluated in constant time.


Func fib = null;
fib = n => n > 1 ? fib(n - 1) + fib(n - 2) : n;
fib = fib.Memoize();

and here is the magic:

public static Func Memoize(this Func f)
var map = new Dictionary();
return a =>
R value;
if (map.TryGetValue(a, out value))
return value;
value = f(a);
map.Add(a, value);
return value;

Clarius T4 template editor

Clarius has updated their T4 template editor, and are now in Beta. It's a very useful editor for anyone doing large amounts of T4 template editing with good factoring of template code vs script and color coding of keywords.

The thing is... I still use CodeSmith! When Microsoft DSL Tooling was announced, I thought I would port most of my CodeSmith templates into T4, but that just didn't happen, strange as it may seem.

Read it here

Anonymous Recursion in C#

Here's a great post about anonymous recursion in C#. He shows us how to get to a clean:

Func fib =
Y(f => n => n > 1 ? f(n - 1) + f(n - 2) : n);

The question I'll have to ask is: as C# 3 doesn't natively support this construct, shouldn't the Y fixed-point combinator implementation be integrated into the class library?

Thursday, October 18, 2007

Starting new projects

On his first post Nuno Miranda, a good friend of mine, has chosen to reference Steven Feuerstein:

One of the most wonderful things about starting a new project is the fantasy that we can "do it right" this time...

As you can understand by Feuerstein's reference, Nuno is our PL/SQL guru. Great way to start, Nuno! Just keep those posts coming!

PS: T/SQL rules!

Language Trends... again...

Here a nice post about the current trends. The author states:

For a decade or even more and even today the object oriented paradigm has ruled the software development world. In away, and as part of the end of the "one size fits all" paradigm. [...] We also see more pluralism for languages so we get more dynamic languages vs. static typed one and we find a place for functional languages and not just object oriented ones.

After following some links I've recovered this article from infoq - the beauty of Ruby, and this paper from 1984, "Why Functional Programming Matters" , explaining the advantages of functional programming over structured programming. This paper is somehow recurring when we talk about FP - I remember receiving references to it from people like Telmo Felix and André Cardoso.

F# about to be "productized"

Yeap, seems like my decision on learning F# won't be so R&D as I expected, after all:

"We will be partnering with Don Syme and others in Microsoft Research to fully integrate the F# language into Visual Studio and continue innovating and evolving F#. In my mind, F# is another first-class programming language on the CLR."

Broadcasting from Ubuntu 7.10 - the Gutsy Gibbon LiveCD

Here it is, finally.

Funny how the Linux community is finally getting the hang of it - eye candy works!

Ok, if you go to System > Preferences > Appearance > Visual Effects and set to -Extra-, you'll get a lot of laughs on the room <update> - for the window moving, the tab switching looks just great</update>. But still on the right track. Unfortunately I couldn't get the desktop cube to do it's magic.

Ubuntu rocks on the LiveCD experience. Just about everything just works! Pretty cool! And without sacrificing my Vista installation. I'll keep this CD nearby, just in case.

[Update] Sorry, guys, I couldn't help finishing this posting from within Vista. Another cool feature, though not new to Ubuntu: we can read and write over our NTFS partitions. Cool.

Mini Blogging Cookbook

Ok, not really what I wrote on the subject - just wanted to capture your attention. More of a list of what posters often forget on the first days:

  • Choose a large width template so you can post code samples
  • Enlist Google Analytics
  • Enlist ClustrMaps
  • Exclude your own visits from Google Analytics and ClustrMaps
  • Enlist Tecnorati
  • Use tags from technorati
  • Keep a limited number of tags
  • List your tags as a cloud
  • <update>Enlist feedburner</update>
  • Put your blogs RSS link on your blog <update>(from feedburner)</update>

New kid on the block

I'd like to welcome Tiago to my blog roll. I have high hopes for his blog, as Tiago is a promising young developer with a capability I now lack: he just gets to develop all day long! As opposed to me, that just trash my time into endless meetings :)

Stay tune with him.

More laws

Here are another great laws, referenced by Atwood.

Letts' Law: All programs evolve until they can send email.

Zawinski's Law: Every program attempts to expand until it can read mail.

Furrygoat's Law: Every program attempts to expand until it can read RSS feeds.

Vista SP1 first impressions

Ok, other than the fact that Windows Updates reports SP1 installation as pending, everything is working fine. I confirm having SP1 installed - winver reports "Version 6.0 (Build 6001, Service Pack 1, v.275)".

[update] After some half an hour or so, it changed the status from Pending to Successful. It look like SP1 was finishing some updates configuration on the background.

It's too late to look around for changes. Hopefully I'll get to drive test it tomorrow.

Wednesday, October 17, 2007

The future of my profession

Yeap, those of you that still read this pathetic blog know of this pathological obsession of mine: I'm convinced that in the future we'll have too much people working in this industry doing too less to differentiate their work from one of our industry strongholds: automation.

As a result, I believe massive unemployment will hit our industry.

And yes, others have predicted the some in the past and failed. I won't. Why? Because I won't tell you when, just that it will happen :) Ok, I'm the Nostradamus of our industry, so what?

Here's another guy that suffers from the same paranoia:

Since early days of software development people struggled to build good systems. More and more people where thrown at the problem, making matters worse. But with the recent explosion of social web we've witnessed a new and interesting phenomenon: a handful of developers are now able to build systems that are used by millions of people. How can this be?

The secret is that as with any good endeavor it only takes a few good men (and/or women!). With a bit of discipline and a ton of passion, high quality engineers are able to put together systems of great complexity on their own.

Equipped with a modern programming language, great libraries, and agile methods, a couple of smart guys in the garage can get things done much better and faster than an army of mediocre developers.

Ok, his approach may be a little more self centered and elitist than my simplistic economical view. Nevertheless, the result will be the same.

My view is way more simple:
  1. Our effort is spent capturing, recapturing and rebuilding knowledge and the corresponding implementations of domains we don't know nothing about;
  2. We do it with near inexistent engineering practices;
  3. As we find it difficult to reuse, we tend to re-invent the wheel on each project;
  4. Our effort is spent on tasks software will easily take over, leaving too less time to handle... the business problem;
  5. Costumers are sympathetic with our constant failures, and periodically invite use to rewrite their systems from scratch - we even get to complain about the boring migration process! Ok, it's also about the constant hardware/software/software evolution. But remember:
  6. Hardware evolution will slow down one of this days. And when it the software will stop it's growth, which will stop hardware's pressure to grow, which...

Hopefully future organizations will need functional people to operate the applications they will create. Maybe that's the escape for many on our apocalyptical industry...

Hack: Download Windows Vista Service Pack 1 Beta now

Here's the hack, taken from bink.nu:

Downloading Windows Vista Service Pack 1 from Windows Updates:

  • Download Windows Vista Service Pack and unpack it to your system.
  • Run SP1Beta_Hack.cmd with administrator privileges and Windows Updates afterwards. It should show KB935509 which you should download and restart afterwards.
  • Run Windows Updates again, it should display KB937287. Download and restart your PC afterwards.
  • Run Windows Updates for a third time. Download the now appearing KB938371, restart your computer.
  • Finally, visit Windows Updates again and you should see the Service Pack 1 Beta for Microsoft Windows Vista available for download.

Tuesday, October 16, 2007

The three ways you can collect use cases

Well, you basically choose three ways:

1. Collect them according to what you designate as their needs

What? Are you crazy? This is your costumers business, not yours! Who the hell told you that you knew better than your costumer what are their business rules? Wake up, this is the way most failed projects took!

2. Collect them according to what your costumers designates as their needs

What's wrong with you? If your costumers knew what he wanted, why would they hire you as a consultant? Weenie! Get real! This is a great way to spend your costumers budget releasing low value.

3. Collect them according to what your costumers need

There, was it that hard? Your job is to dive into your costumers business, adding value to it. Your costumers know what's best for their business, but often they don't know how to express it, so one of your greatest responsibilities is to take it from them - notice how we use the term 'capture'? And they don't really have to know how to express it - that's not their business, that's yours.

You're the project's advocate (please don't confuse with the costumer's advocate). You're also some kind of psychoanalyst, in the sense you must help them extracting information they and only they hold deep down inside - and lookout, for them, this information they didn't give you is always obvious. You're the guardian of the project conceptual consistence. You're the one that will propose and negotiate changes in order to release more of the project's value. Your the one that has to guarantee it all sticks together.

Is this simple? Hell, no! But it's your job!

Do you need some hints? Sorry, no Silver Bullet here. Try avoiding the first 2, be sure to involve the key users, know as much of your costumers business and processes as you can, be sure to be as assertive as you can, embrace the problems as soon as they arise (don't hold them back from your costumers as you did as a kid), privilege proven practices, use good judgment, don't be afraid to backtrack when you're wrong, and above all, stop loosing your valuable time reading blogs like this one looking for the Holy Grail! The answer lyes between you and your costumers. Go find it!

The next language I'll put my hands on will be...

F#. I had already chosen to learn a new FP language. My choice was F# because:

  • it is statically typed (may be one day I'll catch up with the dynamically typed ones, until then my past traumas will no doubt keep me away from those);
  • it's not pure FP - there is a scape valve for my ignorance;
  • it's syntax is not too awkward;
  • it has a nice IDE I am used to;
  • comes freely attached to our beloved CLR :) ;
  • as an R&D language, I won't be committed to F# - kind of a one night stand with a language :) ;
  • I got my hands on a copy of Foundations of F# by Robert Pickering; it's a very accessible and pragmatic book, look for your selfs:
    • CHAPTER 1 Introduction
    • CHAPTER 2 How to Obtain, Install, and Use F#
    • CHAPTER 3 Functional Programming
    • CHAPTER 4 Imperative Programming
    • CHAPTER 5 Object-Oriented Programming
    • CHAPTER 6 Organizing, Annotating, and Quoting Code
    • CHAPTER 7 The F# Libraries
    • CHAPTER 8 User Interfaces
    • CHAPTER 9 Data Access
    • CHAPTER 10 Distributed Application
    • CHAPTER 11 Language-Oriented Programming
    • CHAPTER 12 The F# Tool Suite and .NET Programming Tools
    • CHAPTER 13 Compatibility and Advanced Interoperation

Monday, October 15, 2007

Windows Forms / WPF / XBAP / Silverlight positioning

Confused about the Windows Forms / WPF / XBAP / Silverlight positioning? Here's some light shattering from David Chappell.

Techniques for testing Data Access Code

Here's a great little sample of data access techniques from Osherove. Maximum score for being so concise, and still covering CastleProject ActiveRecord, NHibernate and Typed Dataset implementations.

What is Behaviour Driven Development?

What is Behaviour Driven Development, according to nosewheelie?

Behaviour Driven Development (BDD) is a development practice arising out of agile development methodologies, first developed by Dan North in response to the problems experienced using and teaching TDD [10]. At its core, BDD is a refinement to TDD that shifts the emphasis from testing to specification and is in effect the best practices of what developers practising TDD have been doing all along. While this doesn’t seem like a major change, the shift in emphasis from testing to specification brings a number of important flow on effects that positively impact the development of both test and production code. The following sections describe these effects.

Heard about it from Bellware, who as a different opinion.

Sunday, October 14, 2007

Format code snippets in blogs

In some browsers, the <pre> tag doesn't wrap. Well, that's probably by design, but nevertheless a nuisance. My code samples were just being cropped.

I've finally found a solution here, who had found it here. I just add the following CSS to my template:

.csharpcode, .csharpcode pre {
font-size: small;
color: black;
font-family: Consolas, "Courier New", Courier, Monospace;
background-color: #f4f4f4;
white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */

And that's it! Naturally I had to do <pre class="csharpcode" >. I'm now considering applying the CSS to all the <pre> code in my template, for backward compatibility.

Top Ten Software Architecture Mistakes

Eoin Woods, from the IASA Fellows has just posted his top ten software architecture mistakes - mistakes that are too often learned the hard way. Unfortunately no great news here - we presently know what's wrong, just didn't quite got the solution to the known pitfalls:

  1. 1. Scoping Woes. "This is the sort of situation where a simple travel booking system ends up with full expense claim management facilities being built into it, with inevitable repercussions for project costs, timescales and quality...It is really true that no security is needed beyond simple login? Once logged into the system can users really perform any system operation?"
  2. 2. Not Casting Your Net Widely. "A related mistake that many of us have made is to focus on just a couple of our system stakeholders – classically the acquirer (who is paying for the system) and the end users get all of the attention."
  3. 3. Just Focusing on Functions. "…unless the system exhibits a whole range of qualities (such as performance, security, maintainability and so on) it is unlikely to be successful."
  4. 4. Box and Line Descriptions. "There are two reasons why the [single, all inclusive] huge Visio picture doesn’t work well as an architectural description: firstly, it’s trying to show too much information in a single representation, and secondly, no one is really sure quite what each of the different types of symbol that you’ve drawn mean."
  5. 5. Forgetting That It Needs to be Built. "Common things to watch out for related to building the system include designs that the developers or testers don’t really understand, technologies that they aren’t enthusiastic about or don’t have the time to learn, and new technologies that don’t yet have good tool support or perhaps impose a new and unfamiliar way of working."
  6. 6. Lack of Platform Precision."…its no longer sufficient to simply say that you “need Unix and Oracle” when specifying your platform. You need to be really precise about the specific versions and configurations of each part in order to ensure that you get what you need. This will allow you to avoid the situation where you can’t deploy your system because someone has helpfully upgraded a library for one part of the platform without realising that it means that something else will no longer work."
  7. 7. Making Performance and Scalability Assumptions. "Start considering performance and scalability early, create performance models to try to predict key performance metrics and spot bottlenecks and get stuck into some practical proof-of-concept work as your design ideas are forming. This will all help to increase confidence that there aren’t any performance and scalability demons lurking in your design."
  8. 8. DIY Security. "A mistake made in many systems over the years has been to try to add security into the system using “home brew” security technology. Be it custom encryption algorithms, a developer’s own auditing system or an entire DIY access control system, locally developed security solutions are rarely a good idea. While most of us think we could probably whip up a clever piece of security technology in no time, we’re usually wrong."
  9. 9. No Disaster Recovery. "The key to getting resources to implement a DR mechanism for your system is to be specific and quantify the cost of system unavailability in a number of realistic scenarios. If you can also estimate the probability of the scenarios occurring then you can use these two figures to convince people that DR is important and to justify a certain level of budget to implement it."
  10. 10. No Backout Plan. "Make sure that whatever happens during the deployment of your system or upgrade that you have a documented, reviewed and agreed backout plan to allow you to restore the environment to its state before you started deployment."
My favorite mistake is number 2. What's yours?

Saturday, October 13, 2007

Search: Google, 61 Billion vs. Microsoft, 3.3 Billion

It seems like Google keeps kicking Microsoft's ass on search. Man, now even the Chinese kick Microsoft's ass!

No wonder. When live.com keeps having trouble to find relevant sites like devcatharsis.blogspot.com...

Invasion Of The Dynamic Language Weenies

Here's a great post I've missed - I've recovered it thanks to reading paddy's blog. Here's a nice sample:

Let's put both these claims to the test with a few examples. If you're unfamiliar with Ruby, see how natural the following code seems to you:

[1,3,5,7].inject(0) { |x,y| x + y }

Can you tell what it does? It's an expression whose value is the sum of all the elements in the array [1,3,5,7], which is 16. Let's try this exercise the other way around. If you had not seen the above, what syntax would you think Ruby uses to sum the elements of an array? Here's a guess:

for every x in [1,3,5,7] { total += x }

Why did I guess this particular construct and not any of the infinite number of alternatives? Because this is what might seem "natural" to someone with some programming background.

The complete post reading is a must. As a statically typed kind of guy, you could expect me to trash some of these dynamic languages. But I won't. I feel some of this languages constructs are very important for us - most of us feel our limitations on the languages we use, some regarding the lack of expressiveness, other regarging abstraction limitations, even lack of brevity.

One thing is for sure: we, developers, tend to be religious about these choices. And that is just wrong. I know what I'm talking about, I myself was a statically typed curly brackets champion for years.

The future will be about different languages for different needs, as craftsmen do with their tools - can you imagine build a table from scratch using nothing but a hammer? But just like them, we will prefer the tools we are feel conformable with - changing that over a hype is usually a mistake.

What I hope for the future is that some of this constructs are imported into my daily-usage languages. And that languages inter-operate more, so I can easily use languages according to their capability to address certain domain needs.

An Open Letter to the Blogspot Team

Here's a nice idea from paddy:

Your editors for creating new posts and especially for creating comments just are not good enough! As a programmer I have to use external programs to highlight the syntax of code for a new post which is bad, but the list of usable tags in a comment field is so small that I am reduced to writing a program to parse indented code and spit out something that will look merely OK. Contrast Blogger editing with this which is available on Wikipedia. Blogger, catch up! - Paddy.

I visited his interesting blog after a comment from him on DevCatharsis making reference to the crappy code presentation on my template. The idea is to indent code as Wikipedia does, extending the tag <source/>.

My first Google AdSense hit!

"In the desert of Devh Qatar"
"Spawn the child of Iugle the great"
"And on the third day, a hit was produced"
"And from that hit..."

... 15 cents were produced :S

Ok, I'm sorry about the biblical framing, but how else could I present such a poor result? By this rate, it will take me 5 1/2 years just to get my first check!

Oh, well, still an achievement for DevCatharsis. For now, probably the best choice for me may be to mantain my day job :)

Friday, October 12, 2007

The world is really changing...

Isn't it strange the world we live in? A world where IIS is just about to beat Apache, and Firefox is challenging Internet Explorer. Wouldn't the other way around be what we expected some years ago?

One thing is for sure: today was the turning point for my pathetic little blog. Why? Because their are more Firefox than IE users. Curious how we geeks tend to prefer Firefox, right? And no, that's not my case: I'm using Firefox, IE and Opera :)

LINQ-compatible streaming I/O helper

When reading some of the Wide Finder implementations, I come across with Don Box's approach. Besides the Wide Finder problem (be sure to look for this and other languages implementations), he gave us a nice clean generator based ReadLinesFromFile implementation. Here it is:

// LINQ-compatible streaming I/O helper

public static IEnumerable<string> ReadLinesFromFile(string filename)


using (StreamReader reader = new StreamReader(filename))


while (true)


string s = reader.ReadLine();

if (s == null)


yield return s;




Thursday, October 11, 2007

Vista revisitated

I've been using Vista since the early betas. I use Vista on my desktop at work - this is the one I use the most. But I also use XP on VMs and at home. And of course, Windows 2003 Server. And though I'm not on the list of the disappointed ones - I'm quite happy with it, it just stroke me that on my daily XP and Windows 2003 usage that I don't miss that much most of Vista's features. And that is troubling...

The Ugly History of Tool Development at the FAA

Here's another great article about the FAA AAS mess up. Here's something new to me on this project:

The overambitious agenda was aggravated by excessive faith in new technologies. Among other things, AAS was supposed to be a showcase for Unix-based distributed computing and for development in Ada, a programming language created by the Air Force that became the state-sponsored religion in object-oriented technology, itself a relatively young methodology for writing code in self-contained, reusable chunks. IBM tried to use Ada to enforce discipline on the project by making developers outline a design in high-level code, then fill in the blanks. But this was no match for an environment of where the FAA kept changing its requirements.

Eh, eh, eh, you can change projects, but it's just darn hard changing people. History sometime just can't stop repeating itself, after all...

If you think your in trouble, think again

The next time you step into a problematic project, take a peek at this most wanted list. Boy, are these project managers in trouble:

System Function .



Years of







Vehicle Registration,

Drivers license . Calif.





Automated reservations,

ticketing, flight scheduling,

fuel delivery, kitchens

and general administration

. United Air Lines


1960s.Early 1970s



State wide Automated

Child Support System

(SACSS) . California




Hotel reservations and

flights . Hilton, Marriott,

Budget, American Airlines




Advanced Logistics

System . Air Force




Taurus Share trading

system . British Stock




$100 - $600M

IRS Tax Systems Modernization





FAA Advanced

Automation System



$3 - $6B

London Ambulance

Service Computer Aided

Dispatch System



$2.5M, 20 lives!

Did you notice the 20 lives? Double oops....

Taken from: When Systems Engineering Fails --- Toward Complex
Systems Engineering

Development Catharsis :: Copyright 2006 Mário Romano