Tuesday, December 03, 2013

So Google now has an infrastructure as a service (IaaS) offering to compete with Amazon and Microsoft Azure.

http://news.cnet.com/8301-1023_3-57614304-93/google-compute-engine-now-ready-for-prime-time/?part=rss&subj=news&tag=title

From my perspective as a developer this is a big yawn.

IaaS is an IT pro thing – a way of shifting costs from an internal data center (usually capital cost) to an external provider (usually a cash cost). Mostly it is a bunch of accounting details that ultimately result in the same sorts of servers running in a different physical location.

As a developer you don’t really change the way you code just because a server is running onsite, or in a co-location, or in a “cloud”. So who really cares?

IT managers and CFOs care. And really IaaS is fine for an IT manager because they still need pretty much the same size staff to run their servers regardless of where they exist physically. Somebody needs to do server admin, OS upgrades/patches, etc.

Now platform as a service (PaaS) like you can get with Windows Azure is FAR more interesting to a developer, but incredibly threatening to IT managers and IT pros.

Azure’s PaaS offering gives developers a higher level of abstraction. Instead of dealing with the OS we get to deal with versions of ASP.NET, and the underlying OS is automatically upgraded/patched (within limits you set).

PaaS radically reduces the number of IT staff required to manage and run the “servers” because almost all the work is handled by Azure itself. This can be a massive cost savings to a company due to staff reduction, but you can probably see why IT managers tend to look more at IaaS than PaaS – their “empire” would be in jeopardy by embracing PaaS…

But as a developer, I’d much rather embrace PaaS. IaaS gets me nothing, but PaaS helps me get new compute power provisioned in minutes instead of weeks/months. And it helps minimize the chances that some IT pro will change a low-level configuration on the server, thus breaking my app.

I understand why Google (and Amazon and Microsoft) chase the IaaS market – because there’s money to be had there.

But as a developer who dislikes IT cost accounting and cares little for the size of the IT staff necessary to admin tons of servers, I’d much, much, much rather build my software to run on Azure using the PaaS model.

Tuesday, December 03, 2013 11:38:53 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [2]  | 
 Sunday, December 01, 2013

This recent article is interesting:

http://www.neowin.net/news/windows-xp-remains-nearly-flat-windows-881-up-slightly-in-novembers-os-data

Of course it is talking about the “now dead” traditional computing market. You know, the market that totally dominates the business desktop/laptop world, as well as (still) most home computing.

Although tablets and phones have enjoyed massive growth over the past few years, the reality is that they have done little to actually replace traditional computing in many ways.

Of course as soon as anyone makes statements or draws conclusions about anything to do with market share numbers between OSes and/or mobile devices the conversation instantly devolves into meaningless drivel. I think the reason these conversations are almost always fruitless is that there's a lack of definition around terms and the nature of the conversation.

I want to be clear that this entire blog post is about smart client development. If you are already building all your business software as web sites then you don’t really care much right? The client device is merely a colorful terminal for your server-side computing, and for the most part it doesn’t matter what OS or brand device is being used as long as it has a modern browser to act as that terminal.

But from a smart client perspective the client device and OS matters a lot!

The primary focus in my career, and at Magenic is business app dev, and tablets have done little to replace traditional computers in the workplace thus far. They augment, but they don't replace. Hence the workplace computing space is still roughly 91% Windows.

People have tablets at home, and for a lot of home scenarios they are replacing traditional computers. And tablets are used in some limited business scenarios, mostly where employee’s jobs are made more efficient if they have computing while away from their desks. This is what we currently refer to today as "mobile" for the most part. This segment might be transitioning to tablets in a way that eats into computer sales, but even that isn't entirely clear. Anyone who brings a lot of work home almost certainly still has a home computer in addition to their tablet, and I still see a lot of “mobile workers” carrying around laptops or ultrabooks.

And then there's the pure consumer market, which is essentially entirely mobile, or will be soon. People who don't bring work home with them have little or no need for a computer other than to run iTunes. If Apple had iTunes for the iPad itself I suspect a massive number of people wouldn't need a PC or Mac – as long as they don’t bring work home with them (or if their work doesn’t require data entry or manipulation).

For my part I’ve spent my career in the business space, not the consumer space. And I don’t see myself getting rich building inventory management apps that sell for $0.99 per user. Instead I create inventory management systems for companies that pay hundreds of thousands or millions of dollars for such software. Then those companies expect that software to run for 7-10 years so they can recover their investment. This is almost entirely unlike the consumer app space.

What makes this interesting is that there's a broad assumption in the world at large that the PC as we know it is done for - that it will be replaced by "something else". This is bolstered by Microsoft's own moves that effectively deprecate the "desktop" in favor of a different approach.

That said, I am 110% certain that 20 years from now there'll still be "desktop" (Win32, .NET, etc.) apps - and people will use them from a terminal emulator (probably RDP into Citrix) via their then-current device and OS. Exactly like so many old mainframe/minicomputer apps are used today via 3270 or VT terminal emulators via Windows.

