I have been spending some time with the recently released Sencha Architect 2. This is a development environment with three core components:
Ext JS 4.0 Framework: an HTML5 application framework for desktop browsers
Sencha Touch 2.0: an HTML5 application framework for mobile browsers
Sencha Architect IDE: a visual development tool for both Ext JS and Sencha Touch
Architech is a commercial product, but there are free and open source versions of Ext JS and Touch with various licensing and support permutations available.
I installed Sencha Architect on Windows, which works though I cannot quite describe it as Windows-friendly; there is a Mac flavour to the documentation and nothing quite works in Internet Explorer, Chrome or Safari is recommended.
What you get though is an elegant IDE which is focused 100% on applications, rather than general HTML design. It is not Eclipse-based, which I found interesting having recently also tried the latest Titanium IDE from Appcelerator, which is built on Eclipse. Although Eclipse is a wonderful thing, it does add complexity and overhead compared to a lightweight, dedicated IDE like Sencha Architect.
The frameworks are also interesting. Both Ext JS and Sencha Touch (which are similar in many respects) are based on a Model-View-Controller design, and this is neatly expressed in the IDE which shows Controllers, Views, Stores, Models and Resources in its Project Inspector. A store is essentially a collection of model instances, and might for example be an Ajax proxy retrieving JSON data from a remote URL. The image below uses this technique to show bars in London. The app is designed for a smartphone, though I am displaying it in Google Chrome to test.
A great feature of the latest Sencha toolkit is that you can package apps as native apps for Android or iOS. Support for RIM Playbook is also planned. You can even package for iOS on a Windows machine, though of course without the benefit of the iOS simulator. Sencha's approach to native packaging is similar to Phonegap/Cordova, in that it uses the embedded browser on the device. However Sencha is not using Phonegap, but as far as I can tell, draws on technology acquired from Nimblekit, a small company specialising in native apps for iOS with HTML and Javascript acquired by Sencha.
These frameworks are not the easiest to pick up quickly, but I was struck by the clean design of both the code and the IDE. Further, Sencha apps generally look good and in many cases the visual components come close to what you can achieve with native code.
From what I can tell, the pressure on developers to create apps that play nicely with a variety of devices, from Windows desktops and laptops through to iPads and Android smartphones, will only increase. Sencha is worth a look.
Why would a company take its core product and mess with it so that a significant proportion of its customers will almost inevitably dislike it? Welcome to Windows 8. Microsoft has taken its familiar operating system and bolted on a Tablet OS called variously Metro-style, or the Immersive UI, or from the developer perspective WinRT (Windows Runtime).
I have been working with Windows 8 since the launch of the Consumer Preview at the end of February, both on a slate device and on my usual desktop PC. It has not been a bad experience, but it has been distinctly odd, and at times distinctly annoying.
Putting two disconnected web browsers with different user interfaces in Windows 8 is a usability disaster, for example. I find myself losing tabs, or right-clicking to raise the tab selection UI forgetting that I am in the desktop browser.
Another problem is that the taskbar, reliable task-switcher since Windows 95, is broken in Windows 8, since it does not show which Metro apps are running.
Presuming you are not using a slate, the pragmatic solution is to avoid the Metro side and just use the desktop. This is difficult too though, partly because of the Start menu which is Metro-only, and partly because some utilities are now Metro. Sometimes these also exist in their old versions, at least in the Consumer Preview, leading to a surreptitious Metro-avoidance search.
Take the new Remote Desktop Client, for example. Raise the Start menu, type Remote, click Remote Desktop, and off you go. Then you discover that the settings are minimal and hard to find, and that when you do connect, it only runs full-screen (like all Metro-style apps). What if you do not want it full screen? Maybe the old one is buried here somewhere?
So you press Windows+R for the Run dialog and type mstsc, and up comes the old one. Thank goodness, pin to taskbar.
This is all very well, but if you run a corporate helpdesk the prospect of constantly advising users on how to avoid Metro or work around its limitations is unwelcome. Unless Microsoft can work some magic between now and launch, businesses will be patting each other on the back for sticking with Windows 7 for years to come, at least until Windows 9 arrives.
That will a shame, since there are also plenty of good things in Windows 8, even leaving aside Metro. Hyper-V virtualisation is one, Storage Spaces another (though probably of little relevance to businesses), networks connect faster, and performance feels snappier overall.
So what is Microsoft up to? The problem it faces is encapsulated by a conversation I had with someone who works in the City of London the other day. "I am getting an iPad," he said. "It is changing the way we do meetings."
Apparently it is now common for documents to be sent out as PDFs and viewed on an iPad. Somehow, the difference in usability, portability and battery life between a laptop and an iPad is enough to tip the balance from paper to electronic documents.
Microsoft fears this, because it sees that as iPads and other tablets improve, and the apps become more powerful, the moment will come when there is no need for a laptop at all.
Put another way, it is touch-controlled tablets that will be the growth area in personal computing, not the usual cycle of Windows upgrades.
This is why Microsoft cares more about the tablet experience in Windows 8 than about the desktop experience. In particular, the Windows on ARM devices, which should be equally as lightweight and power-efficient as an iPad, will in theory be a compelling option for City users who want an e-reader for meetings. They get real Excel and Word as well as all the usual Tablet benefits.
That is the theory, though after using Windows 8 on a tablet at a conference last week I have concerns there as well. The snag is that it is even harder to avoid the desktop when in Metro, than it is to avoid Metro when in the desktop. Windows 8 has a much better on-screen keyboard than Windows 7, but all the fundamental usability issues of touch-control in Windows remain in the Windows 8 desktop.
The fix will be more and better Metro apps, but by the time Microsoft has it right, how far behind Apple and Android will it have fallen in this market?
I am reserving judgement, because despite the annoyances, Metro-style Windows does work well on a tablet, and I do value having a combination device that runs everything. Microsoft is apparently re-working Office for Windows 8, even though it remains a desktop application, and this combined with improved Metro apps should considerably improve the tablet experience.
The controversial Start menu becomes one of the best features when you are working with touch, and apps are easier to find and launch than on iPad or Android.
It is not all bad then; but there are plenty of reasons for caution when it comes to Windows 8 in business. Perhaps the real significance of Windows 8 is not so much Metro, Windows on ARM, and the debate about how well they will do, but rather the underlying trend which has caused Windows 8 to be what it is: the unexpectedly rapid ascent of tablet (and by implication, cloud) computing thanks to Apple's iPad.
Gil Zilberfeld, an agile practices expert, has posted on 4 warning signs that Agile is declining. I will not re-iterate his points; you should read the article for yourself. The overall theme though is this. The software establishment - including the managers, the consultants, the trainers, the vendors - has embraced Agile, to the extent that, according to Zilberfeld, more than half of software projects at least nominally use Agile methods. The results are disappointing though, because companies have simply absorbed bits of Agile into their existing top-down management culture. Therefore:
At this point, I feel Agile is declining into what TQM [Total Quality Management] was. A brilliant success in the beginning, and now just a history fact. In a few years, months even, the business side will wake up and say: Agile is snake oil. It doesn't deliver on its promise (and it doesn't matter if it's done wrong). The backlash will be grand.
I am reminded of something I learned from one of the excellent QCon conferences in London, which covers Agile in depth. It was not so much a specific speaker or talk, more a common theme running through many presentations. Software projects generally do not fail for technical reasons. They fail because the team - using the word team in its widest sense, to include all project stakeholders from users to executives - fails to communicate effectively. Many Agile techniques, such as the daily meeting which is part of the Scrum methodology, are designed to facilitate communication. I have also heard recommendations such as moving developers into the same office as managers in order to get them talking to each other. Another example, at a micro level, is Pair Programming, where two developers work side by side on the same code. You cannot do this without communicating your intentions, ideas and solutions to the person alongside you.
Kent Beck, one of the pioneers of Extreme Programming and Test Driven Development, highlights the human factor in software development. Take a look, for example, at his essay on Accountability in Software Development:
... while programming I offer accountability as a way of demonstrating my trustworthiness and encouraging my own best behavior. Pair programming; test-first programming; continuous integration; visible daily, weekly, and quarterly cycles; slack; and estimation are some of the way I make public commitments and render account of my activities. Knowing I will be honest and accountable affects how I do my work, just as knowing that I am hiding and concealing negatively affects how I do my work. Taking responsibility for my choices and actions deflects blame. There is no hidden shame if everything I do is above board.
What is important here is not the techniques in themeselves, but the trustworthiness and accountability they facilitate.
Human problems are harder to solve than technical problems, and seen in this light it is not surprising that companies which adopt bits of Agile methodology without changes in corporate and management culture will miss out on most of the benefits.
Another common experience at software development conferences is to talk to developers who enthuse over the insights they have received, but then lament that they cannot be applied in their workplace. The reasons are old and familiar: inflexible management, longstanding broken processes that nobody seems able to fix, little kingdoms which protect their borders at the expense of the effectiveness of the whole corporation, and so on.
A few thoughts in conclusion. First, if Agile projects are failing, that does not necessarily imply that something is wrong with Agile methodology. It all depends on how it is done and whether the people involved are embracing or resisting the change and communication that goes along with it. Second, irrespective of the methodology, effective communication is key to the success of a project; and if it is not possible to change the methodology or even the tools and technology, working on team communication may still yield amazing results.
It is a little early for a review of the year, but not too early to state that 2011 has brought profound changes to the software development world. Although I am thinking mainly of the client, I would also argue that client and server are so intertwined that both are affected. As an example, I have heard developers moving away from SOAP web services not because of any conviction that REST is a better approach, but because the move away from Windows and towards HTML clients makes SOAP web services more difficult to consume.
So what's changed? Simply put, three platforms which once seemed strategic are now in obvious decline. Getting the nuance right for these platforms is tricky. Lots of software still runs and is still widely used long after it has ceased to be strategic for the company which supports it. All the platforms mentioned negatively below are still in active development; they are not going away and will still be running ten years and more from today. They come with health warnings though: depending on these platforms means that your software will gradually become more difficult for users to run and will be left behind by new technologies.
In the run up to the launch of Microsoft's Visual Studio 2010 I spoke to a number of Microsoft platform developers. The consensus then was that Silverlight was very important and possibly the future of Microsoft's client. The view was supported by the company's energetic development efforts for Silverlight. It also made a lot of sense: a lightweight, secure, cloud-centric client that escaped the GUI limitations of Win32, worked in the browser or as a desktop application, and as a bonus run on Mac as well as Windows. Silverlight, as I noted in several articles, is client-side .NET done right.
This is not the place to write a long screed about why Silverlight failed, but rather to note that at the end of 2010 it became obvious that Microsoft was changing direction. At the Professional Developers Conference, October 28-29 2010, it was hardly mentioned, and the company focused instead on HTML and Internet Explorer 9. The full extent of its new strategy was not shown until this year, at the BUILD conference in September.
It is not only external developers that were surprised by what seemed a sudden change of direction. The same seems to be true of many within Microsoft itself. Nor am I sure exactly when someone decided that Silverlight was no longer strategic, though there are clues in the Silverlight release schedule. When Silverlight 4 was unveiled in November 2009 it was still ascendant. Silverlight 5, due out shortly, suggests that it was still considered important in early 2010. Visual Studio LightSwitch released this year was likely planned in part as a way of boosting Silverlight, since it builds Silverlight applications. But nobody is talking about Silverlight 6.
Silverlight is still the development platform for Windows Phone 7, but many observers, myself included, believe this will give way to a variant of the new Windows Runtime (see below) in a future version.
This has been a costly experiment for Microsoft. If the company had done the Windows Runtime, rather than Silverlight, back in 2007, imagine how much stronger would be its position now. That said, it is not all wasted. XAML, the presentation language in Silverlight and in Windows Presentation Foundation, continues in the Windows Runtime, and so does the essence of the cloud-centric, client-secure development model.
Back in 2007 Silverlight seemed to be in part a competitive response to the increasing popularity of Adobe Flash. This month though, Adobe went though wrenching changes of its own, announcing the end of Flash on mobile browsers and a fundamental shift in business strategy away from enterprise development and towards content creation and distribution.
There are plenty of parallels with the Microsoft case. One is that the changes also came as a surprise to many within the company, who just a few weeks before, at the MAX conference in Los Angeles, were talking confidently about the future of Flash and of Flex, the application-centric SDK for Flash. Here is Doug Winnie, a casualty of the inevitable layoffs:
The product managers, evangelists, community managers, and developer relations team members found out the news and the way it was communicated at almost the same exact time you did. They are wrestling with the news and your reaction in real time--so please be supportive of them as they dig through everything.
While on the 3rd day of my vacation in Mexico, I got the call with the explanation that Adobe is doing a major refocus and as part of that, many of us "enterprise" types are no longer required. "Überflussig" I guess is the correct German word for the situation. Keep in mind that I now speak as an individual, not as an Adobe employee. I missed most of the official story due to the timing of my vacation but caught up with a few news outlets to get the rationale.
But isn't Flash still going strong on desktop browsers, and the Flex SDK heading for great new things as an open source project at the Apache Foundation? Well, maybe. Adobe is not betting on that though; it is betting on design tools for content, HTML5, and packaging and distributing publications and apps. Its Flash technology is still critical to how that is done under the covers, but Flash itself will be invisible.
Adobe also says that its LiveCycle middleware will continue to evolve in two specific niches:
We will continue to sell and support our LiveCycle products in the government and financial services markets, two areas where the LiveCycle value proposition remains especially strong.
Again, maybe. This sounds more like Adobe keeping faith with some important customers, than a strong future for LiveCycle.
Microsoft announced another profound change in direction at its BUILD conference in September. Although related to the decline of Silverlight, this one deserves its own heading. What we saw was that the Win32 platform on which Microsoft has built its prosperity for the last twenty-one years or so (Windows 3.0 came out in 1990) is now being shunted aside. "Shunted aside" is the right term because it is still there in the forthcoming Windows 8, but it is side by side with the new Windows Runtime (WinRT) and a touch-friendly user interface called Metro. The company's goal is to create a platform that will succeed against Apple's iOS. It runs on ARM as well as Intel x86 and has its own Windows Marketplace, similar in concept to Apple's App Store.
Leaving aside the merits of WinRT, the big news here is that Microsoft is finally moving away from the Windows desktop on which most of us have done our work day to day for the last two decades. The reasons are obvious: mainly the rise of iOS and the iPad, but also the success of the Mac among developers and at the premium end of the laptop market. Windows was already in decline.
Your Win32 applications will work forever, but Microsoft's energy is now going elsewhere.
What about the .NET Framework on the client? It is still there, and thanks to the excellence of the C# language I expect it will be the most popular approach for coding for Metro. Parts of the Framework will no longer work in Metro though, and it may even be that HTML5 and JavaScript, which is equally well supported, will gradually supplant it. Nor do I take the success of Windows 8 for granted; Microsoft may find the tablet market already largely absorbed by iOS and Android.
That is speculation; but the long-term decline of Win32 is not.
If these platforms are in decline, what the ones that are rising fast? That is simple to answer. Apple iOS, Google Android, and HTML5 in general. Are these good for the next two decades as in Win32, or will be on the deprecated list in a few years? That is hard to say; if I had to rate them in order of likely longevity I would guess this:
1. HTML, JavaScript and CSS
2. Apple iOS
3. Google Android
Predictions though are a dangerous game, and I would be interested in other opinions.
I have posted before about Delphi, a rapid development tool forgotten by some, but still the best option for Windows native code development combined with a productive visual component library. That was over two years ago though, shortly after I met with Embarcadero CEO Wayne Williams who promised a version of Delphi that would compile for the Mac as well as Windows.
I had nearly given up waiting; but a couple of months back Embarcadero released a new Delphi with features which, on the surface at least, exceeded my expectations. Here are the highlights:
It is an amazing list of features, particularly considering the rather disappointing first version of Delphi XE. Embarcadero seemed to have done everything promised and more, in one release.
I was keen to try cross-compiling for the Mac, and set it up in what seems to be the most popular way, using a virtual machine on a Mac to run Windows, and running Delphi in the VM. When you install Delphi, or the full RAD Studio which includes C++ Builder and other features, it installs several components that you then run on the Mac side, including the FireMonkey libraries and a server calls the Platform Assistant. You then create a remote profile in Delphi that connects to the Platform Assistant, password protected for security.
Everything worked first try. I added an OS X target to my Windows FireMonkey app, clicked to run, and my simple app opened like magic as an OS X application on the Mac desktop.
Coding for iOS was more work, since you end up exporting the project to Xcode and compiling with the Free Pascal compiler rather than simply using Delphi on Windows, but it did run successfully, and I was able to use my simple test application on an iPhone.
Embarcadero is promising to add Android support at some future date, making this an interesting tool for those who need to support multiple platforms.
Is this the Delphi we have been waiting for? There are a few things that spoil the product. It does seem to have been rushed, which is hardly suprising when you realise that Embarcardero acquired VGScene and DXScene, products for Delphi that form the basis of FireMonkey, from a company called KSDev only around 6 months before RAD Studio XE2 was released. I am not sure what plans Embarcadero had for a cross-platform framework when I spoke to Williams in 2009, but does look like the KSDev deal solved a number of problems.
This rush shows itself in the immaturity of the FireMonkey framework. There are some performance issues as well as limited features compared to what was available with the VCL (Visual Component Library) for Windows. The VCL may be wedded to Windows, but it is hard to leave behind sixteen years of VCL evolution in favour of the first release of a new framework. Existing applications will not necessarily port easily. It is not only a matter of porting from the VCL to FireMonkey. Delphi developers are used to calling the Windows API when necessary, creating code that will not run cross-platform.
It is also worth noting that all FireMonkey controls are custom drawn. There are always compromises in cross-platform development, and in the case of FireMonkey you are giving up the advantages of using native controls on Windows or Mac.
As a cross-platform development tool, Delphi is now up against Adobe Flash Builder, Appcelerator Titanium, PhoneGap, and others. I have been impressed with Adobe AIR in this context, and PhoneGap also has lots of momentum and is ideal for web developers who now need to create mobile apps.
There is every sign though that Embarcadero is serious about FireMonkey and investing in its future. Existing Delphi developers now have a way to move beyond Windows while still using their preferred tool; and the product looks likely to attract new users thanks to its cross-platform capabilities.
Finally I should add that while it is the cross-platform aspect that is most eye-catching, the VCL is not dead and with 64-bit support Delphi is better than ever as a Windows development tool.
Microsoft's BUILD conference last week was a fascinating event. Of course the headline news was about Windows 8, for which we got the full technical details, or at least most of them, for the first time. There is also a public preview, and I tried out Windows 8 on a high-end Samsung tablet loaned for a few days, then again on a VirtualBox virtual machine after my return to the UK.
Windows 8 will no doubt arrive in a year or so, and we can debate whether it will be a storming success, a dismal failure, or something in between. I think it makes a great tablet operating system, but purely considered as a tablet, it will not be easy for Microsoft to break into the market dominated by Apple's iPad and with Android mopping up most of what remains. The purpose of BUILD was to encourage developers to build apps for the new Metro-style user interface, and if Microsoft can build up a decent range of apps with which to populate its new store, the early Windows 8 tablets will have more chance of success.
It is tempting though to think that this is mainly aimed at consumers, and the fact that the sample Metro apps are mostly games or other trivialities reinforces that impression. Does that mean Windows 8 is insignificant for businesses, or for business software developers?
I do not think so. In fact, the more I reflect on BUILD the more it seems to me a pivotal event not just for Microsoft, but for the IT industry. Here is my reasoning.
First, at BUILD Microsoft made it clear that Windows now has two personalities, built on different programming models and in fact different APIs. The old Windows, now referred to as "desktop", trundles on as before. There are few changes from Windows 7 in the preview build, other than that the Start menu switches you to the new Metro-style user interface, a controversial decision that may become user-configurable in the final release. Yes, Explorer now has a ribbon, the file copy dialog is improved, and I am sure that there will be more small and cosmetic changes to desktop Windows before final release, but they will be minor.
It seems to me that Microsoft itself has now re-positioned desktop Windows as a kind of legacy environment, even though it is the one that most of us are likely to use most of the time. Irrespective of whether Metro-style Windows is a success, the implications of this are huge. After all, Windows still dominates business computing. Yes, Microsoft will still invest in desktop Windows; but the strategy is focused on Metro-style and it is plausible that Microsoft will never now make radical changes or advances on the desktop side.
Second, Metro-style Windows 8 is not just a touch-friendly user interface. It is designed as a client for cloud services. This is most obvious when you realise that Microsoft has not included data providers for local network database servers like SQL Server; you are meant to interact with data via web services. Metro-style apps are isolated from one another, and can only communicate with the file system, outside their own isolated storage, via specified, user-controlled mechanisms called Contracts. Windows 8 shows that Microsoft really is embracing cloud computing, and that may be more significant than the fact that it runs nicely on tablets.
Third, and related, is that Microsoft is locking down Windows, especially in the version for ARM which we did not hear much about at BUILD. If Microsoft gets it right, Windows on an ARM tablet will be equally as secure as an Apple iPad. It is hard to be definitive about this, because the role of desktop Windows in the ARM build has yet to be clarified, but from what I can tell Microsoft plans Windows 8 on ARM as essentially a Metro-style platform, with apps available only through the new Windows Store. If users can only install Metro apps, the entry points for malware are greatly reduced. I suspect that Microsoft also has its eye on Apple-like control and profits from being the only source for Windows 8 apps, with interesting implications for software freedom, at least in the consumer market.
If there is a moment in history when desktop computing became legacy, I suspect BUILD 2011 will be a good candidate.
Finally, note that Microsoft's new Windows Runtime, within its locked-down constraints, looks to me exceptionally well done. Microsoft has achieved security, performance, and support for multiple programming languages including .NET, JavaScript and C/C++. One of its best decisions was to make every API call that might take more then 50ms into an asychronous call, and then to modify the programming languages to make asynchronous programming easier than it has ever been before, via new statements including the "await" keyword in C#.
The Windows desktop will be around forever, and in fact the stability of the platform in terms of forward compatibility has if anything improved, now that we know major changes are unlikely at least until Windows 9 in say 2015, and probably never.
More significant though is that the cloud computing model now has the backing of all the major industry players, even the one with what looks like the most to lose.
CEO Steve Ballmer called Windows 8 Microsoft's "riskiest product bet" and I am inclined to agree.
I have been looking at Microsoft's forthcoming SQL Server 2011, code-named Denali, for which the third preview has recently been released. There is plenty to say about Denali, which has many new business intelligence features as well as the intriguing ability to publish a table as a network share accessible from the file system, but I am particularly interested in the new developer tools, known as Project Juneau.
What is Project Juneau? Well, the old SQL Server Management Studio is being redone using the Visual Studio shell, but what is more interesting is the new SQL Server Database Project in the full Visual Studio, along with some new tools for working with databases.
Now at this point I have a confession to make. I have never given Visual Studio Database Projects the attention they deserve. Visual Studio 2008 instroduced a specific database edition, with a specific database project type. In Visual Studio 2010 this became a feature of the Premium and Ultimate editions. Juneau includes the next version of the database project type, now called a SQL Server Database Project.

