Category Archives: Microsoft

My 45 Days With Win Phone 7, and the Move Back to iPhone

A while back, I bought a Windows Phone 7, specifically an HTC 7 Surround. I bought it used via ebay (for under $150), so as to not have it count as my contract subsidized phone. It was not an unlocked phone, and I was able to switch my SIM card from my main phone (an iPhone 4) to the WP7 without problems.

I bought the phone in order to have a chance to do some Windows Phone 7 development. As a developer with Silverlight experience, it’s a pretty easy transition to make. Sure, the dev toolset has a simulator, but I wanted to try out some apps and have my hands on the real thing. Plus, it serves as a nice backup phone, and it makes a nice portable gaming distraction (with achievements). Even without swapping the SIM card, you can use email, online apps, as long as wifi is available.

Soon after the purchase, my wife’s iPhone 3gs broke. At this point, we knew a new Apple phone was coming soon, so I gave my new iPhone 4 to my wife, and used the WP7, waiting for the new phone. She knows I do a lot more “technical stuff” with a phone, and was fine with taking the 4 and letting me getting the new revision when it released (I used her upgrade for the 4s). Yes, for a tech guy, that’s a great way for a wife to show love. All I had to do was holdout for about 45 days with a WP7.

I kind of looked forward to it, thinking it would be a chance to get a feel for just how good the platform was. For the record, this was the version of the OS just before Mango. Mango released the week I got my iPhone 4s.

So what did I think?

What’s Good?

It was a very usable phone. Contact management is nice on Windows Phone. All LinkedIn, Facebook, and regular contacts are merged (including Twitter in Mango). From that persons page, you can contact them via any of those methods. And rather than a favorites person list, you can pin them to your homepage, allowing very quick access to your favorite contacts.

The basics are covered in terms of apps. Social sites, games, utilities. And they are cheap and often free. The store is closer to Apple’s than the wild west that is Android, so that’s good.

The phone itself had pretty good battery life, nice sound, and I liked the kickstand. That line has been discontinued, and I’m not sure why. Maybe HTC wanted some new Mango specific features and needed a redesign. Regardless, it was a fine phone.

You only have one page to customize, but it’s completely customizable. And the second page is essentially a list of every app on your phone. It was a different way to organize than iOS, but I found it very usable.

Those front page tiles (as of Mango) can show you various news and status updates. For example, the weather app shows the current temperature on it’s icon, and contacts show their latest social status. iOS could use this feature, though I suspect it’s icons are too small to provide useful data.

Zune pass is nice. Spotify is taking a bite out of this market, but I did a month trial of the Zune pass, and I could listen to anything I wanted that was on the store. A few gaps, but in general the marketplace has a lot of songs. Zune recently added some new pricing structures to compete with Spotify.

Cost… If you’re due for an upgrade, you can get a nice WP7 phone for free. And I think the free options for WP7 are higher end phones that the free versions of Android phones. And the only free iPhone is the 3gs, which is fairly dates at this point.

What’s Bad?

The depth of the marketplace just isn’t there compared to the App Store. This is understandable because of how new the marketplace is, but with such a low marketshare, I’m not sure it will ever catch up. Developers are monetizing on the App Store, and Microsoft and Google can’t make that case as well.

Mango changed this, but when I used the phone, it was one app at a time. That’s hard to go back to. Especially when Apps seem to take a while to initialize.

Phone manufacturers can brand some parts of the phone, and even have their own sub-pieces of the marketplace. There was an HTC Apps shortcut on my phone, that took me to specific versions of apps like Youtube, etc. I assume this is so they can optimize the experience for their phone, but it fractures the app stats, and makes integration with other apps harder. It’s a step in the Android direction, and I don’t think that’s a smart direction. (Why does it matter if app stats are off like popularity? When I’m looking for popular apps on a new phone, I would expect things like youtube to be at the top. But if youtube has 6 private label versions, it gets pushed down the list.)

Finally, there’s just a certain je ne sais quoi to the iPhone, that WP7 doesn’t have. Yes, that’s completely subjective, and a lot of it is based on personal experience. But this is a blog, and I’m telling you about my personal experience with the phone.

