Inflection Research

September 3, 2008

Google’s Browser, a Realistic Perspective

Filed under: Architecture,Investing,Programming,Technology,Web Platform — semanticzen @ 2:08 am

From the blogesphere to the traditional news media everyone seems ecstatic about Google’s new browser, Chrome. Some are even proclaiming that it will overtake Windows and be the next major operating system. When so many smart people fall over themselves to hype a product still in development I tend to try to view things from the other side. For the Chrome browser there are a lot of important questions that no one seems to be asking. Like what special capabilities is Google bringing to the crowded browser market?

Open Standards

Everyone is proclaiming how great this will be that we will have an open source browser. The thing is, there is already a great open source browser; Mozilla’s Firefox. It is debatable how much is gained from open sourcing the browser’s code. What is important is, how will this browser support open standards? Since so many websites were not initially implemented to fully support the W3C Standards (the international organization that defines the internet’s standards) will Chrome be able to correctly render 99% of websites, as claimed, while also fully supporting open standards?

Innovator’s Dilemma

Balancing support for innovation and new standards with support for legacy applications and standards is a monumental task that should not be taken lightly. Legacy support is what gives Microsoft Windows its monopoly, but it also acts as a yoke on innovation. Microsoft has a better operating system than Vista; they just cannot figure out how to roll it out.

Microsoft’s Internet Explorer is in a similar boat. It has been estimated that over 50% of IE’s code base is error handling and “seamless” handling of poorly written website code. This code was very useful in the late 1990s and early 2000s when nascent programmers were still figuring out how to write relatively static web applications. Now that web applications are much more dynamic this code bloat is a performance drag affecting many of the more complex Web 2.0 style applications.

In a classical example of an innovator’s dilemma Microsoft invented the key technology behind Web 2.0 applications, but IE is still a laggard due to the legacy yolk. A key factor of Firefox’s success, and its dramatically better performance, is they took the time to clean up their legacy code base. IE 8 is making steps towards better support for W3C Standards and better
performance while supporting a migration path for enterprises. In many respects following how Microsoft balances these objectives is more important than following Chrome’s progress. Although I imagine the press will instead follow Chrome’s progress.

Where is the Innovation

What new, innovative features does this Google browser have? So far it appears they have just implemented functionality currently in the existing browsers. As for new functionality like video we already have platforms like Flash and Silverlight that are pretty good and improving.

Mozilla’s recently released Firefox 3.0 has a much better optimized JavaScript engine and IE 8 will as well. So far Chrome’s JavaScript engine appears to only be 13% faster than Firefox 3.0. Users do not notice 13% improvements. When Chrome goes live it will probably also be competing with IE 8.0 and IE 8′s performance improvement.

Overtaking Microsoft

Internet Explorer (IE) is a relatively crappy browser that has easily over 50% market share. As some claim, this isn’t solely because most people can assume a user has IE. It is because many websites still work better in IE; and many, probably most, of these websites are inside firewalls. Applications built for only a few hundred users or less.

The key to overtaking Microsoft’s browser isn’t to build a cooler browser. Apple, Mozilla, and Opera have done that. The key to overtaking IE is to making a compelling ROI argument to enterprises to abandon IE for a different primary browser.

Enterprise Strategy

Unless Apple makes a big push into the enterprise or Red Hat consolidates the many Linux splinters Microsoft’s desktop dominance will probably last another decade; even with corporations not upgrading to Vista. On a side note it would be interesting if Apple purchased Sun, spun-off its hardware business (while it still has some value), and made a big push into the enterprise. Thin clients offer an alternative, but Windows and its partner Citrix are currently positioned relatively well. However, that is for another article. So for now browser makers are still playing in Microsoft’s playground.

For the majority of websites it is not cost effective to build and test the website in multiple browsers. Project teams focus on one or two core browsers and make a best effort for the others. This is especially true for corporations building websites only intended for a limited number of users. As a result many corporations choose the browser with

  • The largest market share.
  • The one they have built applications on for years.
  • The one they know how best to manage. For support reasons companies need to manage how and when core software upgrades are presented to users.

Active Directory

