I will be presenting my half day Agile seminar this May in Sydney, Australia. I hope to see you there. I will also be speaking at the Sydney .NET User Group that evening on Silverlight 4.0 and giving out some Telerik swag.

One of the most popular Agile project management and development methods, Scrum is starting to be adopted at major corporations and on very large projects. After an introduction to the basics of Scrum like: project planning and estimation, the Scrum Master, team, product owner and burn down, and of course the daily Scrum, Stephen (a certified Scrum Master) shows many real world applications of the methodology drawn from his own experience as a Scrum Master.

Negotiating with the business, estimation and team dynamics are all discussed as well as how to use Scrum in small organizations, large enterprise environments and consulting environments. Stephen will also discuss using Scrum with virtual teams and an off-shoring environment. We’ll then take a look at the tools we will use for Agile development, including planning poker, unit testing, and much more. There will be plenty of time for Question and Answer. This seminar is a jump start for a certified scrum master exam.

Love LINQ to SQL but are concerned that it is a second class citizen? Need to connect to more databases other than SQL Server? Think that the Entity Framework is too complex? Want a domain model designer for data access that is easy, yet powerful? Then the Telerik Visual Entity Designer is for you.

Built on top of Telerik OpenAccess ORM, a very mature and robust product, Telerik’s Visual Entity Designer is a new way to build your domain model that is very powerful and also real easy to use. How easy? I’ll show you here.

First Look: Using the Telerik Visual Entity Designer

To get started, you need to install the Telerik OpenAccess ORM Q1 release for Visual Studio 2008 or 2010. You don’t need to use any of the Telerik OpenAccess wizards, designers, or using statements. Just right click on your project and select Add|New Item from the context menu. Choose “Telerik OpenAccess Domain Model” from the Visual Studio project templates.

(Note to existing OpenAccess users, don’t run the “Enable ORM” wizard or any other OpenAccess menu unless you are building OpenAccess Entities.)

You will then have to specify the database backend (SQL Server, SQL Azure, Oracle, MySQL, etc) and connection.

After you establish your connection, select the database objects you want to add to your domain model. You can also name your model, by default it will be NameofyourdatabaseEntityDiagrams.

You can click finish here if you are comfortable, or tweak some advanced settings. Many users of domain models like to add prefixes and suffixes to classes, fields, and properties as well as handle pluralization. I personally accept the defaults, however, I hate how DBAs force underscores on me, so I click on the option to remove them.

You can also tweak your namespace, mapping options, and define your own code generation template to gain further control over the outputted code. This is a very powerful feature, but for now, I will just accept the defaults.

When we click finish, you can see your domain model as a file with the .rlinq extension in the Solution Explorer.

You can also bring up the visual designer to view or further tweak your model by double clicking on the model in the Solution Explorer.

Time to use the model!

Writing a LINQ Query

Programming against the domain model is very simple using LINQ. Just set a reference to the model (line 12 of the code below) and write a standard LINQ statement (lines 14-16). (OpenAccess users: notice the you don’t need any using statements for OpenAccess or an IObjectScope, just raw LINQ against your model.)

1: using System;

2: using System.Linq;

3: //no need for an OpenAccess using statement

4:

5: namespace ConsoleApplication3

6: {

7: class Program

8: {

9: staticvoid Main(string[] args)

10: {

11: //a reference to the data context

12: NorthwindEntityDiagrams dat = new NorthwindEntityDiagrams();

13: //LINQ Statement

14: var result = from c in dat.Customers

15: where c.Country == "Germany"

16: select c;

17:

18: //Print out the company name

19: foreach (var cust in result)

20: {

21: Console.WriteLine("Company Name: " + cust.CompanyName);

22: }

23: //keep the console window open

24: Console.Read();

25: }

26: }

27: }

Lines 19-24 loop through the result of our LINQ query and displays the results.

That’s it! All of the super powerful features of OpenAccess are available to you to further enhance your experience, however, in most cases this is all you need.

In future posts I will show how to use the Visual Designer with some other scenarios. Stay tuned.

While there is a Nobel prize in other scientific fields, there really isn’t one for computing. Instead we have the A.M. Turing Award, the next best thing. According to Wikipedia, the award: is given annually by the Association for Computing Machinery to "an individual selected for contributions of a technical nature made to the computing community. The contributions should be of lasting and major technical importance to the computer field".

