Principles of Software Development Productivity

There’s been a few developer "Bill of Rights" lists that have floated around.  These lists generally include creature comforts like dual monitors or a fast PCs.  There’s certainly a business case for fast PCs, and I’ve made more than my share of these business cases.  But, these things are mostly just goodies under the guise of productivity gains. I’m all for productivity gains—I personally hate wasting time on something that I don’t need to do and doesn’t add value.  But, software designers can’t simply use productivity as an excuse to get toys.  If the productivity gains are impetus enough to … Continue reading Principles of Software Development Productivity

Getting Started Unit Testing with nUnit

Getting started with unit testing with nUnit is easy.  First download and install the latest version of nUnit, which can be found here:  http://www.nunit.org/index.php?p=download Next, you need to decide where you want your unit tests will live.  If you’re developing a shrink-wrapped system that will be deployed to multiple customers or clients, you’ll likely want to have an independent project to house your tests.  If you’re developing an enterprise system—and the software won’t be deployed outside your enterprise—then having the tests within an existing project (usually the highest-level project) is a valid option. Note: The only configuration I’ve been able … Continue reading Getting Started Unit Testing with nUnit

Flaws in the Microsoft Connect Process

The way Microsoft Connect works in terms of how a bug goes from being submitted to someone working on it (or closing it without working on it), is basically flawed. From a customer’s point of view, we post an "issue" that we’ve encountered and leave it up to Microsoft to fix the issue.  The problem is, most of the time, this isn’t what happens.  For the most part, the issue has no merit unto itself.  It’s a popularity game with Connect.  You have to campaign for people to vote for your issue if you think it should be fixed. I’m … Continue reading Flaws in the Microsoft Connect Process

Apple’s New iPhone SDK Licensing Changes are a Potential Win for Microsoft.

Microsoft is poised to release Windows Phone 7 (WP7) this year.  The success of any platform is the ability for users to run the applications they want and need on it.  That’s one of the selling features of the iPhone: the App Store.  The App Store has thousands of applications available for it.  It’s not really the fact that there are some lousy apps in there, it’s the fact that there’s choice and that adds value to the iPhone.  The iPhone isn’t just a phone that plays MP3s.  It can be much more than that. To a certain extent the … Continue reading Apple’s New iPhone SDK Licensing Changes are a Potential Win for Microsoft.

Platform Developer Creativity

Any platform that opens itself to 3rd party developers to develop software for requires that these developers be creative.  Without creativity the software that will be written for the platform will not promote it.  The platform will be viewed as second rate or not leading edge.  The quality of the software will end up being second-rate and the platform will end up being viewed as same. What does it take to promote creativity.  Well, that’s pretty subjective.  But, it’s easy to detect what hinders creativity.  Development tools and methodology restrictions hinders creativity.  When a developer is unable to pick whatever … Continue reading Platform Developer Creativity

The Add Reference Dialog is the Wrong Scenario

There’s been complaints, in some for or another, about the Visual Studio Add Reference dialog since it’s creation.  Some are very well founded.  Defaulting to the .NET tab then spending many seconds high-jacking the UI while it loads the list is not a good experience.  VS 2010 takes a step forward and puts the work to enumerate the assemblies on a background thread and changes the default tab. But, there’s still complaints about the dialog and the .NET tab.  Some complain that assemblies aren’t added in alphabetical order so it’s difficult to do anything until the list is entirely loaded.  … Continue reading The Add Reference Dialog is the Wrong Scenario

MEF is not An IoC container; but MEF uses IoC

Somehow I got on the conversion of MEF while chatting with Glenn Block.  IoC came up in that conversion.  I believe, at some point, I said something along the lines of MEF is not an IoC container; but MEF uses IoC.  Someone else asked me to clarify that after the conversation.  It’s a common misconception that MEF *is an* IoC container.  I thought it might be useful to summarize those conversations for others. Part of what gives MEF the ability to do what it does is most certainly IoC.  Traditional dependencies (control) are inverted so that something (the host) doesn’t … Continue reading MEF is not An IoC container; but MEF uses IoC

Women in High Tech

I know a lot of really good people in software development from around the world.  I’m fortunate to have spent face-to-face time with many of these people.  These people bring great value to our industry. One thing that was apparent again at the MVP Summit is the heavy male attendance on the software development side. The point was made a couple of times and some tweets flowed about it a few times.  Is it a good-old-boy’s network?  Are software development leaders dominated by the “Alpha Male”.  Are women simply not willing to put up with any of us?  I personally … Continue reading Women in High Tech

What is Data-Driven Design

Data-Driven Design is a process of designing software structure and functionality.  Data-Driven Design infers functionality mainly from the information that the software is meant to maintain.  The functionality of the system focuses on having to create, view, and update that information. Data-Driven Design is useful for designing data models and designing database schemas.  The definition of data and the structure of a database is solely focused on the data it models or contains. Data-Driven Design differs in focus from Structured Design, which focuses mainly on what logic needs to be performed by defined how the logic changes program state.

Nourishing Technology and product communities.

Software technology and products have had a fairly unique attribute until recently: communities.  Software technologies and products have had this seemingly innate ability to have a group of people rally together about the product.  This community is a positive thing for the product: it provides technical (an sometimes emotional) support for the product and promotes and evangelizes the product. With the maturity of online social “platforms”, many non-software products are trying to build their own communities to reap the benefits that software product communities have gains for so many years.  This trend simply validates the importance of product communities. So, … Continue reading Nourishing Technology and product communities.