Just in case others have also paid little attention to Visual Studio database projects, the core feature is the ability to treat databases as code.
How is a database code? It helps to break down what we typically mean by a "database":
1. The data itself.
2. The structure of the database: tables, column types, indexes.
3. Code embedded with the database structure and executed by the database manager, included stored procedures, triggers, user-defined functions.
Of these, it is only the third category that I had previously considered to be code. I was wrong though. The database schema is also code. Further, since the schema can be instantiated by running SQL create statements, you can conveniently represent a schema with that code. Execute the code, and you instantiate the database schema.
Once you start treating the database schema as code, new things become possible. You can do all the things that you usually do with code: put it under version control, refactor it, compare it with other versions, and so on.
This is what Juneau does. When you import a database into Junueau, it becomes a set of SQL create scripts.
This is also what the old Database Project does, so the concept is not new. Microsoft describes the Juneau tools as:
an evolution of the existing Visual Studio Database project type
which can be interpreted to mean that this is a new product which will eventually encompass everything the old product did and more, but that initially there are compromises: while there are new features, there are some other features mssing. Since Juneau is currently in preview it is impossible to be definitive about this yet.
Still, there is plenty of good stuff in Juneau. They follow through on another implication of treating the database as code, which is that you can debug it, by building a local version of the database. The Juneau tools do this, using a new local instance of SQL Server. When you publish the database to production, you have a bunch of options concerning how you want to handle the operation, given that there may be an existing database already present. There is always an option to generate script, rather than executing the operation immediately. The same is true if you change the schema of a connected database in Visual Studio's server explorer. The Juneau tools show all the implications of any change, including warning about data loss when necessary, and offer to generate a script rather than immediately applying the change.
Schema Compare is another useful feature. Imagine that you import am existing database into Visual Studio for application development. This takes three months; but in the meantime the admins have made some changes to the production database, maybe for security or performance reasons. If you have also added some tables and rows for the new application in your development version of the database, this can be awkward to reconcile. Schema Compare lets you see the differences easily.
A goal of the Juneau tools is to make it easy to migrate a database from one platform to another. Microsoft has in mind that some developers will be moving databases from on-premise servers to SQL Server Azure; but irrespective of whether you have cloud hosting in mind, this is a useful feature.
One of the reasons the old Database Projects are perhaps not as well known as they should be is that they are reserved for the high-end Visual Studio editions. I hope Microsoft makes the Juneau tools more widely available, because treating the database as code is a powerful idea, with benefits that should please the operations folk as well as developers.
There is intense interest in cloud computing today. But what about take up? I am interested here in the cloud as an application platform, not how many people are using Google Mail.
There is so much noise from vendors about cloud - noting that this is a nebulous and abused term - that it is easy to get the impression that most of us are busy migrating applications to shiny new cloud platforms, and that new projects will almost inevitably be cloud-based.
I spoke recently to Nick Hines, CTO of innovation at global software developer and consultancy ThoughtWorks. This is a company that has embraced Agile methodology and has always struck me as thoughtful and watchful in its approach to software development. It publishes a regular Technology Radar examining technical trends and assessing which are ready for mainstream adoption and which are in decline.
When I spoke to Hines I was researching application development on cloud platforms, and trying to discover how Microsoft's Azure effort was perceived in the real world. I suppose I expected that the company would have many cloud projects on the go and be well placed to assess the strengths and weaknesses of rival platforms.
The most revealing comment came at the end. After chatting about cloud and Azure for half an hour, I asked: could he put a figure on the proportion of ThoughtWorks projects that involve cloud hosting, not just for development, but for production deployment?
That would be relatively small. One to two percent at this point.
he told me. No more than two out of a hundred projects deployed to the cloud. Considering the level of vendor hype around not only Azure but also Amazon web services, Force.com from Salesforce.com, Google App Engine and so on, that is remarkably small.
I must be careful not to mis-represent Hines. He is of the view that not only is cloud significant as a platform, but that it will take over:
This is the way the world is going. We all know it. You can imagine that in 20 years time the idea that companies have their own datacentres is going to be quite anachronistic. How quickly we get there is yet to be seen.
We are then at an interesting point in terms of technology, where we think we can see the future in some respects, but there is a near-consensus in the enterprise development world that it is not yet ready.
Why is it not ready? This of course is a point of debate; but enterprises dislike uncertainty, and there is still uncertainty around cloud platforms. When you ask vendors about the big issues, security and resilience, the best they can do is to point to past performance or give you a speech about the efforts they have made in those areas. CIOs may worry about a nightmare scenario where the system is down and they have no direct control over how it will be fixed. This is responsibility without power; and no, being able to say "we have a service level agreement" is not a solution.
This is also why approaches to the cloud that allow flexibility are popular. Not all risks are equal. For example, you can use a cloud platform as a means of scaling an application at times of peak demand, while keeping the data and code on your own servers. This kind of approach does not yield all the benefits of multi-tenancy or platform as a service, but it means that in case of calamity you can easily deploy to a different platform. The idea of deploying virtual machines to the cloud, while keeping hold of the master image, is popular for the same reason. Hines told me:
People have a greater level of comfort with infrastructure as a service. Whilst it may not have all the advantages that platform as a service offers in terms of reduced administration and so forth, people are more comfortable feeling that they are closer to the tin.
This is the enterprise perspective of course. If you are a start-up or independent developer already accustomed to depending on third-party internet services, then cloud deployment feels less risky.
The consumer perspective is also relevant, despite what I said above concerning Google Mail. If as individuals we learn to trust cloud providers because of our experience with email or personal documents and pictures, then when we step into the business world we will be more inclined to approve a cloud deployment.
Concerning Microsoft Azure, Hines believes that Microsoft needs to prove its ability as a cloud provider, and that a success with the recently launched Office 365 could give Azure a boost, even though it is a different kind of service. It is the same kind of logic: if Microsoft can run Office 365 successfully, the comfort factor over Azure will increase. The reverse is also true.
There is always reason for caution; but it also seems to me that this is a moment of opportunity for those who take well-judged risks with cloud platforms. I would be interested to hear from both developers and CIOs about your perspective on this. Do you trust the cloud yet, and if not now, then when?
I attended Microsoft TechEd USA last month, where the news highlight was a bunch of new features in Visual Studio. Although Microsoft is not revealing what is coming for Windows 8 development, it has shown a bunch of new features ranging from code clone detection, which aims to find code that was copied and pasted rather than being properly refactored, to new IntelliTrace agents that are designed to find bugs after deployment, rather than just in code you are developing.
They are decent features, and it seems that the new Visual Studio will further extend what is already an impressive range of capabilities. I have spent a lot of time researching Visual Studio 2010, the current version, and considering the scope of the tool, from mobile devices to multi-tier enterprise applications, I hold it in high regard.
Talk to developers about what they want to see in Visual Studio though, and you can bet that neither code clone detection nor IntelliTrace agents will be on their list. They would rather Microsoft fixed annoyances rather than adding features which they might not ever use. Performance is always high on the list: not doing new things, so much as doing the same things faster. Quick access to documentation is another. If you are like me, you often end up searching Google rather than pressing F1, since somehow Google can search the entire internet faster than Visual Studio can summon its own documentation.
Why is Windows Vista considered a flop, whereas Windows 7 has flown off the shelves? I doubt it is to do with thumbnails in the taskbar, or even the Libraries feature, presenting multiple folders as one, a neat feature but often not well understood.
My guess is that better performance is the main reason, followed by hundreds of small usability improvements which Microsoft made. Windows 7 is not perfect, but it generally runs better than its predecessor.
There is always pressure to add features. If you are a software giant like Microsoft, there are marketing reasons; you need those bullet points to win upgrades, or think you do. If you are a corporate developer, there is constant pressure to meet new requirements.
The problem: it is too easy to lose sight of what users often care about more, which is the performance and usability of the applications and features they already use most often.
Somehow, at planning meetings it is hard to justify spending time on improving features that already exist, rather than creating new ones, yet for improving the productivity and even the happiness of users it is often the right thing to do.
I was interested to read Martin Fowler's piece on Cross Platform Mobile. Fowler is Chief Scientist at ThoughtWorks, which does software development and IT consultancy:
I think cross-platform mobile toolkits are a dead-end. It's just too hard for them to really mimic the native experience. If it's worth building a native app, it's worth building it properly, including an individual experience design for that platform.
I do not altogether agree, though he makes a good case and I accept that there are significant obstacles to success. I recommend his piece; all the issues he mentions are real and considerable.
On the other hand, I see it more in terms of acceptable compromises than a binary choice. An Aston Martin is better than a Ford, but a Ford will get me to work and costs less.
The question then becomes: how much compromise do you have to accept if you build a cross-platform mobile app?
Another issue: Fowler says web apps are a capable alternative route, but he adds:
When you do the web app, don't try to make it look and feel like a native app - make it look like a mobile web app
It sounds like good advice; but is there a UI standard for mobile web apps? I am also not sure what this advice means if you wrap a web app as a mobile app using a tool like PhoneGap. Even if you do not want to do this, it may be necessary in order to get access to more native features of the device. Should such an app aim to look more like a web app, or a native app, or is the whole idea a mistake?
Another tricky problem is that with multiple form factors, it is not clear when to apply mobile standards and when to apply desktop and laptop standards. An Apple iPad is a mobile device, but its screen resolution is 1024x768, which is pretty much a full size screen.
There is also a cost involved in not doing cross-platform development. If you only need to support, say, Apple iOS, then fine, get stuck into Xcode 4 and Objective C in the Apple-approved manner. If you need to support more than one platform though, the case is more difficult. Creating an "individual experience design" for each platform means that you have two code bases to maintain, and ensuring parity of features and fixing bugs in both become issues. Multiply the platforms, and it gets worse.
Adobe's Creative Suite is an interesting case. It works on both Mac and Windows, but the UI is more tilted towards consistency between the two versions, rather than looking native to each platform. Dreamweaver CS5.5, for example, looks nothing like a standard Windows application, with its buttons in the top frame of the main window.
However, I would rather have that, than what Microsoft has done with Office on Mac and Windows. The UI is different, the release cycle is different, the features are different, and in general I find it a better experience on Windows than on the Mac, whereas I am equally happy with Creative Suite on either platform.
My guess is that Adobe, with its own internal cross-platform tools, succeeds in sharing more code between the two than Microsoft manages, which is why it is able to deliver synchronised releases. It has tilted the balance towards consistency across platforms, rather than looking native, and that is a valid compromise.
That said, I have been conducting my own experiments with cross-platform toolkits and it is not going all that well. Each toolkit has involved compromises, even with a simple app, and performance has been an issue.
I can also see that the way navigation between difference screens in your app generally works is different on iOS than on Android. Which do you choose?
Cross-platform toolkits may not be desirable then; but they may be inevitable (like death and taxes) unless you have huge resources or are willing to lock-in to a single platform.
I also believe that performance issues will reduce as devices get more powerful, and that web technologies which are common between all the main mobile platforms form a runtime that goes a long way towards solving cross-platform issues.