The Fine Print…

I bought a used phone, with some mild wear and tear. I have had 3 iPhones, all brand new purchases. That adds to the experience.

I’m invested in the iTunes store in terms of music and apps. I never really commited to WP7 and the Zune marketplace that way.

I should have spent more time seeing if there was cool integration options with my XBox. That kind of stuff sells me on a product.

Summary

WP7 is a nice platform. If I were banned from Apple products tomorrow, I would have to think long and hard about WP7 vs Android. I think WP7 is better (than Android), my only hesitation is that phones are about apps and integration, and both of those things suffer when marketshare is low.

Maybe the best way to describe the difference is by saying what I like best about iPhone. Despite being closed and proprietary, it doesn’t feel commercialized, because Apple is the only hardware maker, there isn’t hardware advertising and private labelling. Those things detract from the experience, and Apple is all about design and experience. Combine that with content, and you have a winner.

Apple brings huge headstart in content, and that’s hard to overcome. Just look at Windows vs OS X. There are virtual machines and compatablity layers, but at the end of the day, users had years of content and applications that ran on Windows, that they weren’t ready to give up on. As cloud based services and web-based applications take over, we’ve seen that the Windows market erode a bit. And eventually, that may be the case for phones and tablets too, but we’re not there yet. Apps still matter.

That’s why I think Microsoft’s Windows 8 strategy is smart. The more they can move developers to HTML 5 and Javascript, the easier it is to develop cross platform for mobile and tablet platforms. The WP7 and Windows 8 marketplaces can merge, and leech off HTML 5 developers that are targeting the higher marketshare platforms. If there is minimal overhead to developing cross platform, then WP7 will get a number of apps that is disproportionate to it’s marketshare.

I’m happy to have the WP7 around for development purposes. And would recommend it to users who don’t like the iPhone and aren’t invested in App Store already. Particularly if they are gamers with live accounts. But it isn’t a primary platform for me.

On a Feeling of Ownership, and How it Changes With Size

Through the years, a fair amount of my projects have been with small companies and startups. One thing I notice almost universally, is that members of smaller teams tend to have hunger for success, and a real feeling of ownership over their product. They take personal pride and consider themselves invested in the project.

That tends to change as the team size grows, for better and worse. On one hand, relying on “heroes” can be a dangerous thing, and people need to learn to pace themselves out. So a maturing and growing team can be a step in the right direction. On the other hand, it’s hard to see that desire for success and personal sense of pride in a product die off.

Everyone who has seen a big struggling project knows that feeling. “The wheels of bureaucracy are turning, and all I can do is what the product owner has asked of my piece. Suggesting improvements is just going to cause argument. And besides, why stick my neck out and risk being listed as one of the causes for project failure?” Also, there is a big difference between the amount of responsibility you feel when you are part of a successful team of 10, compared to a successful team of 100 or more. And projects of that size face unrealistic expectations and rarely feel successful.

How do you change this?

Maybe you don’t. I was once part of a startup, the 3rd man in. There was the founder (with a marketing background), a designer / developer, and I joined to help with the the rest of developing. The feeling of pressure and control that we all had on that project is something I’ve almost never felt on larger teams.

However, there’s no need to throw in the proverbial towel. There are techniques to strike a balance. Agile methodologies usually push for smaller teams and more distributed responsibility. And products can be broken into smaller pieces using a module or a SOA approach. (Yes, putting SOA into an agile approach is a challenge, and possibly a contradiction).

In the context of your business and its goals, you have to find the balance. All aspects of the business can be controlled and dictated from the top, but your subordinates aren’t going to innovate and grow organically, and they are only going to work extra hours if you force them. For a mature business with stable returns, that model probably fits. But in industries that face a lot of change and require innovation, you probably need to risk the destabilization of delegating out large amounts of responsibility to small teams. You will have less consistent results, but they will hit some homeruns.

