Tag Archives: Development

build

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 :)



technicaldebt

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.



Windows-Start-button

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.




windows

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.



Visual Studio 2010: Adding a Web Reference

In previous versions of Visual Studio, you could just right click on a project and choose “Add Web Reference” to add a reference to a asmx web service. In Visual Studio 2010, when you right click, you will see “Add Service Reference”… similar, but not the same. If you reference an asmx you will get some weird objects back in your proxy web service object, each method with Request/Response at the end. You may want this, you may not. If you want to get the legacy web reference back, here is what you need to do.

Right Click on a project, Add Service Reference, then click on Advanced, the Add Web Reference. Then you will be able to add your good old asmx reference like you used to in earlier versions of Visual Studio.

image



Development Need #1 – Multiple Monitors

What’s one of the first things that developers want/need/can’t live without? Multiple Monitors. In most cases this starts of with 2 or Dual monitors, but this should be a standard. More monitors means more screen real estate which means you can more things up in front of you which means you can get more done. 15-25% more done, easily.

So, something that simple, a 200-400 dollar investment, can make your developers more productive, you should make dang sure every one has dual monitors, same size, for sure. Using a laptop screen and a monitor doesn’t count as dual monitors. Having a 15 inch and 21 inch is a mess. Two 19′s or 21′s or even better, higher inch screens is going to make developers happy, it is going to make them more productive, and it isn’t going to break the bank.

Not even anymore in development, but just all over a company, people should have two monitors. From the receptionist to the CEO. Just makes sense.




Living Virtually: Running your Dev Process on Virtual Machines

Virtual Machines have been around for years. VMWare and Microsoft have been the main competitors for a while, both offering somewhat similar products. Parallels for Mac is another, and Virtual Box for pretty much everything. I have used them all. When it comes right down to it, VMWare, to me, is ahead of the rest, so I am going to focus on that. Heck, I did a P2V (Physical to Virtual) on my girlfriends wacked out laptop and that is working great, 2 months later :)

What is a typical scenario for most people? They go buy a machine, set it up, use it. It works great. It crashes or gets hosed. They lose most if not everything, spend a week redoing the machine and start the process over. This goes on for a few years, then they get a new machine, and start the cycle over

But…

What if you thought “virtually”? So, you go buy (or build) your beefy development machine. But then didn’t install anything but Windows Updates (of course), and VMWare Workstation. Now granted your want your physical box to have 8, 12, or 16 GB of RAM, and loads of fast disk space, but yeah, just need to have a beefy machine.

Now, you set up your actual dev machine as a virtual machine, you give it 8 GB of RAM. You install the OS, and take a snapshot (In VMWare). You install VS2010, take a snapshot. You install SQL Server 2008 R2 Dev, snapshot. You install each browser you need to test with, snapshot, snapshot, snapshot. You get the idea.

Now, if something is totally wacked, you can revert to a snapshot. You can even have multiple paths of snapshots, this type of thing is very VERY cool if you get it going correctly.

You can also just grab the entire VM hard disk and settings and copy off to your trusty 2 TB USB drive or whatever and you can do this once a week and you have a complete backup of your dev machine.

You can then set up another VM, say, “Web Server” or whatever you desire, give it 2 GB or whatever it needs to run, do the same thing. You can have both running, and do your testing. You can create a separate SQL Machine for testing. Try to set up your environment as you would for your development. If you need an Active Directory? Set that up, set up 3 VM’s or whatever, you don’t need to have them all running all the time. You need Exchange? Or SharePoint? Same thing. You have a Technet or MSDN Subscription, right? No? Go get one NOW.

What is even better then best, is that 3 years later, when you get an even better machine, you know what? You just install VMWorkstation, and copy or locate your VM’s and you are set. No resetting things up, etc, etc. It just works.

You want to create a smaller dev VM for holiday travel? Take it on USB, use Mom’s PC with VMWare Player and give your VM 1 GB of RAM. You just need enough to get by on. No laptop needed, just bring up your USB. You get the idea.. you can do pretty much anything you’d like.

If a salesperson came up to you and said “I have a way for you to configure multiple environments, multiple computers, setups, and have ways to revert back to things you did while configuring, and take backups of everything easily, etc, etc” How much would you pay? $1k? $5k? More?

How about roughly $200, for VMWare Workstation (if you already have Technet/MSDN – which you would have already). I’m sold.

If you really want to get complicated, you can set up VM Farms, and run VMWare Servers, and have multiple VM’s going and easily accessible. But using VMWorkstation to start is good enough, and good enough is fine :)