But I personally don't want to be a maintenance developer on one of those soon-to-be-ancient apps, and so to me the 60 bajillion dollar question is what (if anything) will eat into the 91% business OS market share currently dominated by Windows. It might be one of these options:

  1. Windows (presumably in the form of WinRT, assuming Microsoft fixes their flawed business app side loading cost model)
  2. "JavaScript"/TypeScript/etc. (assuming an offline deployment model for apps, including some js version of Excel that'd work offline)
  3. Android (again, assuming Android continues to expand into bigger and multiple monitors, and Office eventually gets spun off into a business so Excel works on Android)
  4. iOS (assuming iOS expands to handle multiple 30" monitors and Microsoft spins off Office so they fully support iOS with Excel)
  5. Windows Desktop (perhaps everything we're going through right now is a fad - a fluke - and "real work" will be done on Windows long into the future)

Personally I assume that what we think of as "mobile" today will disappear as it merges into the business "desktop" of the future, leaving us with the same old business vs consumer spaces.

And as a business developer I won't care any more about the consumer space in the future than I have in the past. Which is to say not at all, beyond being a user of consumer apps myself (I do enjoy email, calendar, Instagram, Facebook, etc.).

But I will care about "mobile" because it will (imo) become the future business platform. Something will end up eating into and ultimately replacing today’s 91% Windows business desktop market.

I still think WinRT has a shot at this. A good shot actually given that the networking and security infrastructure to support Windows is already dominant, so the easiest thing for most businesses would be to slowly shift to WinRT. Again, presupposing Microsoft wakes up and fixes their ridiculous business app side loading model.

I also think JavaScript (TypeScript, Angular, Knockout, etc.) has a good shot, especially if Chrome continues to mature its offline deployment story and Microsoft continues to create an artificial barrier to WinRT adoption by charging a "deployment tax" for WinRT business apps. I could totally see most business apps being built to assume Chrome on the client, because Chrome runs on every type of device/OS people are likely to have.

I am dubious that Android has a shot, but I don't discount it. Today you can buy 24" Android "desktops", so some Android vendors are certainly trying to adapt the devices, OS, and its ecosystem to the business world.

I am even more dubious about iOS, because I have yet to see Apple making any moves necessary to become a business/enterprise player at a device or OS level.

And I didn't mention OS X or Linux here because they've had nearly 20 years to become players and have yet to get more than 5% of the total market, so why would we think the future would be different? Though I must admit that Ubuntu and Mint are very usable user-focused Linux implementations, and if they’d have existed 15-20 years ago Windows would have been in trouble.

As a result I’m personally continuing to invest in C# and XAML in the hopes that Microsoft makes WinRT a viable smart client platform. And I’m investing in TypeScript, JavaScript, and various related frameworks because I think that platform is probably the next most likely to become the smart client business platform of the future.

Sunday, December 01, 2013 9:16:15 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [4]  | 
 Monday, October 07, 2013

The short answer to the question of whether the Microsoft .NET Framework (and its related tools and technologies) has a future is of course, don’t be silly.

The reality is that successful technologies take years, usually decades, perhaps longer, to fade away. Most people would be shocked at how much of the world runs on RPG, COBOL, FORTRAN, C, and C++ – all languages that became obsolete decades ago. Software written in these languages runs on mainframes and minicomputers (also obsolete decades ago) as well as more modern hardware in some cases. Of course in reality mainframes and minicomputers are still manufactured, so perhaps they aren’t technically “obsolete” except in our minds.

It is reasonable to assume that .NET (and Java) along with their primary platforms (Windows and Unix/Linux) will follow those older languages into the misty twilight of time. And that such a thing will take years, most likely decades, perhaps longer, to occur.

I think it is critical to understand that point, because if you’ve built and bet your career on .NET or Java it is good to know that nothing is really forcing you to give them up. Although your chosen technology is already losing (or has lost) its trendiness, and will eventually become extremely obscure, it is a pretty safe bet that you’ll always have work. Even better, odds are good that your skills will become sharply more valuable over time as knowledgeable .NET/Java resources become more rare.

Alternately you may choose some trendier alternative; the only seemingly viable candidate being JavaScript or its spawn such as CoffeeScript or TypeScript.

How will this fading of .NET/Java technology relevance occur?

To answer I’ll subdivide the software world into two parts: client devices and servers.

Client Devices

On client devices (PCs, laptops, ultrabooks, tablets, phones, etc.) I feel the need to further split into two parts: consumer apps and business apps. Yes, I know that people seem to think there’s no difference, but as I’ve said before, I think there’s an important economic distinction between the consumer and business apps.

Consumer Apps

Consumer apps are driven by a set of economic factors that make it well worth the investment to build native apps for every platform. In this environment Objective C, Java, and .NET (along with C++) all have a bright future.

Perhaps JavaScript will become a contender here, but that presupposes Apple, Google, and Microsoft work to make that possible by undermining their existing proprietary development tooling. There are some strong economic reasons why none of them would want every app on the planet to run equally on every vendor’s device, so this seems unlikely. That said, for reasons I can’t fathom, Microsoft is doing their best to make sure JavaScript really does work well on Windows 8, so perhaps Apple will follow suit and encourage their developers to abandon Objective C in favor of cross-platform JavaScript?

Google already loves the idea of JavaScript and would clearly prefer if we all just wrote every app in JavaScript for Chrome on Android, iOS, and Windows. The only question in my mind is how they will work advertising into all of our Chrome apps in the future?

My interest doesn’t really lie in the consumer app space, as I think relatively few people are going to get rich building casual games, fart apps, metro transit mapping apps, and so forth. From a commercial perspective there is some money to be made building apps for corporations, such as banking apps, brochure-ware apps, travel apps, etc. But even that is a niche market compared to the business app space.

Business Apps

Business apps (apps for use by a business’s employees) are driven by an important economic factor called a natural monopoly. Businesses want software that is built and maintained as cheaply as possible. Rewriting the same app several times to get a “native experience” on numerous operating systems has never been viable, and I can’t see where IT budgets will be expanding to enable such waste in the near future. In other words, businesses are almost certain to continue to build business apps in a single language for a single client platform. For a couple decades this has been Windows, with only a small number of language/tool combinations considered viable (VB, PowerBuilder, .NET).

But today businesses are confronted with pressure to write apps that work on the iPad as well as Windows (and outside the US on Android). The only two options available are to write the app 3+ times or to find some cross-platform technology, such as JavaScript.

The natural monopoly concept creates some tension here.

A business might insist on supporting just one platform, probably Windows. A couple years ago I thought Microsoft’s Windows 8 strategy was to make it realistic for businesses to choose Windows and .NET as this single platform. Sadly they’ve created a side loading cost model that basically blocks WinRT business app deployment, making Windows far less interesting in terms of being the single platform. The only thing Windows has going for it is Microsoft’s legacy monopoly, which will carry them for years, but (barring business-friendly changes to WinRT licensing) is doomed to erode.

You can probably tell I think Microsoft has royally screwed themselves over with their current Windows 8 business app “strategy”. I’ve been one of the loudest and most consistent voices on this issue for the past couple years, but Microsoft appears oblivious to the problem and has shown no signs of even recognizing the problem much less looking at solutions. I’ve come to the conclusion that they expect .NET on the client to fade away, and for Windows to compete as just one of several platforms that can run JavaScript apps. In other words I’ve come to the conclusion that Microsoft is willingly giving up on any sort of technology lock-in or differentiation of the Windows client in terms of business app development. They want us to write cross-platform JavaScript apps, and they simply hope that businesses and end users will choose Windows for other reasons than because the apps only run on Windows.

Perhaps a business would settle on iOS or Android as the “one client platform”, but that poses serious challenges given that virtually all businesses have massive legacies of Windows apps. The only realistic way to switch clients to iOS or Android is to run all those Windows apps on Citrix servers (or equivalent), and to ensure that the client devices have keyboards and mice so users can actually interact with the legacy Windows apps for the next several years/decades. Android probably has a leg up here because most Android devices have USB ports for keyboards/mice, but really neither iOS nor Android have the peripheral or multi-monitor support necessary to truly replace legacy Windows (Win32/.NET).

This leaves us with the idea that businesses won’t choose one platform in the traditional sense, but rather will choose a more abstract runtime: namely JavaScript running in a browser DOM (real or simulated). Today this is pretty hard because of differences between browsers and between browsers on different platforms. JavaScript libraries such as jquery, angular, and many others seek to abstract away those differences, but there’s no doubt that building a JavaScript client app costs more today than building the same app in .NET or some other more mature/consistent technology.

At the same time, only JavaScript really offers any hope of building a client app codebase that can run on iOS, Android, and Windows tablets, ultrabooks. laptops, and PCs. So though it may be more expensive than just writing a .NET app for Windows, JavaScript might be cheaper than rewriting the app 3+ times for iOS, Android, and Windows. And there’s always hope that JavaScript (or its offspring like CoffeScript or TypeScript) will rapidly mature enough to make this “platform” more cost-effective.

I look at JavaScript today much like Visual Basic 3 in the early 1990s (or C in the late 1980s). It is typeless and primitive compared to modern C#/VB or Java. To overcome this it relies on tons of external components (VB had its component model, JavaScript has myriad open source libraries). These third party components change rapidly and with little or no cross-coordination, meaning that you are lucky if you have a stable development target for a few weeks (as opposed to .NET or Java where you could have a stable target for months or years). As a result a lot of the development practices we’ve learned and mastered over the past 20 years are no longer relevant, and new practices must be devised, refined, and taught.

Also we must recognize that JavaScript apps never go into a pure maintenance mode. Browsers and underlying operating systems, along with the numerous open source libraries you must use, are constantly versioning and changing, so you can never stop updating your app codebase to accommodate this changing landscape. If you do stop, you’ll end up where so many businesses are today: trapped on IE6 and Windows XP because nothing they wrote for IE6 can run on any modern browser. We know that is a doomed strategy, so we therefore know that JavaScript apps will require continual rewrites to keep them functional over time.

What I’m getting at here is that businesses have an extremely ugly choice on the client:

  1. Rewrite and maintain every app 3+ times to be native on Windows, iOS, and Android
  2. Absorb the up-front and ongoing cost of building and maintaining apps in cross-platform JavaScript
  3. Select one platform (almost certainly Windows) on which to write all client apps, and require users to use that platform

I think I’ve listed those in order from most to least expensive, though numbers 1 and 2 could be reversed in some cases. I think in all cases it is far cheaper for businesses to do what Delta recently did and just issue Windows devices to their employees, thus allowing them to write, maintain, and support apps on a single, predictable platform.

The thing is that businesses are run by humans, and humans are often highly irrational. People are foolishly enamored of BYOD (bring your own device), which might feel good, but is ultimately expensive and highly problematic. And executives are often the drivers for alternate platforms because they like their cool new gadgets; oblivious to the reality that supporting their latest tech fad (iPad, Android, whatever) might cost the business many thousands (often easily 100’s of thousands) of dollars each year in software development, maintenance, and support costs.

Of course I work for a software development consulting company. Like all such companies we effectively charge by the hour. So from my perspective I’d really prefer if everyone did decide to write all their apps 3+ times, or write them in cross-platform JavaScript. That’s just more work for us, even if objectively it is pretty damn stupid from the perspective of our customers’ software budgets.

Server Software

Servers are a bit simpler than client devices.

The primary technologies used today on servers are .NET and Java. Though as I pointed out at the start of this post, you shouldn’t discount the amount of COBOL, RPG, FORTRAN, and other legacy languages/tools/platforms that make our world function.

Although JavaScript has a nescient presence on the server via tools like node.js, I don’t think any responsible business decision maker is looking at moving away from existing server platform tools in the foreseeable future.

In other words the current 60/40 split (or 50/50, depending on whose numbers you believe) between .NET and Java on the server isn’t likely to change any time soon.

Personally I am loath to give up the idea of a common technology platform between client and server – something provided by VB in the 1990s and .NET over the past 13 years. So if we really do end up writing all our client software in JavaScript I’ll be a strong advocate for things like node.js on the server.

In the mid-1990s it was pretty common to write “middle tier” software in C++ and “client tier” software in PowerBuilder or VB. Having observed such projects and the attendant complexity of having a middle tier dev team who theoretically coordinated with the client dev team, I can say that this isn’t a desirable model. I can’t support the idea of a middle tier in .NET and a client tier in JavaScript, because I can’t see how team dynamics and inter-personal communication capabilities have changed enough (or at all) over the past 15 years such that we should expect any better outcome now than we got back then.

So from a server software perspective I think .NET and Java have a perfectly fine future, because the server-side JavaScript concept is even less mature than client-side JavaScript.

At the same time, I really hope that (if we move to JavaScript on the client) JavaScript matures rapidly on both client and server, eliminating the need for .NET/Java on the server as well as the client.

Conclusion

In the early 1990s I was a VB expert. In fact, I was one of the world’s leading VB champions through the 1990s. So if we are going to select JavaScript as the “one technology to rule them all” I guess I’m OK with going back to something like that world.

I’m not totally OK with it, because I rather enjoy modern C#/VB and .NET. And yes, I could easily ride out the rest of my career on .NET, there’s no doubt in my mind. But I have never in my career been a legacy platform developer, and I can’t imagine working in a stagnant and increasingly irrelevant technology, so I doubt I’ll make that choice – stable though it might be.

Fwiw, I do still think Microsoft has a chance to make Windows 8, WinRT, and .NET a viable business app development target into the future. But their time is running out, and as I said earlier they seem oblivious to the danger (or are perhaps embracing the loss of Windows as the primary app dev target on the client). I would like to see Microsoft wake up and get a clue, resulting in WinRT and .NET being a viable future for business app dev.

Failing that however, we all need to start putting increasing pressure on vendors (commercial and open source) to mature JavaScript, its related libraries and tools, and its offspring such as TypeScript – on both client and server. The status of JavaScript today is too primitive to replace .NET/Java, and if we’re to go down this road a lot of money and effort needs to be expended rapidly to create a stable, predictable, and productive enterprise-level JavaScript app dev platform.

Monday, October 07, 2013 9:24:20 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [39]  | 

In late July I had a major health event that I was fortunate to survive.

I was well on my way to full recovery from that event when I had another major event: my descending aorta dissected. This means that the interior of the artery tore away from the outer wall, basically splitting the aorta in half. Fortunately this didn’t tear the outer wall, so all the blood generally continues to go where it should.

The doctors tell me that this isn’t as acute as my original event, but I can tell you it was way more painful. In any case I was in intensive care for about a week while this stabilized, and have been recovering further at home – basically on bed rest.

To add insult to injury, this has caused a temporary issue with my vision too, so everything to my right-hand side is doubled. Very disconcerting, but the doctors think it will resolve itself over a period of weeks.

So if you’ve been wondering why I’ve been relatively quiet over the past month, it is because I’ve been recovering from this second major health issue, plus the vision problem that made it nearly impossible to read for several days (though that’s somewhat better now thankfully).

My wife and I are so appreciative of all the support we’ve received from family, friends, co-workers, and from Magenic. Thank you all so very much!

One last comment, given the ACA “debate” going on right now in the US. Without insurance from Magenic it is a virtual certainty that I wouldn’t be here now. Although it is true that the emergency room couldn’t have turned me away, it is also the case that without insurance I wouldn’t have had access to the specialists or medicines that have kept me going.

Personally, I think it is naïve to think that people without insurance will do just fine because the rest of us will pay for their ER visits. Yes, all of us that can pay for health coverage do pay for the uninsured to get health care – but it is substandard health care, with no preventative aspect, and no access to life-saving specialists or medications.

When I was young and “invincible” I suppose I was dumb enough to think I didn’t need insurance too. But even then I was glad to have it when I blew out my knee and needed surgery to fix it… Back then, without insurance I’d have either had to live with the pain or go deep into debt to fix my knee. Fortunately I did have insurance at the time!

As a counterpoint, my sister-in-law’s arm will never really work right. She didn’t have insurance, and the ER did the minimum necessary to set her arm after a bad break. But she didn’t have access to specialists that would have gotten her back to normal. So her arm is functional, but not like it would be had she had insurance…

Although the ACA may be deeply flawed, it is clear that the free market wasn’t going to fix these issues – it had several decades to do so, and did nothing to solve the problems. So no matter how you slice it, our society has to either live with the crappy model we had prior to the ACA or try and do something different. For my part, I’d much rather see the government try to patch up the ACA than to move us back to the unworkable model we’ve been in for the past several decades…

Monday, October 07, 2013 9:20:15 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [3]  | 

cm-logo Magenic’s free technical training event, Code Mastery, is coming to Atlanta on Nov 2.

This is an excellent opportunity to enjoy some high quality, practical developer and data content. We’ll be covering a number of important topics including SQL/BI, the ASP.NET Web API, Azure, and HTML/CSS.

Register now using the link above!

Monday, October 07, 2013 8:48:48 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  | 
 Thursday, August 29, 2013

As you can tell from my post volume, I’ve had a few weeks of enforced downtime during which time a lot of thoughts have been percolating in my mind just waiting to escape :)

There’s an ongoing discussion inside Magenic as to whether there is any meaningful difference between consumer apps and business apps.

This is kind of a big deal, because we generally build business apps for enterprises, that’s our bread and butter as a custom app dev consulting company. Many of us (myself included) look at most of the apps on phones and tablets as being “toy apps”, at least compared to the high levels of complexity around data entry, business rules, and data management/manipulation that you find in enterprise business applications.

For example, I have yet to see an order entry screen with a few hundred data entry fields implemented on an iPhone or even iPad. Not to say that such a thing might not exist, but if such a thing does exist it is a rarity. But in the world of business app dev such screens exist in nearly every application, and typically the user has 1-2 other monitors displaying information relevant to the data entry screen.

Don’t get me wrong, I’m not saying mobile devices don’t have a role in enterprise app dev, because I think they do. Their role probably isn’t to replace the multiple 30” monitors with keyboard/mouse being used by the employees doing the work. But they surely can support a lot of peripheral tasks such as manager approvals, executive reviews, business intelligence alerts, etc. In fact they can almost certainly fill those roles better than a bigger computer that exists only in a fixed location.

But still, the technologies and tools used to build a consumer app and a business app for a mobile device are the same. So you can surely imagine (with a little suspension of disbelief) how a complex manufacturing scheduling app could be adapted to run on an iPad. The user might have to go through 20 screens to get to all the fields, but there’s no technical reason this couldn’t be done.

So then is there any meaningful difference between consumer and business apps?

I think yes. And I think the difference is economics, not technology.

(maybe I’ve spent too many years working in IT building business apps and being told I’m a cost center – but bear with me)

If I’m writing a consumer app, that app is directly or indirectly making me money. It generates revenue, and of course creating it has a cost. For every type of device (iOS, Android, Win8, etc.) there’s a cost to build software, and potential revenue based on reaching the users of those devices. There’s also direct incentive to make each device experience “feel native” because you are trying to delight the users of each device, thus increasing your revenue. As a result consumer apps tend to be native (or they suck, like the Delta app), but the creators of the apps accept the cost of development because that’s the means through which they achieve increased revenue.

If I’m writing a business app (like something to manage my inventory or schedule my manufacturing workload) the cost to build software for each type of device continues to exist, but there’s zero increased revenue (well, zero revenue period). There’s no interest in delighting users, we just need them to be productive, and if they can’t be productive that just increases cost. So it is all cost, cost, cost. As a result, if I can figure out a way to use a common codebase, even if the result doesn’t “feel native” on any platform, I still win because my employees can be productive and I’ve radically reduced my costs vs writing and maintaining the app multiple times.

Technically I’ll use the same tools and technologies and skills regardless of consumer or business. But economically there’s a massive difference between delighting end users to increase revenue (direct or indirect), and minimizing software development/maintenance costs as much as possible while ensuring employees are productive.

From a tactical perspective, as a business developer it is virtually impossible to envision writing native apps unless you can mandate the use of only one type of device. Presumably that’s no longer possible in the new world of BYOD, so you’ve got to look at which technologies and tools allow you to build a common code base. The list is fairly short:

  • JavaScript (straight up or via various wrapper tools like PhoneGap)
  • Microsoft .NET + Xamarin

(yes, I know C++ might also make the list, but JavaScript sets our industry back at least 10 years, and C++ would set us back more than 20 years, so really????)

I’m assuming we’ll be writing lots of server-side code, and some reasonably interactive client code to support iPad, Android tablets, and Windows 8 tablets/ultrabooks/laptops/desktops. You might also bring in phones for even more narrow user scenarios, so iPhone, Android phones, and Windows Phone too.

Microsoft .NET gets you the entire spectrum of Windows from phone to tablet to ultrabook/laptop/desktop, as well as the server. So that’s pretty nice, but leaves out iPad/iPhone and Android. Except that you can use the Xamarin tools to build iOS and Android apps with .NET as well! So in reality you can build reusable C# code that spans all the relevant platforms and devices.

As an aside, CSLA .NET can help you build reusable code across .NET and Xamarin on Android. Sadly some of Apple’s legal limitations for iOS block some key C# features used by CSLA so it doesn’t work on the iPad or iPhone :(

The other option is JavaScript or related wrapper/abstraction technologies like PhoneGap, TypeScript, etc. In this case you’ll need some host application on your device to run the JavaScript code, probably a browser (though Win8 can host directly). And you’ll want to standardize on a host that is as common as possible across all devices, which probably means Chrome on the clients, and node.js on the servers. Your client-side code still might need some tweaking to deal with runtime variations across device types, but as long as you can stick with a single JavaScript host like Chrome you are probably in reasonably good shape.

Remember, we’re talking business apps here – businesses have standardized on Windows for 20 years, so the idea that a business might mandate the use of Chrome across all devices isn’t remotely far-fetched imo.

Sadly, as much as I truly love .NET and view it as the best software development platform mankind has yet invented, I strongly suspect that we’ll all end up programming in JavaScript – or some decent abstraction of it like TypeScript. As a result, I’m increasingly convinced that platforms like .NET, Java, and Objective C will be relegated to writing “toy” consumer apps, and/or to pure server-side legacy code alongside the old COBOL, RPG, and FORTRAN code that still runs an amazing number of companies in the world.

Thursday, August 29, 2013 3:20:39 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [8]  | 

I am not only a member of the computer software industry, I’m also a member of something often referred to as “fandom” – which means I deeply enjoy science fiction, fantasy, speculative fiction, and all sorts of things related to SF. Yes, I’m a Trekkie, and a Star Wars geek, and a master of Lord of the Rings trivia :)

Fandom has its own conventions, and my family and I enjoy going to them. Over the past couple years there’s been a rise in understanding that fandom conventions often attract some people who feel like they should be able to harass other people. Often sexual harassment.

As a result there’s been a wide ranging and intense discussion about the topic on “the Internets”. It is hard for me to imagine how anyone can argue for harassing behaviors, but people do.

Recently John Scalzi, the author of some of my favorite books, and a wonderful ambassador for SF to the world, posted Scalzi’s convention harassment policy by which he will determine which conventions he’ll attend. In short, his policy is to only attend conventions that have a clear and public harassment policy, and to not attend conventions that ignore this very real issue.

This was so popular that Scalzi ended up creating a blog page where people can co-sign Scalzi’s harassment policy. And a lot of people have, including me.

Now I not only attend SF conventions, but I speak at or attend a whole lot of computer conferences each year. Arguably Scalzi’s policy only applies to SF conventions, but it occurred to me that it is a worthy policy for professional conferences as well. Perhaps professional conferences have less of an issue with harassment because people attend them as an extension of work or their professional life, not as part of their personal lives. And it probably helps that they don’t have cosplay, though sadly some still do have “booth babes”.

Booth babes seriously degrade our ability to attract and retain talented women in the computer field. Too often female attendees and speakers are treated as if they are attending in the same capacity - as if they don’t exist because there is an assumption that men are there as attendees and women are there as entertainment.

Throughout my career path from data entry guy to CTO of a national technology consulting company, I’ve observed some amazing female technologists sidelined in their careers by a number of factors that most men just don’t have to deal with. It damages these women’s careers, but it also damages our industry, makes our companies and our national talent pool less competitive globally, and I just don’t like seeing the waste of talent.

As a result of this train of thought, I contacted the conference organizer for Live! 360, Visual Studio Live! and Modern Apps Live!. These are conferences I not only speak at, but where I am co-chair or chair from a content perspective. My question to 1105 Media was whether they’d consider having a harassment policy for these conferences, and the response was immediate and positive.

It turns out that there has been at least one instance in the past where having such a policy in place would have been helpful to the conference organizers. Beyond that, as soon as you give even a moment’s thought to the issue it is pretty obvious that having such a policy is only a good thing. Conference organizers want more attendees – that’s how they make money. The more inclusive your conference; the more people are likely to attend, so taking steps to ensure people feel comfortable regardless of gender, race, gender identity, disability, etc. is only a good thing.

Now, my conferences (and one organized by 1105 where I’m not involved: TechMentor) all have anti-harassment policies. Here’s the Live! 360 anti-harassment policy for example.

Lest you think this issue impacts just me or 1105 Media, this month’s editorial in CODE Magazine coincidentally addresses harassment at conferences as well. The editorial expresses amazement and frustration that anti-harassment policies are necessary – and it is hard to argue with the idea that civilized people shouldn’t need such things. But we live in a world where there are less civilized people that attend the same events as the rest of us, and personally it makes me proud to be affiliated with 1105 and Visual Studio Live! knowing that they also recognize the need for policies to deal with that fringe minority.

Thursday, August 29, 2013 12:25:58 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  | 
 Wednesday, August 28, 2013

I am a bit unusual in that I have extensively used four different Windows 8 tablets:

  1. Samsung Series 7
  2. Surface RT
  3. Surface Pro
  4. Acer Iconia W3

The Samsung, Surface Pro, and Iconia are all Intel based machines, so they are running Windows 8 (or 8.1 preview) Pro. As a result they can theoretically run anything Windows 7 can run, plus all the new Windows Runtime (WinRT) apps.

The Surface RT is an ARM based machine, so it can run only WinRT apps (plus Office because Microsoft broke their own rules in that case).

So you might immediately assume Surface RT is the worst of the bunch, because it can’t run legacy apps from Windows 7.

But you should also consider battery life. The Samsung and Surface Pro get 2-3 hours if I’m lucky. The Samsung has a loud fan, and the Surface Pro gets quite hot. So while both can run Visual Studio, neither is a particularly fun tablet due to noise or heat, and certainly due to short battery life.

The Iconia has great battery life (I typically charge it every 2-3 days), no fan, and it only gets a little warm. Of course it uses an ATOM processor, so I shudder to think how slow Visual Studio would run (I haven’t tried), but it does run other legacy Windows 7 apps. Its primary drawbacks are that the wifi reception is horrible, and the screen is a bit fuzzy. It is also an 8” screen – which is both good and bad. It is a really nice size for casual browsing and reading, including laying on the couch, etc. But it is pretty cramped if you actually have to do any work – data entry or whatever. So it is a consumption-only device in my view.

The Surface RT also has great battery life. I spent an entire 8 hour flight across the Atlantic watching movies on it and didn’t run out of charge. It makes no noise and doesn’t get warm, and it has a big enough screen that it is good for consumption and light work (data entry, spreadsheets, etc.). True, it can’t run Visual Studio or other legacy apps, but then neither can the Iconia in practical terms (due to its slower processor).

Right now the biggest challenge with the Surface RT is the lack of WinRT apps, not that the machine itself is flawed. In fact, I think the device itself is the best of the four – light weight, good screen size, no noisy fan, no heat during use, great battery life, good performance.

For around-the-house or on-the-plane use the Iconia is the next best thing. It has great battery life, and has the double-edged attribute of an 8” screen. It has no fan, but does get a bit warm. My big problem with it is the weak wifi reception, which is often problematic, and the issue that if I do need to edit a presentation, document, or spreadsheet the screen is just too small. I should say that I don’t have any legacy apps installed on the Iconia other than Outlook, Office, and Chrome. I just haven’t found the need for anything, because there are WinRT apps or web pages to do everything I want to do. I only installed Chrome because the preview IE11 release is often unsupported by web sites – hopefully those web sites will get it together by mid-October…

If I need to use Visual Studio or other legacy Windows 7 apps I pretty much always haul out the Surface Pro these days. It is much nicer than the older Samsung. The Surface Pro is too warm and heavy for casual use as a tablet, but it makes for a great ultrabook that can act like a tablet in a pinch.

I know a lot of the tech media has been bashing on Surface RT due to Microsoft’s write-down on their excess inventory. And presumably the device hasn’t sold nearly as well as Microsoft expected or hoped. Personally I think this is purely because Microsoft didn’t include Outlook on the device – a choice I’m sure someone is regretting in hindsight. If the Surface RT had Outlook (and perhaps a full Lync client) it would do everything needed by most managers/executives in most companies.

Of course it wouldn’t be useful for knowledge workers like developers, CAD users, etc. But those people have desktops/laptops – the primary target market for tablets are managers/executives that travel around a lot and who don’t need a big/fast machine. We know this, because those people are running around with iPads that also can’t serve the needs of knowledge workers.

And if a knowledge worker does rely on a tablet, my observation is that they RDP into a Windows 7 computer to run the higher powered software. Obviously a Surface RT is at least as good of an RDP client as an iPad :)