At any large or mid-size company any internal website can know who you are (and probably does) if you are using Internet Explorer because of its tight integration with Active Directory. This allows easy implementation for single sign-on across company or even inter-companies’ web applications. To gain critical enterprise adoption the existing browsers need better support for Active Directory and how to manage it.

Offensive or Defensive

Few people have mentioned that Chrome may actually be a defensive move by Google to protect their search engine turf. I regularly use iGoogle and Google Maps, but I haven’t actually gone to Google.com to perform a search in at least a year. I perform all my searching in the browser. Of course, I primarily use Google, but I find myself using other website’s like Wikipedia, Ask, and Dictionary.com more often; and my switching costs are basically nil. In fact, I’ve even started using Live Maps because of its far better international support (Live vs. Google).

Five years ago I remember wondering why someone would use a search engine other than Google because it was at least twice as good as competitors. While completely subjective I think Google is now only marginally better. I have a dozen search engines configured in my browsers and I’m always one click away from not using Google. Now I wonder why people are so reliant on Google. It is getting easier to use other search engines and Google is growing up and becoming a little
closer to being evil.

Laissez-Faire Mess

Google is well renowned for encouraging engineers to spend 20% of their time pursuing individual projects. This has created a great environment where ideas bubble up. However, some initiatives require top down strategy. Creating a browser platform serving a multi-sided market is such an initiative.

Fortune called Google’s management style a “laissez-faire mess“. The questionable strategy and rollout of the Google browser may validate that endorsement. In fact, one could go so far as to say that Google’s laissez-faire strategy resembles one of its competitor’s peanut butter strategy.

Google still has yet to prove that massive hiring into a laissez-faire environment can fuel innovation. In fact Apple, perhaps the most innovative company this decade, takes the opposite approach by keeping its core design teams small and focused. I am still questioning the special capabilities of Google’s Android and now we have Chrome. For comparison, I can critique specific features of the iPhone, such as the battery (which Apple will eventually fix like they did with the iPod), but the special capabilities of the iPhone are crystal clear to any observer.

Current Market State

As an advantage of losing Browser World War I Mozilla was able to free itself of its legacy code and become the performance leader; just as Web 2.0 applications began taking off. Microsoft finally seems motivated to accelerate many legacy applications migration path allowing it to offer better support for standards and increased performance. Although it is apparent that IE 8.0′s performance will still trail Firefox 3. Safari will be relegated to the smaller yet growing Apple user base with little enterprise support. Opera is a good browser that doesn’t offer a compelling enough reason to switch (sounds similar to Google’s Chrome).

Currently Firefox has a real chance to become the number one browser in Europe, but its market share (and growing importance) may be hurt by the splintering browser market due to Safari and now Chrome.

So What Has Changed

I’ll download Chrome and test it out, but I’m not excited to build a new website and have to test it in an additional browser. That is the problem that Google has to address. Not just for the hundreds of thousands of websites on the internet, but especially for the hundreds of thousands of web sites not on the internet (at least not without a username and password).

If Chrome was built by someone other than Google we probably wouldn’t be hearing about it. I am excited that one day enterprises will be building websites on a browser much better than IE 7, but that will take a vendor who understands enterprises and has a relevant platform strategy. I haven’t heard such a strategy from Google. For the near future it is most likely that vendor will be Microsoft and now less likely to be Mozilla. I imagine the IE and Firefox teams will wake up tomorrow looking over their shoulder at each other not Chrome.

Chrome’s biggest impact may be a weakening of Google’s support of Firefox. Google has been the biggest sponsor for Firefox. If this support (technical or financial) diminishes due to Chrome than the biggest beneficiary of Chrome may indeed by Microsoft. Let’s hope not. The browser market needs a strong number two to compel the market leader to innovate. However, the internet will not benefit from a splintered browser market requiring programmers to support numerous browsers. Like any platform market, the browser market will trend toward a monopoly or duopoly market. Let’s hope it’s a duopoly.

So What Is Next

Maybe Google will announce tight integration for Chrome with Android or some amazing new Semantic Web style feature. However, I’ll bet the next major disruptive innovation in this area will come from Apple or one of the new companies created by ex-Googlers.