Past recipients have included legends such as EF Codd and Fred Brooks. This year the award went to Chuck Thacker, a technical fellow at Microsoft Research for his lifetime achievement and for his work in the early 1970s on the Alto, the first PC. (When he worked at the Xerox PARC.) More on Thacker and the award can be viewed here.

By now there have been a lot of blog posts on Windows Azure billing. I have stayed out of it since I figured that the billing scheme would generate some sticker shock on our end and some rethinking on Microsoft's end. For the most part it has, but I now want to tell my story since I think most early Azure users are thinking along my lines.

When Windows and SQL Azure went live, I wanted to deploy an application using some of Telerik’s products to “production”. I put my free MSDN hours into the Azure system for billing and uploaded the application. I actually could not get it to work and left it up there figuring I would get back to it and fix it later. Periodically I would go in and hoke around with it and eventually fixed it. For the most part I had nothing more than an advanced “Hello World” and simple Northwind data over forms via SQL Azure up there.

Recently, I received a bill for $7 since I went over my free 750 hours by about 65 hours. (I guess I had a test and production account running at the same time for a while.) Even thought for the most part I had no hits other than myself a few times, I still incurred charges since I left my service “live” in production. My bad, I learned a lesson as to how Azure works, luckily, it was only a $7 lesson.

It was then that I realized that I was guilty of treating Windows Azure as a fancy web hosting account. The problem is that Windows Azure is not web hosting, but rather a “web operation system” or a “Cloud” service hosting and service management environment. We’re not only paying for hosting, we are paying for Azure to manage our application for us- much like enterprise middleware 10-15 years ago, but for the cloud. I now look at Azure differently and this is good since I will use it differently (and how it was intended.) I am guessing that other developers with $7 bills in their inbox this month will do the same.

That said, I was in Redmond a month or two ago and had a chance to talk to the head of MSDN. I complained about how the MSDN subscription offer was only for 8 months, etc. He told me that for the first time in Microsoft’s history, they have hard physical assets that have to be paid for with this service. It is not like if they want to give me a free copy of Windows, it does not cost Microsoft anything except the bandwidth for me to download (which is a fixed cost.) I get that, and I am sure that there will be a cost effective MSDN-Azure “developer only” subscription option in the future. Or at least there should be. :)

Telerik is releasing an update to its entire product line this week. As usual, there will be webinars to walk you though all of the cool new stuff. All webinars will be held at 11 AM EST (full time zone conversion) and all will be recorded for Telerik TV on-demand viewing. To join the webinars, register now:

While delivering the Agile Seminars in Pune, India and Taipei, Taiwan over the last week, the question of the development team came up. What started out as a discussion of Team Velocity, ended with a discussion of “Heroes” or “Rock Stars” on the team.

Too many managers think that you need a team of super human coders to get the job done. I think that while a team should have the most talented, motivated, and hard working members it can find, teams should avoid adding the “rock star developer” at all costs.

At the seminar I told the story of a real life story of a team I managed a number of years back. It was a team of good developers and one rock star. Let’s call our rock star developer John. John coded faster than all our team members, some tasks he could do two or three times faster. His code was usually pretty spot on, decently commented, and well thought out. Shouldn’t the entire team be made up of John clones?

Well while the number of lines of code per day developed by John was high, other things did not add up. At code reviews John would argue with other developers about the direction they took. When those developers were not around, John would check out their code and make small changes.

What really got me to my breaking point was John’s inability to see the big picture. Once someone from the business side came over and asked John to make a small change to the online shop by the end of the day. It was a Friday of a three day weekend and the marketing guy thought that he can push this change out and help our sales over the weekend. This change was not in the product backlog (well this was almost 10 years ago, it was more of a project plan back then) but John said he can sneak it in today. John was assigned other tasks that day, but figured that if he skipped lunch and stayed a little late, he could do both and be the hero.

It did not turn out that way. John bypassed our build and qa and production upload process and somehow managed to push his change to production without telling anyone. He figured that the business people would be happy with IT and life would be good. The problem was that this took him longer than expected (it always does, even for rock stars) and he had to skip is regular tasks.

