Microsoft, Which I Hate and Which I Love

Ok, I’ll admit, I got issues with some of the past Microsoft ethical breaches of business dealings. Sure, but who doesn’t? Their technology that they develop ranges from complete crap (re: Bob, paperclip, sealed classes, The 1st X version of Entity Framework) all the way to the completely awesome amazing stuff, like the Node.js SDK & work with Windows Azure for Node.js, Visual Studio can be amazing sometimes too, and there are other things that are really solid pieces of software.

So here’s my happy list and shit list of Microsoft Software:

Happy List

  • Visual Studio – When it works, after it takes 20 seconds to launch and you finally get the bloody project open, it’s a great IDE.
  • Live Writer – For blogging, nothing holds a candle to this product. It is spectacular, I wish it ran on OS-X because then I’d still use it. Even with all its greatness, it’s not enough of a motivating factor to use Windows as my core native OS.
  • Web API – This should have been attempt #1. Instead of the catastrophic mistake they made in WCF. (see below for WCF comments)
  • C# – C# is actually a great language and I find that it is very similar, but in many ways knocks the socks off of Java. Especially in ease of use for a number of things. Which of course is in conjunction with Visual Studio, etc.
  • Sketchflow – This is a great post paper prototyping software package. I don’t know many that use it, but for creating a working prototype or mock up, this software is great.
  • Windows Phone 7 – This is actually not a bad OS for a phone. It is a drastic improvement over all the previous MS phone operating systems.
  • Metro – I actually like Metro. It is simple, I feel like I’m 5 years old when I use it and I think in the same vein of what Apple has perfected, it’s just enough for the average computer user to make the tablet leap. It could be truly big.
  • XBox – Nuff’ said. Xbox kicks ass on massive scale!  🙂
  • Windows Azure – Primarily around the node.js space. They’ve done a stellar job and have an absolutely amazing product there.
  • MSDN – This is one of the best developer spaces around. MS devs often complain about it, but really the alternatives are weak and few between.
  • ASP.NET MVC – Rails envy brought to focus in a good, solid, organized and nicely put together product.

Angry List

  • Vista – Nuff’ said.
  • Win ME – Nuff’ said.
  • Most of Windows – Nuff’ said.
  • Stability, speed, launching, and related software issues that Visual Studio, Windows, and almost every Microsoft package has compared to the responsiveness of OS-X and general *nix operating systems.
  • Metro on Windows 8 – As a power user, I already hate Metro. Microsoft is about 6 years behind in the phone and tablet wars and it shows. As a power user I’ll admit, iOS isn’t much better or worse, but the thing is it is relegated to the iPad and iPhone (iPod). Windows 8 is going to be on everything. On a tablet I don’t want a flaky desktop tainting my experience and when I’m trying to do development on a desktop I don’t want a wierdo start button replacement screen buggering up my desktop work. Generally, so far, I’m not really happy with it or seeing how it is going to speed up any of my work or help me be more productive except in surfing Facebook or Tweeting. Somehow, that doesn’t seem all that important.
  • Windows Azure – For infrastructure, and almost everything else besides node.js stuff, it’s still a catastrophic mess. It looks absolutely great, but I would still struggle to suggest someone use it for all but node.js deployment. No offense, it’s just not in a space yet that works for most of the companies I work for. It might get there, but at this point I still find a lot of frustrating points.
  • Biztalk – Nuff’ said. It’s absurd anyone pays for this.
  • Sharepoint – I get the usage, I still hate the package. There are vastly superior alternatives out there.
  • WCF, Entity Framework and every other piece of software Microsoft made almost impossible to write unit tests for. All while throwing up a middle finger and screwing over their actual developer community. Many of these offerings did not have good results in the end. Hopefully developers are able to generally ignore the versions that were horrible and just use things like code first EF or Web API now instead of the previous years version of WCF & EF.
  • Windows Server – I’m not sure this server even now, understand how to interact with the Internet, HTTP, TCP/IP or a number of other Internet related elements well. It does it, but at the core there are a lot of problems still.
  • Hyper-V – Not sure I should even get started. Microsoft ignores it for years, then builds a cloud on top of it and pretends it is Enterprise ready. Knowing full well that it is probably the worst virtualization solution on the market today. Machine management is bad, launch time is bad, setting up images is ridiculous and the list of problems only grows. Anyone using this product is extending 2-5x more resources than using a comparable OSS or VMware virtualization product.