Disclaimer: I own no stock in Google, Microsoft, or Apple.

May 18, 2008

Interviewing Programmers (part 2)

Filed under: Architecture,Programming,Web Platform — Tags: , , , , , , , , , , — semanticzen @ 10:25 pm

In the last post I outlined our criteria for evaluating programmers and architects, and how surprisingly difficult it is to find good candidates. Since the telecom and .com bubble burst in 2000 it appears many top notch people are choosing non-IT career paths. Below I outline the base set of questions that we ask in an interview. We cater interviews individually for each candidate so we can best understand their ability. While we are trying to fill a specific position we have a large enough IT staff to modify positions around candidate’s talents.

Also, if you ask the same question over and over again recruiters pick up on that and prepare candidates for specific questions. So we only use the below list as a reference point. Most of the questions we ask are not on the list below, but they may be related. When listening to the candidate it is not good to be thinking of the next question. We alleviate this by having two architects in every face-to-face interview which is based more on problem solving / case study style questions than do you know / can you explain style questions. In the one-on-one phone screens we do this list is helpful as a reference point to sharpen our focus on listening.

As a company focused on building web applications using Microsoft’s .Net / SQL Server platform are questions of course are focused on those domain areas.

Why be an Architect or Programmer?

  1. Do you understand what the position is that you are interviewing for? Or what type of position are you looking for?
  2. What about this position do you find most appealing and what if anything concerns you?
  3. Right now what would be your ideal job?
  4. What are your strengths and weaknesses?

Communication

  1. When a co-worker is wrong about a work issue, what is the best way to discuss the issue with him or her?
  2. Describe a decision you made that was unpopular and how you handled implementing it?
  3. Tell me about a situation where you worked effectively under pressure?
  4. What makes someone a good programmer?

Technical Questions

  • We often ask the candidate what technology the feel most comfortable with and start with that technology or ask them to walk through a brief overview of their recent experience and begin with a technology the indicated they have used extensively
  • If the interviewee gets stuck on a question we often ask them how they would go about figuring this out (what steps would you take?).

All Programmers

  1. Describe the difference between a thread and a process? Process vs AppDomain?
  2. What is a Windows Service and how does its lifecycle differ from a “standard” EXE?
  3. How many processes can listen on a single TCP/IP port and why?

Component Development

COM

  1. What is the purpose of COM? Why was it needed and what problems did it solve?
  2. Describe the .Net architecture?
  3. What does regasm do? Difference between regsvr32?
  4. What is DCOM? How do you create a DCOM object in VB6? How do you create a DCOM object in .Net?
  5. Explain Object Context.
  6. What are types of compatibility are available in VB6?
  7. Does VB6 support multiple inheritance? What about .Net?

.Net Framework

  1. Explain the use of virtual, sealed, override, and abstract
  2. How does the garbage collector in the .NET CLR manage object lifetime? What is the difference between Finalize() and Dispose()?
  3. How does impersonation work?
  4. What is the difference between
    1. Delegates and events?
    2. Class and structure?
    3. Protected and internal
    4. Shadowing and override
    5. ArrayList and Hashtable
    6. Optimistic and pessimistic locking
  5. How do you enable and disable connection pooling?
  6. How do you implement Database Transaction Coordinator in .Net?
  7. Describe an example where you used
    1. A struct?
    2. Overloaded a constructor?
    3. Overloaded a method?

ASP.Net Development

High-level

  1. What ways can you get HTML content from a website at runtime?
  2. What happens when an ASPX page is requested from a browser? What about ASMX?
  3. How do you measure performance of an ASP.Net application?
  4. What code should be placed in the code behind? What should not?
  5. What different ways can you test an ASP.Net application?
  6. What are some of the best ways to optimize an ASP.Net application
  7. What is the MVC pattern?
  8. When should you use a web service and when should you use the GAC?
  9. Provide an example of a custom HttpHandler and a .Net implementation of an HttpHandler?
  10. Benefits and limitations of: Viewstate, Query Strings, Cookies, Hidden fields