My point is that I very much hope Microsoft doesn’t give up on the Surface RT. Or if they do, that they provide something comparable to it in terms of battery life, screen size, weight, and so forth via an Intel processor (presumably an ATOM processor).

A secondary point I suppose, is that I’m losing hope that I’ll ever be able to carry just one device. The idea that a device capable of running Visual Studio with good performance, where the device gets 8+ hours of battery life, has no loud fan, and doesn’t get uncomfortably warm might be out of reach…

Then again, the next-gen Surface Pro devices might pull it off?

To conclude – right now I’ve been carrying/using the Surface Pro and Iconia. I actually gave my Surface RT to my Dad because he needed a good tablet, and he’s enjoying it (as much as a non-computer user can enjoy any computer). But I do kind of miss the Surface RT, because I liked it better than the Iconia in some ways…

Wednesday, August 28, 2013 8:30:45 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [5]  | 
 Tuesday, August 27, 2013

The news is atwitter with Ballmer’s impending departure from Microsoft. I’ve read analysis from technical, business, financial, and investor perspectives. Some seems good, a lot seems like just noise.

I am personally rather ambivalent about his departure. I’ve met Ballmer, and even “opened” for him at a fairly large speaking event in Detroit (back when Detroit was reasonably vibrant). He is a very intense, focused, and intelligent man. Pretty much what you’d expect from the CEO of a megacorp.