Software I’m indifferent about…  i.e. software that is ‘aight’ and I could go either way on.

  • SQL Server

There isn’t that much I’m apathetic about. I’m usually either stoked by their product or horrified about it. Any other key software I’ve missed? How do you feel about this list of software? Got a happy list or shit list of your own? Post a blog entry on it and I’ll add a link back on my entry to yours – just leave a comment (or link back of your own).

UPDATED:  Here’s another entry of some MAJOR issues that found in Windows 8. They’re some pretty dangerous gotchas!

Office Applications, Cloud Office Applications: An Open Letter

Alright, there are a dozen office suites out there that sit in various places on one’s computer, in the cloud, can do X, Y, and Z and the list goes on. However, I don’t want to talk about any of those suites. I want to talk about the suite we all want, the suite that actually gets the jobs done across the spectrum of online, offline, or on Mars! So with that I start an open letter to…

Dear Microsoft, Google, and All Office Suite Makers,

Please accept this letter as a clear message about what we want. This details not some fuzzy idea about what we want, it is what we want, need, and desire to remove the legacy environments of today and to move on with the work of the future.

Installation

We need office apps that can execute from the browser, because simply, there is no reason they need to be an installed application anymore. It is absolutely absurd to install a gigabyte or more locally (MS Office, yeah, I’m looking at you) anymore! There should be zero install. If anything is needed, it should be cached and utilize a transparent, seamless, uninterrupted user experience. In other words, I should never need to install anything and be able to use things offline whenever I need to (now I’m looking at you Google Docs).

Deployment

For large enterprises that need to keep control of their environments and content, deployment should be clean, policy based, and managed through a single sign on mechanism like oauth. Possibly with some clean integration into LDAP or whatever other primary authentication mechanisms a company may user. I reiterate though, no software to install, it needs to run in the browser, and it must deploy cleanly through policy management and verification of user identification.

Ease of Use, UX, and UI

This is simple. You each have unique user interfaces that can be replicated I the browser with today’s technology. Do NOT use Silverlight, Flash, or some embedded proprietary software, use the web based technology of HTML5, Javascript, jQuery, etc the tools are available and ready for use, use them!

Online, Offline

Already there are offline features for installed packages, but that isn’t what we want. HTML5 enables offline capabilities NOW. Get them built please, already. Cheers! As for online capabilities, this is easy because they pretty much exist now.

Collaboration

If I can’t update a document, spreadsheet, slide deck, or other office suite application document in real time with other users that I’m collaborating with it has failed. All office applications must have real-time, collaboration capabilities, with chat built in, sharing, and other capabilities. End of story, this is as fundamental now as being able to type stings of characters in a document.

Welcome to the demands of the future, I’ll leave you to get back to work office suite teams!

Thanks,

Future Document Creators

Why Clean Code Seriously Matters!

The first example is some working code, that determines if a date value is a weekend day and returns true or false based on that.

[sourcecode language=”csharp”]
bool firstSecondNulls = false;
var dayOfWeek = (DateTime) zeros.ElementAtOrDefault(i).BalanceDate;
if (dayOfWeek.DayOfWeek == DayOfWeek.Sunday || dayOfWeek.DayOfWeek == DayOfWeek.Saturday)
firstSecondNulls = true;
return firstSecondNulls;
[/sourcecode]

This second example also provides the same result, except in a more readable, cleaner, and more efficient way. Matter of fact, I’d say in some circumstances it is exponentially more efficient! Do you see why?

[sourcecode language=”csharp”]
var dayOfWeek = (DateTime) zeros.ElementAtOrDefault(i).BalanceDate;
return dayOfWeek.DayOfWeek == DayOfWeek.Sunday || dayOfWeek.DayOfWeek == DayOfWeek.Saturday;
[/sourcecode]