I think Microsoft has seen this in recent years. It’s a common complaint that the teams don’t coordinate and share information there, but they have developed some interesting products. Their having been more surprises than there were under the old centralized management of the Gates’ days. Look at products like ASP.Net MVC, Win Phone 7, Windows 8, WebMatrix and Azure. Not the most integrated products, and some are not commercially successful yet (WP7), but they were more surprising and interesting than a lot of prior products.

The real outlier is Apple. Steve Jobs flew in the face of everything I just described. He notoriously kept the decision making power to himself, yet left Apple workers with a feeling of investment and devotion to the company. Even the customers feel invested. I can’t imagine a Windows sticker on the car of a person whose pay isn’t from or closely related to Microsoft, but I see a lot of cars with apple stickers in the back window.

So as a business grows, you can either try to keep the teams small and empower them to feel invested, or find the next Steve Jobs. Best of luck if you chose the former. Sometimes growth is the mistake. There are industries (like service / partner type models) where growth can risk lowering the profit share per owner / partner / investor. See Managing the Professional Service Firm for more on that risk.

What do you think? What has your experience been? Comment below.

New Questions the Build Conference Causes

Build answered a lot of questions for developers who wondered about the future of the Microsoft platform. WinRT is the new API for “Metro ” applications, which are streamlined enable both tablet and pc inputs. These applications can be built in .Net or native C++ using XAML, or in JavaScript with Html5. The traditional desktop interface is still available and it still runs all sorts of full .Net and Win32 applications.

But I’m left with a lot of new questions…

Silverlight is dead but not dead

Silverlight is alive on the desktop version of Windows 8. And it’s easily ported to Metro. But it seems like a big deal to me that the Metro version of IE won’t support Silverlight and Flash.

XNA is dead but not dead

XNA is not supported for Metro games. Given there is no XBox touch screen, maybe the point is that the input libraries could never be made compatible with Metro. Still, that seems like a big deal. C++/DirectX works on the desktop, on metro, and for the 360.

There is no legacy layer for ARM, but is there a Desktop mode

Will the desktop mode even run for ARM? It’s known x86 binaries won’t run on ARM, but will the desktop be recompiled for ARM? Because if not, then all the non-metro supported paradigms (Silverlight, XNA, WPF & more) can’t be recompiled to run on the ARM version. If you have an ARM tablet, you can’t use a flash site or silverlight site. Even if docked. The iPad has that restriction, but keep in mind the iPad was never marketed as a tablet / dock-able laptop like these new Windows 8 machines are. In other words, are desktop applications now “fat binaries”? Which leads too…

You can write Windows desktop applications in almost any language, what about Metro apps?

Did they also just close the door on people who write in Java, Python, Ruby etc? There are windows bindings or even portable UI toolkits (think GTK+) that run on Windows and enable a variety of developers of other languages to write Windows apps. Are they now only able to write desktop mode apps for consumers who have x86 based machines? Or will Microsoft help foster a community of bindings to WinRT for a variety of languages.

Speaking of, anyone notice that F# was not on that diagram as an option for metro apps? They didn’t say .Net, they said C# and VB.Net.

There was a lot of exciting news, and it’s generally a good direction. But they definitely shook up the developer community and didn’t answer everything. What do you think?

On Outsourcing, Protectionism and Education

Things are often more complicated than they seem. Certainly in the worlds of economics and nationalism. It’s no wonder that as the largest economy in the world, America wants to protect that place and Americans are sensitive to any efforts to move jobs elsewhere. Certainly that is true today, with unemployment currently at 9.1%.

In my own field of software development, the concern is that jobs will go to markets in Asia, like China and India. Chad Fowler’s first edition of The Passionate Programmer was even titled My Job Went to India: 52 Ways to Save Your Job. And at first, it seemed strange that this would happen in software. After all, when all the manufacturing jobs started leaving the country, the prevailing argument behind those who accepted this, was that the labor force would be retrained for higher tech jobs, and ultimately a higher potential wage. So how could it happen that the new jobs start getting outsourced?

I’ve followed Dr. Michio Kaku since I read his book Physics of the Impossible, and he has some interesting ideas around this:

Well, is he right? Based on what I observe, I would say he is. When jobs were leaving the auto industry, there was already downward pressure on the wages (signalling low demand). But software developers make a lot of money. It’s not unheard of for developers without a college degree to make 6 figure salaries, even in Midwestern states. By the way, I’m not equating a college degree with skill, but it’s a fact that when demand and supply are near an equilibrium in mature fields, a degree is usually expected. For example, accounting work was not always done by those with a college degree or certifications, but now that is a normal expectation. So I would say that when there are software developers with little to no formal education past the age of 18 making more than some attorneys and doctors with 8+ years of school (and associated student loans), that software development is a field in high demand, and it sounds like Dr. Kaku is right.

There are areas of development that are more prone to offshoring than others. Consulting style services for large corporations have a higher communication threshold and so cultural barriers and communications barriers can be an issue. So these jobs are not typically easy to outsource. However, small projects, and product creation and maintenance (ISV work) is a little easier to move.

So what does all this mean? What if we did try to protect those jobs? Short term, Software Developers would be happy. Supply would plummet and the demand for the best talent would help salaries skyrocket. But Dr. Kaku is right, it would do severe damage economically. Take the regular IT work of companies, and software / web startups, and double the cost. So much work would not be done, because the ROI would no longer justify the increased cost.

To me, the real way to help keep Americans employed is the fix education. If technology is a high demand industry with a lot of promise, why not supply as many educated Americans as we can do fill those jobs. Dr. Kaku seems to be suggesting that. And if you think that’s a soft sounding idealistic answer to the question, consider who else is making the same point to Congress. Not too many people accuse Bill Gates of being a hippie.

I recently watched Waiting for Superman. It’s full of opinion and outright bias, but there are some really clear points that are hard to argue with. In particular, I thought it made an excellent point about schools being designed in an era when the bottom 50% of students went into manufacturing & agriculture, with the next 30% or so headed into non-degree jobs (office administration, clerical, low-level business, sales), and the top 10-20% going to college for professional jobs (law, medicine). According to those requirements, schools aren’t doing that bad, but that reality isn’t true anymore. College is necessary for many more career paths. Producing those same ratios without manufacturing and agriculture simply floods the service sector. It’s why pay is so low in restaurants and call centers.

To support a higher standard of living, our education system has to support technology and innovation. Technology can be taught, but innovation is harder. I think innovation takes 2 parts technology, 1 part business-savy, 1 part liberal arts, and some God-given natural talent (think Steve Jobs). What do you think?

Safely Using an Insecure SA Development Account

As a consultant, I’m sometimes a part of projects that do things I wouldn’t choose to do. Welcome to the real world, right? For example, on one project I worked on in the past, the connection string for an asp.net project used the “sa” account for sql server. Further, it was in the web.config file and that file was checked into source control. First, I’m not a big fan of connection strings in source control, and have already posted on an easier way. If nothing else, use “Integrated Security=SSPI” in the connection string, and then each developer uses his local windows account to assign permissions.

But I’m a consultant on this project, and I can’t dictate that change. Fine. So I just lived with it for a while. But it bothered me that anyone on the project, or ever on that project, was walking around with the same sa password, and the password policy file unchecked. Until I came up with a simple solution.

Rename sa, and put the password policy back in place. And then create a new user called sa, that only has the necessary privileges on that database. If you don’t have need of your sa account for other reasons, you could just reduce the permissions in this case. But I still wanted a sql login that had permissions to administrate the database. Usually, you would do that kind of management from a domain account, but I don’t run a domain since I’m in so many different locations, and I might need to manage remotely, hence a sql login.

Anyway, here are the steps:

1. Rename the sa user:

alter login sa with name = mynewsystemaccount

2. Restart your sql server

3. Choose a new password for sa, and check the policy is enforced. I did this with management studio, but you can use t-sql if you prefer:

alter login mynewsystemaccount with password='some strong new password here', 
      check_policy = on, check_expiration = off;

4. Create a new sa user with the previously insecure password, and only grant them the necessary permissions on the database for that development application.

“sa” is still an insecure account, and any other developer can run any command they want on that development database, but they can’t administrate your whole server. There are plenty of other ways to solve this, if you have an interesting one, post in the comments below.