Tag Archives: Development

Quick Thoughts from //build/

Was at the Microsoft //build/ conference. Like other conferences, you usually get your mind blown and information overload. No difference here. Excited about all the new announcements. Getting used to the new Samsung Win8 tablet they gave out. Once again Microsoft is going to change the game for developers, for good or bad. But most skills will translate. Windows 8 is very early. I can see potential. There will be metro style apps, and desktop (or “pro”) apps. Eventually users will clamor for Metro apps. The tablet is nice, a little big, fan runs all the time. Haven’t even scratched the surface. You can try to compare to iPad but they aren’t the same class of device. This tablet is a PC. iPad is a tablet. Looking forward to digging into .NET 4.5 (even though it wont be supported on XP). Looking forward to learning WinRT and Metro. Want to do more with OData and I think it can give some quick wins (Did you know that is the only way to query data from Metro?)

A lot more will come out in the coming months, and hopefully most if not all of the FUD will subside. I am excited again though as a “Microsoft” guy (even though I’m an “Apple” guy too! :) ) .. I can see convergence with Phone and PC, Cloud/Azure. Exciting Times.

I probably will have a more detailed post on things later, maybe not though :)

Agile: Tech Debt Sprint

In software development, the biggest thing you can do for the users of your product is deliver value. Adding business value is critical to maintaining a good product and keeping users happy. But there is another group you need to keep happy as well, and that is your development team.

Technical Debt (think of it like real money debt) is the extra WTF’s that add up in your codebase over time. You add a new feature, and take some shortcuts, you say “we will fix it later” but later never comes. You end up with untested (Unit Tests/Developer Tests) code and with “legacy code” that is hard to maintain. How do you get rid of all that? You have to pay down your debt, that is where Tech Debt Sprints come in.

Just like paying down regular debt or even how people keep regular debt, you usually have some. People have mortgages, or car loans, that they pay down. So in any app you end up having tech debt, but you need to keep paying it down instead of just adding more and more debt, because sooner later you’d have to declare technical bankruptcy, which is no good. (Close Shop? Rewrite? etc).

What I like to do is balance tech debt in two ways.

1. First, in every sprint, there should be a percentage of points dedicated to technical debt. 15-25% is a good number.

2. Second, every X sprints you should flip that percentage. So if you usually do 70% enhancements, 10% bugs, and 20% tech debt, every 4-6 sprints, you should flip it around: 70% tech debt, 10% bugs, and 20% enhancements. I might most later on the concept of another type of sprint, a “Hardening Sprint” where you dedicate 70% to just bugs to “harden” your app.

Now, you may have to negotiate with your Product Owner, which after a while they might get high on the drug that is enhancements and business value. Most reasonably Product Owners though, will realize that the code and developers need to pay down tech debt to make the overall application better and also make it easier to get future enhancements to market faster.

You may even get some stories that I like to call “Trifecta” stories. What are they? Well it is that “magical” story that satisfies three causes, Enhancement, Bugs, and Tech Debt. An example might be a crappy custom control that you’ve had in your app that you can replace with built in functionality or a better architected 3rd party control. Users will get the added functionality (enhancement), crazy bugs from your custom code are gone (bug fixes) and tons of crappy code is just dropped from the codebase (tech debt). Everybody is a winner!

I blogged previously on using User Voice to track your tech debt items at a higher level and have devs vote on them, it works somewhat, better than nothing. Usually stories come out of each “idea”. The bottom line though is to make sure you dedicate time and effort to paying down your technical debt. Far too often dev shops ignore this or always put it off till some mythical “later” that never comes. You need to just do it. It will make your code and app better, your devs happy, and keep things moving forward.

What is an Operating System?

This is a core question. Might sound stupid or you might even ask yourself why I would blog this. But seriously, we need to take a look at the Operating System our code is running on. Windows? Mac OS? iOS? Linux, etc. But beyond that, what is core and what is “cruft” in the OS?

I think Microsoft got a hard lesson some years ago from the DoJ on what can or can’t be included in the OS from a monopolistic perspective. But even then, Apple adds things to their OS and bundles them, etc. So what am I getting at?

If you develop native apps (more so for OS X or Windows, not the Mobile OS’s) then you are going to run into compatibility problems. Hardware, software, OS level stuff. DLL Hell, the whole bit.

As a developer or even “product” you can only do so much, you have to mostly code for the “happy path” – and give some documentation and direction to your users. ex:

- This software only works with .NET 4.0
- This software only works on Windows XP SP3 and Windows 7
- You must have a sound card to make use of the features of this software
- You must have an internet connection to make use of this software
- This software only runs on versions SQL Server 2008 R2
- Running an anti-virus package or malware detector on the files the program reads and writes to constantly is going to slow performance.
- Port xxxxx must be open for external devices to connect

You get the idea. You can code some checks into your setup/installer or program on start up of the exe, but beyond that, you have to leave some things to the user. You can’t ever think of every scenario.

If some other program (albeit even an add on you can download after installing your OS from the vendor of the OS) is going to conflict with your program, then the user has to decide which program they want to use or come up with some compromise.