This is an insanely simple example. But just imagine some of the nightmarish methods and functions, with hundreds of lines of code. Keep in mind, that those nightmares are minimal compared to the Enterprise Scale 1000+ plus line methods! Yes, those exist and they are beyond nightmares but holocausts of thought and design!

So the next time you think “meh, I’ll refactor it later.” just take that extra minute or two and do it now! The pay off, you know full well when you think about it, is massive in the end. Cheers!

Following Good Practice, The Negative Bits About Windows Azure First, But Gems Included! :D

Ok, I’ve used Windows Azure steadily over the last year and a half.  I’ve fought with the SDK so much that I stopped using it. I decided I’d put together this recap of what has driven me crazy and then put together something about the parts that I really like, the awesome bits, the parts that have the greatest potential with Windows Azure. So hold on to your hats, this may be hard hitting.  😉

First the bad parts.

The Windows Azure SDK

Ok, the SDK has driven me nuts. It has had flat out errors, sealed (bad) code, and is TIGHTLY COUPLED to the development fabric. I’m a professional, I can mock that, I don’t need kindergarten level help running this! If I have a large environment with thousands of prospective nodes (or even just a few dozen instances) the development fabric does nothing to help. I’d rate the SDK’s closed (re: sealed/no interfaces) nature and the development fabric as the number 1 reasons that Windows Azure is the hardest platform to develop for at large scale in Enterprise Environments.

Pricing Competitiveness? Ouch. 🙁

Windows Azure is by far the most expensive cloud platform or infrastructure to use on the market today. AWS comes in, when priced specifically anywhere from 2/3rds the price to 1/6th the price. Rackspace in some circumstances comes in at the crazy low price of 1/8th as much as Windows Azure for similar capabilities. I realize there are certain things that Windows Azure may provide, but my not, and that in some rare circumstances Azure may come in lower – but that is rare. If Windows Azure wants to stay primarily, and only, an Enterprise Offering than this is fine. Nailing Enterprises on expensive things and offering them these SLA myths is exactly what Enterprises want, piece of mind of an SLA, they don’t care about pricing.

But if Windows Azure wants to play in new business, startups especially, mid-size business, or even small enterprises than the pricing needs a fix.  We’re looking at disparities $500 bucks vs. $3500 bucks in other situations. This isn’t exactly feasible as a way to get into cloud computing. Microsoft, unfortunately for them, has to drop this dream of maintaining revenues and profits at the same rate as their OS & Office Sales. Fact is, the market has already turned this sector into a commoditized price.

Speed, Boot Time, Restart, UI Admin Responsiveness

The Silverlight Interface is beautiful, I’ll give it that. But in most browsers aside from IE it gets flaky. Oh wait, no, I’m wrong. It gets flaky in all the browsers. Doh! This may be fixed now, but in my experience and others that I’ve paired with, we’ve watched in Chrome, Opera, Safari, Firefox, and IE when things have happened. This includes the instance spinning as if starting up when it is started, or when it spins and spins, a refresh is done and the instance has completely disappeared!  I’ve refreshed the Silverlight UI before and it just stops responding to communication before (and this wasn’t even on my machine).

The boot time for an instance is absolutely unacceptable for the Internet, for web development, or otherwise. Boot time should be similar to a solid Linux instance. I don’t care what needs to be done, but the instances need cleaned up, the architecture changed, or the OS swapped out if need be. I don’t care what OS the cloud is running on, but my instance should be live for me within 1-2 minutes or LESS. The current performance of Rackspace, Joyent, AWS, and about every single cloud provider out there boots an instance in about 45 seconds, sometimes a minute, but often less. I know there are workarounds, the whole leave it running while you deploy methods, and other such notions, but those don’t always work out. Sometimes you just need the instance up and running and you need it NOW!