(yes, I’m a hard-core cyberpunk fan, and if “megacorp” doesn’t apply to Microsoft, then it doesn’t apply to anyone!)

The reason I’m ambivalent has less to do with Ballmer than Microsoft itself. I think Microsoft has gotten itself into such a predicament (undoubtedly in part due to Ballmer’s leadership) that anyone stepping into the CEO role will have a major uphill climb. Of course they have a lot of great raw material to work with, because Microsoft is loaded with extremely smart and dedicated technologists, but they’ll also have such massive issues to overcome that it’ll be really challenging.

The way I look at it is this (keeping in mind that I’m an outsider with nearly 20 years of “insider” status – so I’ve had a great/close viewpoint from outside the company to watch things unfold, but I’ve never been an employee, so I’ve never actually been in the belly of the beast):

Microsoft is not a monolith. In fact, its culture breeds internal competition at a personal, departmental, product, and division level. It is really like a whole bunch of companies that are sometimes allied and sometimes bitter competitors with each other.

When BillG was active in the company he conducted what were infamously known as “BillG reviews”. I remember friends sweating as they prepped for these events, because their product or initiative or idea would live or die based on such a review. As a result of these reviews, a lot of stuff did die – or at least got merged into other products/initiatives. When BillG left these reviews stopped – or at least changed.