From a Microsoft Windows point of view, the OS is what you get from Microsoft. Not what you get from Dell or HP or whatever. No, Adobe Flash isn’t part of the OS. Either is Windows Live Messenger or Windows Live Photo Gallery or any add on you download later. Hell even .NET wasn’t part of the OS until Vista/7.

When developing your applications, focus on what is going to give your users more functional and business value rather than coding for things you have no control over. Leave it to support and documentation to handle the infinite unknown scenarios.

Code for a fresh Operating System, and supported patches as they come out. You might have a few RARE scenarios you code around but I would suggest against it. The user’s and other programs that might screw up your users OS’s, you can’t do anything about either.

After all that, it is more clear why Apple’s iOS is appealing, sandboxed applications make more sense. You worry about your stuff and I worry about mine type of deal. Less room for support nightmares because of misconfigured operating systems. I wonder if Microsoft will ever “get there”, but I don’t see it anytime soon.


Thoughts on Windows 8 Details

Yesterday at All Things D, Microsoft announced Windows 8 (codename of course) details, and a first glimpse on video
 

Windows 8 Video #1

My initial reactions to this, as a consumer and as a development manager of an app that at this time is completely windows desktop .NET based:

HTML5/JS Apps

First reaction? Why not just use a browser? and How are they going to interact with the OS? What level’s of rights will they have to read/write file system, etc, etc. Also, what happens to Silverlight? C++/Winforms apps? Yeah they show old apps running “behind” the new UI, but what is MIcrosoft’s stance on development of these other technologies? WPF? They have told devs to build using these tech’s for desktop for years, now, lets go HTML5/JS? WTF? Will apps run in browser too? On a mac? iOS?

Tiles

First reaction? Looks like an exploded Windows Phone UI, WP7. Which at first blush looks cool but I have found usability to be painful. Seems to be more of a shell UI on top of Windows 7 (or whatever). They should call it Windows Blinds Smile

In General

I think that this will be a good refresh for the OS, but it might take a few iterations for this new UI to be used heavily. My take? Users will get the OS installed and (hopefully there will be an option to) turn off the new UI and go back to what they have used for years. Slowly but surely the new UI will take hold with some cool apps and more and more people will use that and get used to it, abstracted away from the core OS explorer, etc.

Looking forward to trying it out in beta, and when it goes live. I will give MSFT this, they keep things changing so devs have to keep learning! Oh yeah, and PDC is no longer, it is now BUILD – http://www.buildwindows.com/

UserVoice: Using A Customer Service Tool To Democratize Technical Debt

Not sure if you anyone has heard of or used “UserVoice” – It is a site that allows you to create “forums” for your products and then submit ideas, give users votes and they can vote them up, and an admin can say things are started, merge ideas, or mark when the idea has been completed (and the votes go back to the users).

UserVoice is (sorta) along the same lines as GetSatisfaction (another cool customer service 2.0 app). Pretty cool tools. If I was in a customer service role, especially with any type of user based or public product, I would be running these tools to gather ideas and feedback from my users.

I am in a technical role, so what I decided to do was “democratize” the development area of our product one of my teams is working on. We have a ton of technical debt (as do most teams, it is just a matter of what level of debt you have) – but what should we work on next from a technical perspective?

In comes UserVoice. Let’s throw out ideas on UserVoice, give everyone 50 votes, and the ideas that bubble to the top will become our next set of things to work on. One “idea” may become several “user stories” (we are agile). Our goal is to have 20-25% of our stories focused in on paying down our technical debt. If we didn’t, the debt would never get down to a low enough point to where we are very comfortable.

What is cool is that it really shows what the team wants to focus on next. People can have others vote up their ideas, etc. Also, getting the votes back at the completion of an idea is key. As you can imagine, our forum is private. The one cool thing about UserVoice is you can create multiple forums, with different ranges of settings, so you could also have a public forum, or a different private forum for a select group of users, etc.

One thing I wish I could do is maybe give different # of votes to different users. Integration out of the box with TFS or other systems would be nice too, I haven’t looked to much into that though.

If you have a team that ranges from medium to large, I would suggest checking out UserVoice to get the ideas and opinions of the members out on the table regarding your technical debt. You may be surprised as to what gets voted to the top!

Thoughts on the Future of Microsoft Development #pdc2010

The PDC was last week. I have never been (was scheduled once but didn’t end up going), but I try to keep up with everything that they have online, and now even more the blogs and tweets. Here are my thoughts after digesting everything I could.

Strategy

