Sunday, May 11, 2008

Why Team System?

I'm a HUGE fan of Visual Studio Team System. I think the software development industry is in major need of a more structured and disciplined approach. Developers have long enjoyed the freedom afforded them by the nascent technology. Hackers were crucial in the early days of the computer revolution. These lone rangers were the innovators researching the technology before business even understood how they would use it.
However, now the tide is turning. The majority of custom application development done today is commissioned in order to answer a market need. Line-of-business applications are assembled by many people working together in a variety of roles. As the size of development projects has grown, so has the need for improving process and tools. In the past, these things were arguably overhead that slowed down the innovation.
I think it's imperative our industry embraces this trend. I want to push innovation as much as the next futurist. However, business people and general consumers look at software as a necessary evil to get things done or something they are forced to use due to company policy. While underground R & D and hacker innovation was enough in the past, today's larger efforts require the support of businesses and end-users.
I think Microsoft Visual Studio Team System seeks to address this need. Giving development teams the platform for process and the tools they will need to improve communication for distributed development, mitigate risks to promote project success, and reduce the cost of development and maintenance.
Visual Studio Team System is made up of several SKUs. The sheer number of features in the total product is as intimidating as the price tag. If you haven't looked into the various parts, here is breakdown of what I like about each one:
Team Foundation Server 2008
By far the most critical piece of VSTS, the server component replaces your crappy source control software (you are using source code control, aren't you?) with a truly enterprise-ready system. How do I know your source control system is 'crappy'? You are most likely either using SourceSafe or some open source system and getting exactly what you paid for.
Additionally, the metrics capturable in the Team Foundation Server data warehouse will give you quantitative metrics exposing exactly what's going on in your projects. This includes work item and bug tracking as well as tracking the quality of your code and automated builds.
(Note: This product works well in a Java-based environment as well!)
Test Edition 2008
The most likely product to change your current development process and improve the quality of your projects. Test Edition adds to the automated unit test capabilities in Visual Studio Professional Edition by giving you the ability to incorporate manual tests, recorded web tests, and load testing into your project. The most useful feature is code coverage (also available in Development Edition). Even if your application passes all of the tests written for it, that statistic likely means nothing if the code covered by those tests is 25%. Test runners simply publish their test results to a build and optionally include code coverage metrics produced by any combination of manual or automated tests.
Database Edition 2008
For a variety of reasons (good and bad), software applications still include a lot of business logic in the database (i.e. stored procedures, triggers, etc.). Traditionally, this code was either not kept in source control or code units were manually scripted out and saved to a shared location (often email!). By integrating with Microsoft SQL Server (support for other databases to come), this code is kept in Team Foundation Server with the rest of your source code. This script management isn't limited to your logic either. All of your database objects (i.e. tables, views, constraints, etc.) can be kept in TFS as well. This allows you to store "the truth" in TFS rather than on your production server, which often ends up out of sync with your development environments.
Another useful feature of Database Edition is test data generation. The tool can read your imported schema and generate massive amounts of test data with a simple click. Like the schema scripts above, this test data can then be repeatedly deployed as needed.
Development Edition 2008
While nowhere near as significant as the above features, Development Edition includes the aforementioned code coverage, code analysis, and code profiling. Code analysis is basically an integrated FxCop to help developers maintain some basic level of code quality. Code profiling is useful in those situations where performance is critical. Bottlenecks can be located quickly.
Test Load Agent 2008
Listed at the bottom of this list only because of its niche usage. It's actually very handy to simulate 1000's of users in a remote test environment. Additionally, the price is very competitive.
Architect Edition 2008
This is the least valuable of all of the products. (Although all that will change with the release of "Rosario".) Architect Edition will only find value in the larger enterprises where so-called "Ivory Tower Architects" work only in a strategic fashion never really dealing with lower-level details. It basically supports very high-level blueprints of applications for use during conceptual planning and initial design.

Thursday, March 6, 2008

Team Build Server 2008 Requirements

Here are some tips to be aware of when setting up a 2008 Team Build server:

From MSDN,

In order to run tests during build, Team Edition for Testers must be installed on the build computer. In order to run unit testing, code coverage or code analysis, Team Edition for Developers must be installed on the build computer.

The Build Server components are already capable of building the vast majority of the project types. However, if you want to simply compile your projects and you don't need to run code analysis or tests, then you don't need to install any Visual Studio 2008 editions.

Additionally, if you just want to build Web Application projects:

  1. On the computer running Team Build, navigate to the "C:\Program Files\MSBuild\Microsoft\VisualStudio\v9.0" directory.
  2. In this directory, create a "WebApplications" directory.
  3. Place the "Microsoft.WebApplication.targets" file in the "WebApplications" directory. This file can be found in the same location on your development computer with Visual Studio 2008 installed.

Saturday, July 7, 2007

Where's Waldo?!

There seems to be a trend toward a serious drop in enrollment in Computer Science courses throughout America. Possible reasons mentioned in articles and blogs I've seen include:
Lazy American students - I had a professor three years ago tell me he was walking through the Fine Arts building after having been told his favorite class was going to be cancelled due to low enrollment (2 people). This was a long-running (6 semesters) class on using VB.Net to create web applications. Suddenly, it dawned on him, there were more art classes currently going on in the halls around him than there were computer science courses offered by the school!
Fears of the job market - The media (and our current President) seem to have a significant fear of technology and this is creating a perception that the IT job market is on the decline due to decreased demand and increased offshoring. The actual statistics for both do NOT paint this bleak of a picture. Many of the clients I've spoken too are moving away from offshoring software development due to communication and quality issues. (I also think many American companies are realizing their own business and/or software development process is weak. This leads to poor requirements which prevents any remote development project from succeeding. I'll talk about process in future posts.)
Poor curriculum - This was the number one reason I dropped out of computer science while pursuing my undergraduate degree (and switched to Fine Art). After 5 computer science courses, I realized I was no closer to my dream of becoming a video game programmer. My professors (and don't get me started on the problems of tenure) were doing nothing to prepare students to enter the real IT world.
My current boss seemed surprised when I told him I was hoping to pursue an MBA rather than a Masters degree in Computer Science. However, even today, when I look at the courses offered in undergraduate and graduate programs at the university level, I am very disappointed. I develop line-of-business applications by day (and video games at night). The courses offered in today's universities include: Artificial Intelligence, Virtual Reality, and Robotics. While these are some cool topics, they only prepare you for a job in academia. Additionally, you are likely required to take advanced physics, chemistry, a minor in mathematics. I've never used anything beyond algebra and boolean logic. Not a single university in Missouri teaches .NET!! (Although many teach Java, they also have several courses on COBOL and make you use the vi "IDE".)
Salary comparisons - Even though many colleges have finally moved their computer science departments under the Engineering schools, the profession as a whole doesn't get the respect of traditional engineering. Many companies are paying noticeably less for computer science graduates than other engineering graduates.
The poor training available is a primary cause of the salary issues as well. The demand for people is high enough that employers eventually settle for substandard resumes. Would an engineering firm even consider hiring a self-taught mechanical engineer? Yet we do it all of the time in our industry.

Some good stuff about the industry:
Always changing with opportunities for innovation - This is a very exciting industry if you love learning and solving problems. As a consultant, I'm exposed to many non-technology topics as well. I've learned about large-scale construction project management, health-care administration, and a deep look into the metrics that drive Microsoft.
Options to work remotely/from home - I don't believe this should be a regular option for those on team-sized projects, but if you are an individual consultant or working on one-man projects, working outside the office is pretty standard. (Caveat: If you are too lazy to get ready for work in the morning, you probably don't have the right work ethic to work from home anyway.)
Fun - I think talking to senior people in this industry is unlike most industries. If they have been in the industry awhile and climbed up the ladder a bit, you really get people who love their jobs. I mean really, really love them. They read up on the latest trends and experiment with new products.

There have been many studies and attempts to rectify the situation:
One of Microsoft's attempts
Some 2004 statistics posted on ZD-Net
Some really good ideas

Saturday, June 30, 2007

First Post

Well, I finally found the time and location (thanks Ian) to set up my blog! So, here goes.

I'm a software developer working primarily with Microsoft technologies, so my posts will mostly relate to my interests here. Examples will include Visual Studio Team System, .NET 3.5 (including Windows Presentation Foundation, Workflow Foundation, and Windows Communication Foundation), software development processes and methodologies, and a smattering of other stuff.

Please comment on my often very opinionated thoughts and stay tuned!