Thursday, February 27, 2014

The Mobile Evolution is different from the PC Revolution

When PCs entered the scene, it was a revolution. The entry of mobile devices (smartphones and tablets) is less revolution and more evolution.

What is the difference? Exclusive applications.

When PCs entered the market, they shared some applications with minicomputers and mainframes (assemblers, compilers, and text editors, mostly) but a large percentage of applications were unique to PCs. Word processors, spreadsheets, and games were the popular applications, and none of them were from mainframes.

Mobile applications, for the most part, are extensions of existing PC and web applications. Twitter, Facebook, even Google Maps all live on the web and in the mobile world.

There are some apps that are (or were) mobile-only. "Angry Birds" was first released for the iPhone and later moved to other platforms. FourSquare is a mobile-only app, given its "check in" function.

But the number of mobile-only apps is small, compared to the total. This is quite different from the PC revolution, which saw thousands of PC-specific applications and a small number of mainframe "crossover" applications.

The PC world was filled with new applications, and new types of applications. That's why it was a revolution. The mobile world -- so far -- is filled with extensions to web applications. That's why the mobile world is an evolution.

Wednesday, February 26, 2014

Legacy code isn't code -- its a lack of tests

We have all heard of legacy code. Some of use have had the (mis)fortune to work on it. But where does it come from? How is it created?

If legacy code is nothing more than "really old code", then when does normal code become legacy code? How old does code have to be to earn the designation "legacy"?

I've worked on a number of projects. The projects used different programming languages (C, Visual Basic, C++, Java, C#, Perl). They had different team sizes. They were at different companies with different management styles. Some projects had old code but it wasn't legacy code. Some projects created new code that was legacy code from the first day.

Legacy code is not merely old code. Legacy code is code that few (if any) team members want to modify or enhance. It is code that has a reputation, code that contains risk. It is hard to maintain and easy to break.

Legacy code is code without tests.

With a set of tests -- a comprehensive set of tests -- one can change code and be sure that it still works. That is a powerful position. With tests to verify the operation of the code, programmers can refactor code and simplify it, knowing that mistakes will be caught.

Without tests, programmers limit their changes to the bare minimum. Changes are small, surgical operations that adjust the smallest number of lines of code. The objective is not to improve the code, not to make it readable or more reliable, but to avoid breaking something.

Changes to code with tests also strive to avoid breaking things, but the programmer doesn't need the paranoia-like fear of changes. The tests verify the code, and frequent testing identifies errors quickly. The programmer can focus on improvements to the code.

Don't ask the question "is our code legacy code" -- ask the question "do we have comprehensive tests".

Thursday, February 20, 2014

Installing Windows 8 is not always easy

I think Microsoft is missing a useful tool for would-be Windows 8 users.

The tool I am thinking about is a compatibility checker for PC hardware. I have an old PC and I am considering Windows 8 for it. My big question is: Will Windows 8 run on it?

I would prefer an answer to that question before committing to the purchase of Windows 8.

The Microsoft web site is very good about listing the requirements for running Windows 8. They specify a processor speed, memory, and disk space. Those are easy (for me) to verify. Microsoft also mandates that the graphics card be a "Microsoft DirectX 9 graphics device". That requirement is not so easy to verify.

The PC in question is a vintage Dell Optiplex GX-280 desktop PC. I'm pretty sure that it predates DirectX 9.

Given the difficulties in verifying hardware, I would think that a utility would be available. Something small and simple, that would run and say "yes" or "no". Yet I find no such utility.

Now, there are utilities that you can run on existing Windows systems and these utilities check the hardware and your current applications. They assume, however, that you are already running a version of Windows.

Did I mention that my PC is *not* running Windows? Did I mention that my PC is running a variant of Ubuntu Linux?

That means that I cannot run the Microsoft-supplied, Windows-only, compatibility checker utility.