Web Services & JavaScript

  1. In JavaScript how do you use xmlhttp posts?
  2. How do we do asynchronous processing using Ajax?
  3. What are the benefits and limitations of Ajax?
  4. How pass parameters to a web service from JavaScript?
  5. Explain what the Scriptmanager control does in Ajax?
  6. What is JSON? How does it compare to XML (advantages and disadvantages?)
  7. What is the difference between XML Web Services using ASMX and .NET Remoting using SOAP? What is the difference between ASMX and WCF?
  8. How do you expose a web service to 3rd party companies?
  9. What are the steps to consume a web service exposed over the internet by another company?
  10. How do you secure a web service?

Events

  1. What are events? Do they have return types?
  2. How do you connect multiple events to a single event handler in ASP.NET web pages?
  3. How do you determine which web server control raised an event?
  4. How do you dynamically bind event handlers at run-time in ASP.NET web pages?

SQL Server Development

  1. Explain normalization? What type of normalization is best for what type of application?
  2. What is fill factor?
  3. What are the different transaction levels?
  4. What are the different types of locks? What is lock escalation? What are some of the locking hints?
  5. How do you determine when to add or remove a non-clustered index?
  6. How do you optimize a stored procedure?
  7. When have you used a temporary table in a stored procedure?
  8. If I execute an insert statement on a table with a trigger on it and the trigger fails, what happens to my insert statement?
  9. Provide an example of when you would decide to write a user defined function in T-SQL?
  10. Describe a good time to use a WHILE loop.
  11. Describe a good level of normalization in a transactional database.
    1. We are looking for an explanation, not an answer like “3rd normal form” and clarify the question if necessary
  12. Can you describe a time when you needed to use a transaction?

Other

Here we let the candidate pick from the below choices and ask a few questions in that domain.

  1. SQL Reporting Services
  2. BizTalk
  3. SharePoint
  4. LDAP or Active Directory
  5. Windows Script Host & PowerShell

Architecture

  1. What new technology have you learned or used recently that allowed you to solve problems easier or differently?
  2. Good architecture is necessary to give programs enough structure to be able to grow large without collapsing into a puddle of confusion. What are some of the key tenets of application design?
  3. Describe {interviewer selects from choices below} architecture, when is it useful, and why? Or have the candidate critique one of these types of architecture.
    1. Event Driven
    2. Object Oriented
    3. Services Oriented
  4. What is the difference between SOA and OO?
  5. What are the most important aspects of object oriented programming?
  6. What technology are you most interested in?
    1. What are you doing with it?
    2. What problems will it help better solve
  7. What is scaffolding
  8. What is object-relational mapping
  9. What code should not be placed inside an object?
  10. What is the difference between a framework, an application, a platform, , and a service?
  11. What is UML? What are advantages of using UML?
    1. How many types of diagrams are there in UML?
    2. What is the sequence of UML diagrams in a project?
    3. Give a brief explanation of all the Elements in activity diagrams?
    4. Describe the various components in a sequence diagram?
    5. Explain the different elements of a Use Case?
  12. Why are design patterns useful? What are the three categories of design patterns?

Case Study Questions

TBD, we typically craft these shortly before the interview; often based on recent challenges we have solved

  1. It isn’t necessarily critical that they find the optimal solution, it is critical that they
    1. Show good listening skills
    2. Ask good follow-up questions
    3. Demonstrate good problem solving skills

Problem Solving

  1. Describe one of the most difficult problems you have had to solve and how you solved it?
    1. Looking back how would you handle it now?
  2. What steps do perform when learning a new technology? What was the last technology you learned (and why)?
  3. Determine if is a quick thinker –> ask a couple off the wall questions

Motivation

  1. What are you going to do over the next 6 months to make yourself a better programmer?
    1. Is their answer quantifiable / measurable?
    2. Some example answers: read good code (find how?), read books, follow blog(s), contribute to open source project, etc
  2. Give an example of a goal you reached and tell me how you achieved it?
  3. What is it that most motivates you?
  4. What accomplishment are you most proud of?
  5. Why did you leave your last job?
  6. What are you looking for at this point in your career and why?
  7. Where do you see yourself in five years?

Blog at WordPress.com.