The thing is, Bill (who I’ve also met) is amazingly smart and focused, and always seemed to have some idea of everything that was going on across the whole company – at a pretty technical level. Perhaps that was illusion, but I don’t think so. I think he is really that smart, and was really that tuned into what was going on, not in small part because he reviewed everything at one time or another.

These “BillG reviews” provided a failsafe, or level of regulation, against wholesale internal competition within Microsoft. Once they stopped there was nothing to prevent everyone from pursuing their own goals, driven by their personal, departmental, and division motivations (largely staying employed, getting raises, getting bonuses, and doing cool work).

(please note, I’m not judging these motivations – we all share them – or if you don’t want to keep your job and make more money, etc. then you are an odd duck)

As a result we ended up with silly things like multiple new data access frameworks being released all in a year. I strongly believe that BillG would have killed all but one via his review process. But in the absence of any global oversight, we ended up with a confusing array of publically released data access frameworks. What a mess!!

The thing to keep in mind is that developing multiple solutions to a problem is deep in Microsoft’s DNA/culture. It has always worked that way. What was new after the BillG reviews stopped is that nobody prevented the previously-internal chaos from becoming public chaos. Chaos we all have to deal with as developers or consumers.

Ballmer is a sharp guy, but he’s no BillG. He doesn’t have the technical chops for it. Obviously Ray Ozzie didn’t either – or if he had the technical chops, he didn’t have the organizational power. Either way, he wasn’t what many of us hoped he’d be.