From what I can see, my only option is to attempt to install Windows 8, use the activation code (it's the first thing that the install program requires), and hope that Windows finds my system acceptable. That's a risk (in money and time) I would rather not take.

This approach is very different from most Linux distros, which allow one to run Linux in "live" mode from the CD (and not touching your hard drive) to verify compatibility.

I don't know that Microsoft needs a "run off the CD" mode for Windows. The option to verify hardware would be nice -- perhaps as the first step of the install, and before the activation code. Such an option would let me confirm my installation before committing.

If not part of the install program, perhaps a stand-alone utility that runs under Linux. (Perhaps even an open source utility!) Something one could build with gcc and run from the command line. It doesn't have to be fancy -- since anyone using it would be a Linux user with sysadmin experience. (If you're installing a new operating system, you're a sysadmin.)

Perhaps Microsoft considered this capability, and decided against it. Such capability does add to the complexity of the setup disk. As a practical matter, most PCs will be running Windows, and configurations such as mine are a very small minority. I could easily see Microsoft choosing to invest the effort in other directions.

Yet I cannot help but think that in today's market Windows must compete against Mac OS and Linux. Tools to assist people converting from non-Windows to Windows might be a good idea.

Wednesday, February 19, 2014

The great puzzle of Microsoft Office

What will Microsoft do with Office? Or, what should Microsoft do with Office?

Microsoft built an empire with Office. Office was the most powerful word processor and spreadsheet package. It used proprietary formats. It read files from other word processors and spreadsheets but did not write to those formats, making the trip for data one-way: into Microsoft Office. Through marketing, fierce competition, and the network effect, Microsoft convinced most businesses and most home users to use (and buy) Microsoft Office.

Those were the days.

The world is changing.

Large businesses still use Windows for their desktop environment. Small businesses, especially technology start-ups, are using Mac OS or Linux.

Large businesses still use Microsoft Office. Small businesses are looking at LibreOffice (an open source desktop package with word processing and spreadsheets) or Google Apps (an on-line office package with word processing, spreadsheets, e-mail, calendaring, and other things).

The tablet world is dominated by iOS (on iPads) and Android (on just about everything else). Windows holds a tiny share. The same goes for smart phones.

These are the pieces of the great puzzle that Microsoft must solve. What is a software giant to do?

First, some observations.

Microsoft is the latecomer
 Microsoft is late to the market, but they have been in this position before and succeeded. They were late with C#/.NET after Java. They were late with Internet Explorer after Netscape Navigator. They were late with spreadsheets after Lotus 1-2-3. They were late with word processors after Wordstar and WordPerfect. They were late with databases after dBase and R:Base. Being a latecomer has not doomed Microsoft yet.

New hardware platforms Microsoft must live (and compete) in a world beyond the PC. Phones and tablets must be part of the solution. Tablets and phones are a very different arena for software design, due to the size of the screen, the touch interface, and intermittent connectivity. Any product on the tablet or phone is a different creature than it's PC counterpart.

Multiple software platforms Microsoft must live (and compete) in a fractured world of software, with multiple operating systems (some not of Microsoft's making or control). Offerings from Microsoft must work with iOS and Android as well as Windows.

The desktop software model doesn't work on mobile devices Microsoft's past technique of selling premium software and obtaining market share through marketing won't work on the mobile platform.

Giving these conditions, Microsoft needs a new approach. Here are some ideas:

Sell services, not software Microsoft will not focus on selling copies of Office for the mobile world. Instead, it will focus on subscribers to its services. The mobile versions of Word and Excel and Outlook will be offered at low prices -- perhaps at no cost -- but they will be useless without the service.

Cloud storage, not local files Microsoft Office will store data in the cloud (Microsoft's cloud).

Not documents and workbooks, but pieces assembled Instead of entire documents and complete spreadsheets, Microsoft services will stitch together fragments of documents and spreadsheets. Think of it as an advanced form of OLE. (Remember OLE and our excitement at embedding a spreadsheet in a document?)

Versioning and tracked changes Microsoft's cloud will keep track of the versions of each document (or document fragment), allowing us to see changes over time and the notes for each change.

Access control (for enterprise users) With all of these fragments floating in the cloud, enterprise users (businesses and their support teams) will want to control access by users.

Promotion and publication (also for enterprise) Users will be able to publish data to other users. Users will also be able to work on new versions of data, reviewing it with other members of their team, revising it, and eventually marking it as "available to everyone". Or maybe "available to selected users".

The idea of Office as a service seems a natural fit for mobile devices. Notice this this vision does not demand Windows tablets -- one can use it with iPads and Android devices. I expect Microsoft to move in this direction.

Tuesday, February 18, 2014

The software market for mobile is not the software market for desktop

With mainframes, software was expensive. Not, "expensive like an MSDN subscription" expensive, but *really* expensive. When not bundled with the hardware (an early IBM business model), it often cost as much as the hardware. Often, the license included a "maintenance contract" which saw annual payments in addition to the initial "licensing" payment.

With PCs, software was less expensive. Some high-end expensive software for PCs does include a maintenance contract, but for the most part, the only fee is the initial payment, and that payment is a fraction of the cost of the hardware. Early PCs cost $5000 (in 1980 dollars) and the popular software packages (Lotus 1-2-3, Wordstar, dBase III) went for several hundred dollars. Today, PCs cost about $1000 (perhaps less) and popular software packages cost $200-300.

The change from mainframe to PC was a large one. Some companies attempted it, and few succeeded. The well-established companies in the mainframe space did not know how to approach a market with many more purchasers of software that sold for fewer (lots fewer) dollars. Their inability (and lack of desire) let "upstarts" like Microsoft into the market. The result was a dynamic market with many new companies and many new ideas.

Now we have mobile devices that sell for even less than PCs. The one well-established companies in the PC software space (Microsoft, Adobe, Intuit, Symantec) are struggling to cope with the mobile market -- or showing no interest in it. Apple's lead has defined a lower level for software prices and new rules for licensing. Software sells for a few dollars, not hundreds. Software can run on any of your registered devices, not just the activated device.

Microsoft's Windows 8 is an attempt to combine the desktop PC and the tablet PC. I think that this is a mistake.

Don't get me wrong -- I like Windows RT and the live-tile interface. (I think it needs some tuning, but nothing major.) The new user interface is suitable for tablets and phones, as is the pricing of software in the Microsoft App Store.

But the change in pricing is a large one, too large for the desktop market. Yes, desktop users want cheap software, but they also want documentation and support which are not part of the mobile world. This is why people keep buying Microsoft Windows and Microsoft Office instead of Linux and LibreOffice.

I think the mobile market will stay separate from the desktop market. The divide between these two worlds of computing is large. Some packages may span that gap, but most will stay on one side.

I expect that the expensive software will stay on PCs, and people will continue to use it (and buy new copies). Perhaps not as many as in the past, as some mobile software will meet the needs of people. (E-mail, for example, can be handled on a tablet or phone.) I also expect that PC software will stay expensive.

I also expect that the mobile market will continue to see low prices for apps. The business model has been established, and it works.

But perhaps not for the current set of PC software vendors.

Wednesday, February 12, 2014

Microsoft's big chance in the mobile world

Apple (via iOS) and Google (via Android) have taken a lead in mobile platforms. Microsoft's offerings (Windows Phone and Windows RT) have received a cool reception. Yet I see hope for Microsoft.

iPhones, iPads, and Android devices have become popular with consumers (average folks like you and me) and have limited acceptance in the corporate world. I think Microsoft has an opportunity in the corporate market.

I see three reasons:

IT shops tend to be conservative Many IT shops have strong preferences for Microsoft equipment. It works, and changing to another vendor always entails risk.

The role of mobile devices in the corporation is still undefined We know how to use phones and tablets as individuals (play games, read books, and chat on Facebook) but we don't (yet) see how mobile devices help business. Yes, there are a few specialized applications, such as documentation for aircraft pilots or apps for insurance adjusters. The corporate world is an open field.

iOS and Android platforms change frequently The iPhone has seen five generations, and Android has seen almost as many significant versions in its (relatively) short life. Later versions have forced changes to the design of apps, from internals to the UI. Such changes reduce the life of apps and add to the cost, as one revises an app for the new operating system.

With this environment, Microsoft has an opening. Microsoft can offer Windows RT and provide longer support for each version. And I am specifically looking at Windows RT, the variant that does not run Windows classic applications.

Longer support for versions of Windows RT is necessary, but not sufficient. In addition to a stable platform, Microsoft must offer tools for developers. Not just a version of Visual Studio that builds code for Windows RT, but libraries to connect Windows RT apps to Azure and other (non-Microsoft!) cloud services. Not just support forums, but code to handle authentication and payments. Not just UI designers but modules to connect legacy corporate data to Azure (and thereby to mobile devices).

Apple and Android have shown that mobile devices are technically feasible and that there is a demand for them. Now Microsoft has the opportunity to show that they can contribute to business.

Sunday, February 9, 2014

Mobile/cloud chips away at batch processing

Consider a particular type of PC application, one that I call "the spreadsheet app". It processes information. It accepts large quantities of data in (a spreadsheet, or multiple spreadsheets), processes the data, and then provides the results in large quantities of data (another spreadsheet with multiple pages).

In some ways, it is a design of mainframe batch processing: collect all of the input data up front, process it in one large calculation, and provide the results in one large batch.

The PC revolution was supposed to change all of that. The PC revolution was supposed to slay the batch processing beast and make data processing interactive. Yet here we are, thirty years later, still processing data in large batches.

I think that tablets (or more specifically, mobile/cloud) will succeed where the PC revolution failed.

Moving a spreadsheet app to mobile cloud is not easy. A direct port makes little sense: tablets have small screens and data entry into spreadsheets requires fine control for the selection of cells.

A "native" tablet app would take advantage of the strengths of mobile/cloud (interactive displays and fast processing on the cloud servers) and avoid the weaknesses (constrained data entry). Instead of data entry into a large grid of numbers, data must be entered in smaller units. This is possible with lots of spreadsheet apps; their data is often structured into collections (and sometimes collections of collections). Tablets can handle data entry in smaller chunks.

The shift from the spreadsheet grid to a collection of units is the same as the shift from batch processing to interactive processing. The app must accept small units of data, incorporating each smaller unit into the larger whole.

It's possible to build the entire large batch of data in this manner, and then process the batch at once, but its also possible to process each unit of data (a small batch) as it is entered.

Even if each unit of input requires a complete re-calculation of the data, that may be okay. The calculation would be performed on a server (or a set of cloud-based servers) and computing is getting faster and faster. Pushing data to cloud servers for calculations makes sense.

Tablets still have a limited size, and displaying the results may be problematic. One cannot display a raft of numbers on a tablet. (Well, one can display a raft of numbers, by using a very small typeface size. But the results would be undesirable.)

Instead of a text display, apps for tablets will (most likely) use graphical representations for data, with the ability to focus on small sections and see the underlying numbers. We could use this technique today with PC applications, but spreadsheets are limited in their abilities to present information graphically. (I've used Microsoft Excel for years, and the charts and graphic capabilities have remained static for quite a while.)

So that's what I see. Mobile/cloud apps will accept small units of data, process them on fast servers, and present the results in graphical form. The shift from batch processing to interactive processing. The PC revolution will eventually occur and liberate us from the tyranny of batch processing. Ironically, it will occur not on PCs but on tablets and cloud servers.

Monday, February 3, 2014

Microsoft Should Leverage Envy

The low acceptance of Windows 8 (and specifically the "Metro" interface) shows the difficulties faced by Microsoft. The Windows desktop is a popular -- although perhaps not well-liked -- interface, and changes must be introduced at a pace that is acceptable to Microsoft's vast number of customers.

"Metro" is not the first change Microsoft has introduced to Windows. The first change, arguably, is Windows 1.0 with its tile-only, rudimentary display. Windows 2.0 and Windows/286 made some changes, but the next big interface change was with Windows 3.0. After that, Windows 95 introduced a number of changes, including the "Start" button.

All of these changes were accepted heartily by Microsoft customers. (Yes, there were a few dissidents, but only a small percentage of customers.)

Windows Vista and Windows 8 introduced similar-scale changes to the interface, yet received cooler receptions. Why?

I have an some ideas. They involve innovation.

Should Microsoft innovate? Specifically, should it introduce new user interfaces?

I think the answer is "no". Perhaps Microsoft should be a follower in user interface design. Rather than blaze new territory, Microsoft may be more successful in copying other (innovative) concepts.

The success of the early versions of Windows was, I believe, driven by envy. In the mid-1980s, we Microsoft customers knew the DOS text interface, and we coveted the Apple GUI. We really, really, wanted a graphic user interface. (It didn't have to be the exact Apple GUI, but it had to use graphics.)

The competition between Microsoft and Apple gave us advances in Apple's GUI and later in Microsoft Windows. But Microsoft was not the innovator; Microsoft followed Apple, and the strategy worked.

One can argue that Windows Vista and Windows 8 "Metro" are copies of Apple's products. Windows Vista is a shinier GUI with lots of gadgets (or are they "widgets"?) and "Metro" is the iOS interface with a Microsoft twist. Why are these innovations rejected?

I think the reason is a lack of envy. Compared to Windows 7, the Apple MacOS X and iOS GUIs are nice, but they are not that much nicer. Windows users are not envying the touch interface, the sliding icons, and the single-screen apps. The impression I get from Windows users is that the Apple GUIs are nice but comparable -- not superior.

By making Windows Vista a copy of MacOS X and Windows 8 "Metro" a copy of iOS, Microsoft exchanged perfectly good GUIs for different GUIs that while just as good are not significantly better. For users, this means effort to learn the new GUI with no corresponding gain in productivity or social status. It is any wonder that they are annoyed?

I think Microsoft got "Metro" half-right. I think that it is the right choice for their phones and tablets. But I think Microsoft is selling the wrong aspects of "Metro". Instead of pushing the GUI, they should be pushing the easier administration aspect. This is the innovation that people will envy.

For the desktop, I think Microsoft should build a "Metro"-like box that lives in the Windows desktop, complete with access to the Microsoft App Store and easy installation (and updating) of apps.

Microsoft's customers are a picky (and loud) bunch. When they are envious of another company's GUI, we'll know. The trick for Microsoft is to be ready to deliver that GUI quickly. If they reduce the prominence of "Metro" but keep it as an active part of Windows, I think Microsoft will be in a good position.