Speed needs measurement to prove out in tests. Speed needs to be observed. I need analytics on my speed of the instance I’m choosing. I don’t know if it is pegged, I don’t know if it is idle and not responding. I have no idea in Windows Azure with any easy way. The speed, in general, seems to be really good on Windows Azure. Often times it appears to be better than others even, but rarely can I really prove it. It’s just a gut feeling that it is moving along well.

So, those are the negatives; speed, boot time, admin UI responsiveness, pricing, and the SDK. Now it is time for the wicked awesome cool bits!

Now, The Cool Parts

Lock In With Mort

This topic you’d have to ask me about in person, many people would be offended by this and I mean no offense by it. The reality is many companies will continue to get and hire what they consider to be plug and play replaceable developers – AKA “mort”. This is really bad for developers, but great for Windows Azure. In addition Windows Azure provides an option to lock in. It is by no means the only option – because by nature a cloud platform and services will only lock you in if YOU allow yourself to be. But providing both ways, lock in or not, is a major boost for Windows Azure also. Hopefully, I’ll have a presentation in regards to this in the near future – or at least find a way to write it up so that it doesn’t come off as me being a mean person, because I honestly don’t intend that.

Deploy Anything, To The Platform

Have a platform to work with instead of starting purely at infrastructure is HUGE for most companies. Not all, but most companies would be benefited in a massive way to write to the Azure Platform instead of single instances like EC2. The reason boils down to this, Windows Azure abstracts out most of the networking, ops, and other management that a company has to do. Most companies have either zero, or very weak ops and admin capabilities. This fact in many companies will actually bring the (I hate saying this) TCO, or Total Cost of Ownership, down for companies building to the Windows Azure Platform vs. the others. Because really, the real cost in all of this is the human cost, not the services as they’re commodotized. Again though, this is for small non-web related businesses – as web companies need to have ops, capabilities, their people absolutely must understand and know how the underpinnings work. If routing, multi-tenancy, networking and other capabilities are to be used to their fullest extent, infrastructure needs to be abstracted but the infrastructure needs to be accessible. Windows Azure does a good deal of infrastructure, and it looks like there will be more available in the future. This will be when the platform actually becomes much more valuable for the web side of the world that demands control, network access, SEO, routing, multi-tenancy, and other options like this.

With the newer generation of developers and others coming out of colleges there is a great idea here and a very bad one. Many new generation developers, if they want web, are jumping right into Ruby on Rails. Microsoft isn’t even a blip on their radar, however there still manage to be thousands that give Microsoft .NET a look, and for them Windows Azure provides a lot of options, including Ruby on Rails, PHP, and more. Soon there will even be some honest to goodness node.js support. I even suspect that the node.js support will probably be some of the fastest performing node.js implementations around. At least, the potential is there for sure. This later group of individuals coming into the industry these days are who will drive the Windows Azure Platform to achieve what it can.

.NET, PHP, and Ruby on Rails Ecosystem (Note, I don’t support of the theft of this word, but I’ll jump on the “ecosystem” bandwagon, reluctantly)

Besides the simple idea that you can deploy any of these to an “instance” in other environments, Windows Azure (almost) makes every one of these a first class platform citizen.  Drop the SDK in my advice, my STRONG advice, and go the RESTful services usage route. Once you do that you aren’t locked in, you can abstract for Windows Azure or any cloud, and you can utilize any of these framework stacks. This, technically, is HUGE to have these available at a platform level. AWS doesn’t offer that, Rackspace doesn’t even dream of it yet, OpenStack doesn’t enable it, and the list goes on. Windows Azure, that’s your option in this category.

The Other MASSIVE Coolness is not Core Windows Azure Features, but They Provide a HUGE Plus for Windows Azure

The add ons to SQL Server are HUGE for enterprises with BI Reporting, SQL Server Reporting, etc. These features are a no brainer for an enterprise. Yes, they provide immediate lock in. Yes, it doesn’t really matter for an enterprise. But here’s the saving grace for this lock in. With the Service Bus and Access Control you can use single sign on to use this and OTHER CLOUD SERVICES in a very secure and safe nature with your development. These two features alone, whether you use other Windows Azure Features or not, are worth using. Even with AWS, Rackspace, or one of the others. The Service Bus and Access Control actually add a lot of capabilities to any type of cloud architecture that comes in useful for enterprise environments, and is practically a requirement for on-premise and in cloud mixed environments (which it seems, almost all environments are).