Will the next CEO have technical chops? I expect not. And that’s OK, as long as they figure out some way to tame the wild beast that is the individual/departmental/product/division sub-companies that comprise Microsoft. One way or another somebody or something needs to harness that internal innovation and energy, pruning the duplicate bits, and focusing effort toward some unified technical vision.

Personally I feel really bad for a lot of my friends and colleagues who’ve had to work in the chaos over the past many years. Perhaps they haven’t had to sweat out the prep for a “BillG review”, but they must have seen how the uncoordinated chaos was working against the overall interests of their company…

So Ballmer leaving makes me neither happy nor sad. He merely administrated over this chaos for a few years, and was perhaps a good cheerleader. The real question is whether his replacement will be another administrator, or a marketing wonk, or the puppet of investors – or perhaps we’ll get lucky and it will be someone who (if not a deep technologist themselves) understands the core of Microsoft – the power and depth of its technical resources, and the desperate need to focus those resources on a reasonably common goal.

Tuesday, August 27, 2013 4:54:17 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [3]  | 
 Sunday, August 11, 2013

Hello everyone.

I try to keep this blog mostly professional, with only occasional forays into more personal topics. This is one of those forays.

A little over two weeks ago I was speaking at a Windows 8 user group in the Twin Cities. Like most user groups they had pizza, and i ate a couple pieces.