The rest of the team was at a local bar we hung out at watching the Mets-Yankees game on TV. (I remember it was a rare occasion where the Mets beat the Yankees.) John was noticeably not there and we just thought he went home. Then my cell phone beeps, it was the founder of the company asking me why the online shop is down. I said I had no idea and would look into it immediately. I asked a dependable programmer to come with me and we went to the office to see what was up. Back at the office, the other programmer and I discovered John banging his head against his desk. After some heated words, the other guy and I reverted the site back to the original state. John pleaded and pleaded that he needed just 15 more minutes and that he was a “better coder than me.” While that may have been true, I said that my code always goes through QA. Against his wishes, I sent him home. John would have done better if he called in sick that day, by overpromising, he not only caused a problem with the site that caused two of us to fix, but he did not do his assigned tasks, making him behind in his work.

The next day I get an angry phone call from the VP of Marketing asking why the change was not pushed to production as he was “told by IT” it would be. The VP said that an email campaign was to be sent out telling customers about the change and it would be expensive to cancel it. I told the VP that I don’t care and to cancel it.

Needless to say the next week there were some fireworks at the office. I told John that he was like a cow who produced two buckets of milk while all the other cows produced only one bucket. But he also knocked over other cow’s buckets when he walked by. John thought he was right and I was wrong. That did not go well for anyone.

After the annual raise and bonus season went by and John was not “taken care of” in his mind (he was given the same modest raise and bonus the rest of the team received), he quit and took a job getting paid far more. He asked me what I would say when he used me as a reference. I told him:

“John is an A+ developer. Smart and fast. He is an F- team player. Overall that makes him a C+ developer.”

John never used me as a reference.

Rock stars have no place on a high performing team. Don’t confuse a rock star or “hero” with a very talented developer. A rock star is someone who, while talented, thinks that they are the ultimate guru and that everything should be done their way. Avoid them like the plague!

PS, about 5 years ago John asked me to lunch. It was the first time we spoke in many years. We made our peace and he admitted that he was wrong that day and looked forward to working together one day. I told him that if anyone asks for a recommendation today, I will let them know about our past difficulties and that he has evolved from a “Rock Star” to a great developer with perspective.

Thursday, March 18, 2010

Self-Service Business Intelligence with Microsoft PowerPivot

Subject: You must register athttps://www.clicktoattend.com/invitation.aspx?code=146483 in order to be admitted to the building and attend.Ever wonder why there’s no "light" version of SQL Server Analysis Services (SSAS)? Find yourself wishing that SSAS offered an in-memory operation model akin to some of its competitors? And why are OLAP cubes nearly impossible for end-users to build while comparable capabilities have existed for relational databases for at least 15 years? Enter Microsoft’s product code-named “Gemini,” a component of the upcoming SQL Server 2008 R2 release, that joins together SSAS, Excel and SharePoint to make end-user analytics feasible, fun, publishable and discoverable by IT. Andrew Brust will show you how it all works in this not-to-miss session.

Speaker: Andrew Brust, Chief, New Technology, twentysix New YorkAndrew Brust is Chief, New Technology at twentysix New York, a Microsoft Gold Certified Partner in New York City. Andrew was co-chair at Tech*Ed Developer conference 2008 and was recently named Microsoft Regional Director of the Year for 2008. He is co-author of Programming Microsoft SQL Server 2008 (Microsoft Press), serves as Microsoft Regional Director for New York and New Jersey, is a Visual Basic MVP and a member of Microsoft's Business Intelligence Partner Advisory Council. Often quoted in the technology industry press, and himself a columnist for Redmond Developer News, Andrew has 20 years' experience programming and consulting in the Financial, Public, Small Business and Not-For-Profit sectors. He can be reached at andrew.brust@26ny.com.

In an op-ed piece in this month’s SD Times, I make the argument that software development productivity tools have evolved over the years to become more mainstream. I make the case that while some developers shun tools, in reality they take for granted the tools they are using today that were not available 10 years or so ago, or were not that mature. For example today we use some tools without even thinking such as: SCM, build management, standards enforcement, ORM and UI components. Tools today save a team a tremendous amount of time and are the missing link in the software development process.

You can get the March issue of SD Times on the newsstands today or read my article online here.