I’m not sure this much of one.. but Microsoft is still trying to figure out and find their development strategy. From back in the 90’s when it was Win32 then MFC and ASP Classic with VBScript + Office/VBA, to then Managed code (.NET C#/VB.NET, and ASP.NET Stacks).. and then WPF/Silverlight, they still and always will keep changing so that developers have to keep learning new things and looking at the next shiny object. There hasn’t been much of a convergence or steady path though. It seems once a developer or team picks up a technology it is already outdated, and I am guessing this will never change.

Anyways, after watching the videos and seeing discussion, this is what I think..

1. HTML5

The web! Ahh, the web. The one place there are no restrictions. Apple is saying, develop under our restrictions, or go out to the web with HTML5, and Microsoft is going to follow suit. If it was ASP Classic, or ASP.NET WebForms, and then MVC, and now HTML5, the web will be around for a while and Microsoft doesn’t want to get left behind. For a while they were touting Silverlight as the “new web” or whatever, but that seems to have changed.

Web applications are good for some things – well, a ton, but not everything. You can’t do some of the richer things you can do on a client on the web, deeper integrations. You can’t really run a web app offline either, no matter what people say, it just won’t be the same as a fat client. Anything I hear from MSFT that says, it does “X” if you use IE9 and I just cringe. Forget IE, let’s make it work for all browsers.

2. Silverlight

If you are developing for the WP7 Phone (who has one? yeah – I thought so), you use Silverlight, other than that, not 100% sure where they are going with this. Use it for video streaming? Games? Flash killer? Basic RIA application that needs a little more integration with the desktop than a standard web app, but less than a fat client. The problem is, what you can and cannot do in Silverlight changes every release – In my opinion they should open it up more, let you do more things with the desktop. Let devs focus on just one set of rules. I have a feeling that Silverlight might just be used as a “glue” technology instead of a “main” technology. The glue between Web and Windows?

3. WPF

Unknown here. Not much at PDC, but some talks. Winforms (like Webforms) is a forgotten technology at MSFT, so to all the people who jumped on those trains, sorry, you need to hurry up and get on the new trains. I have read some places that WPF is the future for desktop/fat client apps at MSFT, and other places where there is no Product Manager, there is barely a team, no support, they are letting it die (ala Winforms), but who knows for sure. What should a developer do? Enterprise and Line of Business applications that need desktop integrations can’t be created in Web or Silverlight, and .NET developers really don’t want to fall back to C++ (although Evernote did – and saw a huge performance gain). Microsoft needs to instill some confidence in developers that a technology they would choose isn’t neglected – to me that is just piss poor business practices. On one hand let’s market the hell out of it (which with WPF really hasn’t been the case, but marketed way more than Win32 or Winforms) and get everyone on the bandwagon, and then let it die, and 2 years later say “X” is the brand new toy you need to focus on. They finally are doing some things at MSFT in WPF, but to what extent? Black magic embedding WPF controls in Winforms or Win32 apps? To me, seeing the pretty awesome data binding stuff with WPF makes it a no brainer. Why not extend the enhanced data binding to Winforms? Why make devs switch?

 

Like I said, more convergence of tools. Use expression blend for front ends? Yes! – but it should be for everything, Windows/Web/RIA, not just Windows/RIA. Language constructs getting to the same level no matter where you code? Yes – sounds like a good thing to me, so why is it so tough?

The new Async framework looks sweet, what else for Windows devs on the .NET side? Can we get some more detailed strategy from Microsoft on where things are going? What to focus on? Companies and developers are stuck making a leap of faith when choosing which technology to use – to make sure they aren’t left in the dust. On the Apple side, it is pretty clear – use Objective C and you can code for Mac, iPhone, iPad, etc. use HTML5 for the web. Should we all be using Java? or C++? Why have .NET devs struggle to figure out what technology to use? So bottom line..

 

1. Web – HTML5/ASP.NET MVC, WCF services, etc

2. Mobile – Silverlight (aside: what ever happened to the .NET CF?)

3. Windows – WPF, WPF, WPF (but don’t forget about console apps and windows services!)

It would be interesting to go to Microsoft dev shops around the globe and do surveys..

“Hey there – what are most of your websites and web services written in?”

    Answer: “Webforms and ASMX services -  we are looking at MVC”

“Hello, what are you doing for mobile development?”

    Answer: “Well, since WP7 phone just came out and who knows if it will take off, we do everything in Objective C for iOS devices or just have a mobile website in ASP.NET webforms, or we have some Java based Android app, and some crappy Blackberry apps or something..”

“Hola, what are you doing for your LOB desktop apps, etc?”

    Answer: “Well we have a few legacy VB6 apps, some Win32 apps, and we have poured tons of time into Winforms over the last 7-8 years, but we want to start looking at WPF”

I bet a majority of the answers would be similar to the ones above. Who the hell is doing anything in Silverlight? Niche apps/markets? What about WPF? A few, and some proof of concepts, but yeah, even the MVC stuff is probably on a slower adoption rate then MSFT would like. Not sure how they solve this problem. One way would be to STOP CHANGING THINGS EVERY TWO YEARS so that dev shops can focus and incrementally move to the new technologies, but I don’t see that happening.

Where do we go from here? Well, I am pretty excited to see what .NET 5 brings. :)

Visual Studio 2010 Productivity Power Tools

One nice thing released for VS2010 recently is the “Productivity Power Tools”. If you are using VS2010 I would recommend installing it.

Once installed, you can see the options under Tools->Options->Productivity Power Tools

 

image

One feature I really like is the “Fix Mixed Tabs” feature.

image

When you open a code file it will analyze and tell you if need to “Tabify” – convert spaces to tabs, the old developers argument of tabs vs spaces solved. BTW, they should be tabs!

Check out the tools and learn the other features, there are some good things in there to help your code and get around in VS2010.