About half-way through my talk i had _horrible_ heartburn. A searing sensation from the center of my chest up into my throat. And I got dizzy and a little short of breath. To the point that I apologized to the attendees and did the rest of my talk from a seated position. I though it was heartburn.

Following the user group I picked up some Tums (heartburn medication) and chewed a few tablets as i drove home. These had no impact, nor did a couple similar meds my wife gave me when I got home.

I couldn’t sleep. Between the discomfort and the worry about what was going on, I just couldn’t sleep.

Why worry? Well, just a couple weeks prior to this point, Jeffrey McManus (a fellow speaker and colleague) passed away in the night due to a heart attack. And he was two years younger than me. So this idea of a heart attack was pretty fresh in my mind, and I knew that the symptoms for a heart attack and heartburn were similar.

So I got online and started doing some research to find out the differences. It turns out there are NO MEANINGFUL DIFFERENCES. If you have heartburn that doesn’t respond to antacid or anti-gas meds, you should assume you are having a heart attack.

As a result my wife drove me to the ER, where they admitted me right away of course. They don’t mess around with chest pain.

Interestingly enough, after a bunch of tests they found no indication of a heart attack, but also no indication of heartburn. In other words, no immediate cause of my pain and discomfort. They gave me the choice to go home or remain in the hospital for some further tests the next day – mostly what’s called a stress test where they have you run on a treadmill while monitoring your heart.

My wife opted for me to stay. I _probably_ would have stayed anyway, but she was clear that in her mind this wasn’t optional (have I said I have the most amazing wife?).

A few hours later they said they wanted to a CT scan. One of the techs that does the stress test noticed that one of my blood tests wasn’t quite normal, and thought it would be worth doing a scan before the stress test. This turns out to have been a life-saving call.

The CT scan revealed something called an ascending aortic aneurism with dissection: http://en.wikipedia.org/wiki/Aortic_dissection

In the majority of cases this condition is identified post-mortem. I was extremely fortunate that it was discovered while I was still around, before the aneurism burst.

Everything changed at this point. As in they wouldn’t let me sit up, they immediately put me on a regimen to radically reduce my blood pressure, and they started checking with all hospitals in the Twin Cities to find the first available heart surgeon. The level of intensity was a _lot_ higher than it has been.

I think fortunately the next surgeon was in my hospital. The other primary possibility was in another excellent heart hospital, so that would have been fine, but this way I didn’t need to be transported across the city.

I woke up somewhere around 8 hours later. Or I should say that my first memory of waking up was around 8 hours later, as I apparently “was awake” after perhaps 5 hours and my family was there with me, but I have no recollection of that time.