Other major pluses that I like with Windows Azure includ:

  • Azure Marketplace – Over time, and if marketed well, this could become a huge asset to companies big and small.
  • SQL Azure – SQL Azure is actually a pretty solid database offering for enterprises. Since a lot of Enterprises have already locked themselves into SQL Server, this is a great offering for those companies. However I’m mixed on its usage vs. lower priced mySQL usage, or others for that matter. It definitely adds to the overall Windows Azure Capabilities though, and as time moves forward and other features (such as SSIS, etc) are added to Azure this will become an even greater differentiation.
  • Caching – Well, caching is just awesome isn’t it? I dig me some caching.  This offering is great. It isn’t memCached or some of the others, but it is still a great offering, and again, one of those things that adds to the overall Windows Azure capabilities list. I look forward to Microsoft adding more and more capabilities to this feature.  🙂
Summary
Windows Azure has grown and matured a lot over the time since its release from beta. It still however has some major negatives compared to more mature offerings. However, there is light at the end of the tunnel for those choosing the Windows Azure route, or those that are getting put into the Windows Azure route. Some of those things may even help leap ahead of some of the competition at some point. Microsoft is hard core in this game and they’re not letting down. If anyone has failed to notice, they still have one of the largest “war chests” on Earth to play in new games like this – even when they were initially ill prepared. I do see myself using Windows Azure in the future, maybe not extensively, but it’ll be there. And win a large share of the market or not, Microsoft putting this much money into the industry will push all ships forward in some way or another!

Resumes Are Worthless

Ok, so a question came up recently about hiring people for software development roles. In answering that, the group discussing this started talking about resumes. Resumes, which I’m told mine looks good and reads well, hold a certain value to someone entering the field of software development. There are also major problems with having a resume as your primary form of communication to prospective employers.

Resumes provide a horrible medium for communicating your real value to a company.

Sometimes a resume can tell someone that you can build a resume well or not. Sometimes a resume can tell someone that you think you know the technologies you have listed on your resume. Sometimes they can tell a prospective employer that you’ve been working in the field for X number of years. But what the resume really tells people is a list of nonsense:

  • A resume tells a prospective employer that you’ve worked for X years but doesn’t mean you’ve gained X years of experience.
  • A resume tells a prospective employer that you’ve written words on a page, following a loosely selective group of ideas and practices around resume writing.
  • A resume tells a prospective employer that you have or can find a list of keywords associated with a particular job position.
  • A resume does not tell a prospective employer that you actually know these technologies the keywords are associated with.
  • A resume does not tell a prospective employer that you know how to structure sentences, clear thoughts, or actually communicate effectively in a group.
  • A resume does not tell a prospective employer anything about your learning technique, how you develop or work in a group, or other pivotal soft and hard skills required for the position.
Summary:  Resumes are often a lie or misleading.

Some other issues with resumes. These are just simple things that I’ve found, and many others in similar positions as I, are practically truisms.

Looking only at resumes takes the top 5% of developers off market for you. Many, if not most of the best communicators, coders, and well rounded individuals that you want on your team will not submit a resume first. They’ll have to know you, gotten positive word of mouth, or otherwise been informed of your hiring and company. If your company uses resumes as a first step, you immediately are removing the top tier 5% of people. This isn’t just me seeing this, take for instance observations from people who have hired many more people than me such as Joel Spolsky (who does actually use resumes, but realizes they’re practically useless) or Jason Fried and David Heinemeier Hansson.

By stating this, I’m not saying to totally disregard resumes. Albeit that would be nice, but simply saying that resumes should be regarded with absolutely minimal validity. For the most part, resumes are not very valuable and if you can remove them from your hiring process your group or company will be much better off for it.

Good luck hiring out there! 🙂