I was in the hospital for another week before they sent me home, and even then my memories are a bit hazy due to the pain meds.

So here I am after about 1.5 weeks of being home and I’m on a lot less pain meds, so my mind is at least reasonably clear. I have another 10 weeks of healing before I can resume all normal activities, though just 4-6 before I can do things like go back to work full time.

I apologize to the LA .NET User Group and VS Live Redmond attendees who’d hoped to see me, but as you can tell I really had no choice but to cancel my appearances at those events. I do expect to be at Modern Apps Live and VS Live in Orlando in mid-November.

The primary things I’ve learned from this whole thing include:

  • You can’t easily tell the difference between heartburn and actual heart issues, so if antacids don’t work, error on the side of caution
  • I have the most amazing family and friends, who’ve been incredibly supportive, and continue to be supportive as i heal
  • My coworkers at Magenic are wonderful, and have ensured that I have no stress or worry about anything work-related, in addition to being broadly supportive through goodwill and kind thoughts
  • The online/professional communities to which I belong (CSLA .NET, various Microsoft communities, Regional Director, MVP, and others) have also been extremely supportive, and I truly appreciate the outpouring of goodwill

Some other observations:

  • I hate sleeping on my back – I always have disliked it, but after being confined to that option for a couple weeks I feel comfortable using the word ‘hate’
  • Hospital food is actually pretty good when you haven’t eaten anything for days
  • I am _shocked_ by how weak something like this can make a person – to the point that something simple like taking a shower is a major undertaking that takes a lot of planning and requires a long nap afterword

On the other hand, the fact that I’m here to make these observations and to write this blog post makes it all worthwhile.

I wanted to write this post for a couple reasons.

First, to thank everyone who has been and continues to be so supportive as I recover.

Second, to let colleagues and followers in my various communities know why I went dark so suddenly, and why things like CSLA releases might take longer than normal.

Third, to share my actual medical experiences in the hopes that even one person someday goes to the ER when they have “heartburn”. In my case I was sensitized to this issue due to the recent death of a colleague, and I’d prefer to have as few other people suffer that fate as possible.

Sunday, August 11, 2013 3:07:31 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [26]  | 
 Tuesday, July 09, 2013

A lot of people, including myself, felt (feel?) deeply betrayed by Microsoft’s rather abrupt dismissal of what some of us thought was the best client-side dev platform they’ve ever come up with: Silverlight.

Perhaps even more people are worried about the future of WPF in the face of Microsoft’s obvious focus on the new Windows Runtime (WinRT) at the expense of the Desktop (Win32) technologies such as Windows Forms and WPF.

I’m a little more sanguine about this than many people.

I never really bought into the idea of Silverlight as a cross-platform technology. I know, I know, Microsoft made it work on some flavors of OS X. But they didn’t take it to Linux or Android, and Apple blocked them from ever going to the iPad or iPhone. And honestly, you have to follow the money. Companies don’t exist to do good, they exist to make money, and Microsoft didn’t charge for Silverlight and so only stood to lose money by enabling us to build apps that ran on non-Windows devices just as well as Windows devices.

(as an aside, this is why I never get too upset when Google drops yet another free service – the way I look at it is that I’m exploiting the hell out of Google’s free stuff as long as they have it, and when they decide to drop a free service I just have to start paying for something I should have been paying for the entire time (but didn’t have to thanks to Google’s amazing “business” model)).

I did buy into the idea of Silverlight as a much safer and easier-to-deploy way of building Windows smart client apps. So to me the truly sad part about Silverlight going away is that it pushed us back toward creating apps that aren’t as safe (out of the sandbox), and that are slightly harder to deploy (ClickOnce).

Perhaps I’m unusual, but I really do buy into the idea that smart client apps don’t need the ability to reformat people’s hard drives, or alter system files, or snoop through my personal documents without my knowledge. In other words, the full client-side .NET/WPF/Windows Forms/Win32 technology stack just isn’t necessary for 99% of the apps I want to build and/or run, and after a few decades of dealing with viruses and malware and other bad stuff, I’m about ready to be done with it!

So here we site, with Silverlight in maintenance mode so Microsoft will keep it running on their platforms for another decade, but without any real assurance that it will continue to work on the Mac. And frankly I don’t really care, because I always thought the Mac was a lark.

To me where we are is simple:

  • Microsoft is treating all of Win32/.NET on the client as legacy, so Windows Forms, WPF, and Silverlight are in the exact same boat
    • They are all stable (essentially unchanging) into the foreseeable future
    • They are all good/viable Win32/Desktop client technologies
    • They will ultimately fade away
  • Microsoft is putting all their energy/money into rapidly bringing WinRT up to speed
    • Being a fan of “follow the money”, I expect that we’ll all eventually move to WinRT
    • WinRT 8.1 shows some good XAML/C# improvements over 8.0, demonstrating Microsoft’s commitment to making this a viable platform
    • WinRT still has a fundamentally flawed deployment/licensing model for business apps, and until they fix this WinRT is pretty much useless for business
    • WinRT still lags in XAML features behind Silverlight 5, but it is catching up
    • WinRT (like Silverlight) will hopefully never do everything WPF does, because then we’d be back to the same malware hell-hole we’re in with Win32

In short, for everyone wishing and hoping for Microsoft to put more energy/money into WPF (or even more far-fetched into Silverlight) I think the answer is that THEY ARE – but they are doing it via WinRT, by eventually providing a viable XAML/C# platform for business development on Windows that escapes the baggage of legacy Win32/.NET/Desktop.

We just need to do two things

  1. Be patient, because WinRT is a v1 technology and will take a little time to mature
    1. Something I’m not worried about, because most businesses are just now getting to Win7 and won’t go to Win8 for a couple more years, so there’s some time for Microsoft to get their act together
  2. Keep the pressure on Microsoft to bring WinRT to the level we need
    1. In terms of licensing/deployment models
    2. In terms of technology capabilities

Let’s face it. Either Microsoft (with us pushing/prodding/helping) provides a viable WinRT platform for us in the future, or we’d better all start learning JavaScript and/or Objective C…

Tuesday, July 09, 2013 10:58:43 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [11]  |