Tuesday, November 06, 2007

Bill Clinton

Bill Clinton dropped by Microsoft for a talk this past Friday as he was in town for a book signing (his new book Giving) and some conference. (see article). There are a lot of fun and interesting things that go on a Microsoft many of which involve important figures of our time so when I saw that Clinton would be on campus I jumped at the opportunity to see him speak.


Microsoft just finished the giving campaign where there is a push to give to charitable organizations to which Microsoft matches the donation. This year MS employees gave over $72M, and Bill Clinton came to essentially say thank you and talk about the importance of giving. One of the key messages that he had was that technology and the internet were key eneablers in allowing many of the people in the US to give. One interesting statistic he quoted was in regards to the recent tsunami where the US gave some huge amount of money to the people impacted by it, and that the median gift was somewhere around $60 and said that these smaller gifts by that many people wouldn't be possible without technology.
Clinton took a few questions from the audience of employees including one about what makes a good leader. His response to this (which I will not do justice), was essentially that a great leader understands the times that they are in and how the world around them impacts them and their decisions and the people that they are responsible for and also understands how the future will impact those decisions and people.
It was really interesting to get to see someone like Clinton come and talk in a relatively small setting like this. I feel honored and lucky to have been able to be a part of this and am excited to work at a company that can bring speakers like this to campus.

Tuesday, October 30, 2007

The cat is out of the bag

It's been pretty fun being part of a project that gets so much public attention at such an early stage of the product cycle. Rumors and leaks about what we've been working on have been circling in the IT press and the blogosphere for awhile now, but we are just now publically letting the cat out of the bag.

At this week's Microsoft SOA and Business Process conference here on the Redmond campus of Microsoft, the Connected Systems Division has announced their new product roadmaps in the SOA and BP areas. This was primarily an announcement of the overall product that I have been working on since I started at Microsoft, a product code names Oslo. I won't attempt to give an overview of the product, and there's still plenty that we aren't able to talk about, but the overall vision is to "Significantly simplify the effort required to design, build, deploy and manage distributed applications within and across organizations." We want to provide the platform and tools to make this simple for organizations of any size, and dramatically increase the productivity and agility of both business and IT. In short, we want developers to be able to build these kinds of applications with one-tenth the code that is required today. And we want to establish a rich context for that developer to interact with Business Analysts and IT Professionals in an easy way.

Here are a number of articles that are making there way into the press and blogosphere about it:

Friday, October 26, 2007

Frameworks for Software + Services

Designing database driven applications is something that many of us have been doing for a long time. It is the bread and butter for those of us who have been building software for the web. Whether it's web applications accessing data or frameworks built to allow those applications to more easily manage their database interactions or server products that live as intermediaries between application logic and back end services. I had really begun to think that this was all figured out all read and that the patterns for this were essentially part of the software industry DNA now. There is, however an interesting facet to this that I've discovered at Microsoft: that is products built from the ground up for the desktop, and essentially single user based applications that are now being migrated to the MS vision of Software + Services.

Many of these applications have multiple versions of built in assumptions about being the sole owner of the data that they work on and they are now having to deal with a multi user access metaphor for their data. Just the simple fact of migrating this data from the local filesystem to a central database type of setup presents challenge to these apps in scalability and performance not to mention the many transactional considerations that now need to be taken into consideration. Many of these application have historically brought the data they use into local memory and then used in memory query and sorting methods to do what they needed in order to display that data to the user. We find that these applications can fall down quickly when migrated to the remote data store scenario in the areas of data consistency and performance of query across the potentially much larger data sets.

The data consistency problem is a well known problem that has many well documented patterns to solve it. Jim Gray's book Transaction Processing goes into infinite detail on the subject and many patterns within Martin Fowler's book Patterns of Enterprise Application Architecture cover the topic as well. When moving software forward that was single user in scope previously the issue simply requires concerted thought on applying these patterns and re-working pieces of code that make single user assumptions.

Performance tends to end up being a larger issue for us on these types of conversions. Not simply because of the larger data sets that a shared data store might entail, but also because many of the typical ways that a single user application might address performance cause the above mentioned consistency issues when we move into a shared data environment. If I have an application that has an embedded SQL database to store its data in for a single user, I have the ability to use the built in optimizations of the database directly and I can just maintain a full database lock for my application. Once I move that application to use a central database I need to be much more cognizant of the transactions and locking that I am doing. One way to address this is to begin to do more in (application) memory querying, but I lose many of those optimizations that the database vendors have spent years tuning and trying to implement those types of optimizations at an application framework level is very difficult. It is possible to fold the queries back to the database to take advantage of the optimizations, this is a typical approach we see. This is tending to work most of the time, but it is not without it's own set of issues.

There are many additional issues that we run into, all of which are easy to solve on a one off basis for each application. The important (and more difficult) thing is to solve them at a framework level so that all applications get the solutions for free. Building these types of solutions into frameworks and tools becomes an essential part of increasing the speed at which we can migate to this new vision.

Thursday, September 20, 2007

Composite Applications

I've been catching up on some overdue reading this week and got a chance to dig into the MS Architecture Journal issue on composite applications. There is a particularly interesting article that gives a good, broad overview of composite applications and talks about how many of the Microsoft products are supporting the notion of composite applications. The article talks about layers of composition and describes some of the key areas of concern for this type of development. Of interest to me were the layers of Service Composition and End-to-End Composition.

Service Composition is about the ability to compose an application out of existing services by stitching them together via a composition language or tool. This is the relatively typical sample scenario that you see out there for most of the existing tools that attempt to support SOA composition. They allow me to bring in a WSDL from some external source and then utilize that service in an application like an activity in a workflow that I can create in the tool. These type of interactions are relatively simplistic and require some amount of overhead and forgone acceptance of a SOA architecture.

End-To-End Composition is really a superset of Service Composition. This space is a lot more interesting to businesses because this allows them to take a holistic view of their business processes and how they fit into an appliction and how they run in production environments. The ultimate goal here is to allow business type users to be able to visualize their entire system through a composition type of tool and then make modifications to the processes and redeploy portions of their application as well as to have real time views into the running of transactions through their system as a whole. When a business user is able to see what is happening across the set of disparate systems that their business process spans and be able to quickly make modifications to it to streamline processes or inject new steps then they begin to see the power of end to end composition of systems. They can then couple this with tools such as system management and monitoring, data center virtualization, automated provisioning of systems and begin to have real power to manage their businesses. All very cool things.

Friday, June 08, 2007

New Mouse

It's hard to understand why we get so excited by the little, mundane things that happen to us, but today is a giddy day for me. Our admin in my group ordered me a new mouse and it arrived today. I have 4 or 5 wireless mice for the different computers I have, and I wonder how we managed having these things connected to wires. Well today I have moved one step further into the future with my new Microsoft Notebook Presenter Mouse 8000. This thing even comes with a carrying case and a little tassle attached to the case so I can be sure not to lose it. On the bottome side it has a number of presentation related buttons incuding one to activate the built in laser pointer! It's pretty slick looking. Now if I can only just find some batteries to get it to work....

Presenter Mouse 8000

Thursday, March 22, 2007

Interesting article considering my post last night. http://www.internetnews.com/security/article.php/3667201

It is especially interesting that Sun Solaris was rated lowest in the security review in this article and all Sun did was try to find fault with the study. Sun has traditionally been very proud of the security in Solaris, it seems that pride is waning. (Maybe that is because the CEO is more interested in being able to blog for SEC reports than putting out good products...) Sorry for the anti-sun retoric lately...

Wednesday, March 21, 2007

Security

I've been reading the book Writing Secure Code by Michael Howard and David LeBlanc (both I believe from Microsoft). Today I was able to spend my morning in a MS training course taught by Michael Howard, I think it was titled Security Basics or something like that. It is apparently a required course for all technical positions at MS. It was actually pretty good, and exposed me to a lot of the security world that I had not been involved in previously. I know a lot of my past co-workers when they hear me talk about Security at Microsoft, I too had the same impression of MS as being at the bottom of the security barrel. But one thing that I am realizing after 6 weeks of working here is that the years of pain and issues that MS has endured over security have woken them up to this issue and it is one that they are taking very seriously now. There seems to be an air of importance around the whole issue, one that flatly did not exist at Sun when I was working there. Sun has a much better reputation in this area, but I have always wondered if it wasn't more that they have not been as much of a target as MS has historically been. Being a target likely makes it so that more vulnerabilities are discovered than in products not being targeted, but hopefully eventually leads to more secure products (which it seems may be happening). One has to wonder if other products are really more secure or the vulerabilities just have not yet been exposed. I don't know...

Anyhow, this book (Writing Secure Code) follows a well defined process, the MS Security Development Lifecycle, and layes out a lot of fundamental steps to analyzing security for products. These are things that I wish I had known on some of my past projects, but just did not have the information. It goes through designing secure software, threat modelling, secure coding guidelines, minimizing attack surface, and testing techniques (like fuzz testing, penetration testing, etc.). The book then dives deeply into code looking into common, well known issues like buffer overruns, ACL's, least privilege, handling input data and a lot more. One interesting thing that we got in the course was to look at the code from Windows and other MS products that were the cause of many of the most well known security vulnerabilities like different worms as other such things. All in all, the book is a fantastic guide that I should have read years ago, and one that I highly recommend to anyone involved in software.

Monday, March 05, 2007

New Wheels

Well it was bound to happen, my long time friend finally died last week. My Subaru legacy kicked the bucket at almost 250,000 miles. I could probably get it fixed, but it just isn't worth it anymore so I've decided to make a bit of a change. So this weekend I went out and picked myself up a new set of wheels. That's right, I'll be commuting on my bike for awhile. It's something I've done on a very infrequent basis, but have always wanted to do more often. So I figured this was the perfect opportunity to force myself to begin a regular bicycle commuting program for myself. I am not going to get a new car for a few months to get myself used to the ride in. Right now my ride is about 6 miles and takes me about 30 minutes (yes I'm a bit out of biking shape). Microsoft has a nice locker room with showers and lockers so that works out well. I have a full set of rain gear so I should stay nice and dry even in the wet Seattle weather.

Wednesday, February 28, 2007

Today I attended my first test design review with the group I am in. What a welcome change this was! At Microsoft (at least in my group), there is about a 1-1 mapping of Development Engineers to Test Engineers. As specs are completed designs are started for both the implementation of the software as well as for how that software will be tested. Both teams get together to review each others designs to ensure that things are aligned. Seems simple and the way that it should be done.

It's amazing to me because this is the first software job I've been in where I didn't have to go beg, grovel and fight for resources to help test the software that our teams were building. Management at my past employers always saw test as a one of those things that was a buffer in the schedule and it was always staffed in a way that reflected that. Here there are very senior engineers working in test and some really smart people at that.

Monday, February 26, 2007

Well, I'm alive and kicking. I started my 4th week of working at Microsoft this week as a Program Manager in the Connected Tools Division. I haven't read the entire legal document on what I can and cannot blog about so I will keep this short for now. Things are going well. I've been getting to know the team and starting to see some areas where I will be able to contribute and even some places where my experience in the anti-MS world can play a big part. Things are starting to pick up for me as well. This is a relief as things have been pretty slow for quite awhile now. In July of 2006 Sun announced a layoff that would hit our group (CNS) pretty hard. Things pretty much came to a halt there until August when it hit. Then things were all up in the air about what we would be doing, this lasted until the end of September when my wife and I took off for Hawaii for 6 weeks. When I got back, my team was sort of going on a project with some direction. The holidays came and slowed things down a bit, and when we returned from Christmas break I gave my notice. I was given a couple of unexpected weeks off and ended up with a whole month off in between jobs. Things are always a bit slow when you start a new job, there is the ramp up time that seems like so much is happening, but it is all just learning and you don't get involved a whole lot, except to do your ramp up time. But I am just hitting that point where traction seems to take place and I am excited to be back working hard again.

I'm excited about the group that I am in. It really reminds me of my early days at Sun when I was working with a lot of people that I felt were much smarter than I was. There is a lot of opportunity to learn a lot of cool stuff. We're also working on some really interesting new technology that is exciting to be a part of. One of the things that drew me to MS the most was thier ability to deliver software (you may n0t like it or think it is worth delivering, but they do deliver and then continue to deliver subsequent releases). I've been in a lot of software companies in different positions but none of those places had much of a track record for delivering. So I look forward to seeing what makes this work, what makes MS be able to churn out software like they do....

Although I am getting tremendous amounts of crap from all of my friends and past co-workers about taking this job with the "evil empire" and keep getting told that I am "drinking the kool-aid", I am actually enjoying myself and am actually starting to be able to use some of these products that I loathed for so many years. There is an amazing culture here at MS that was woefully lacking at Sun. There is non-stop technical discussion, people are excited about what they are working on, people are excited about technology, and people are excited about the company that they work for. That is a breath of fresh air from the last few years....

That's all for now.

Tuesday, January 09, 2007

Best Companies to Work for

Every year Fortune Magazine comes out with a list of the 100 best companies to work for. I've worked at a couple of companies that have made this list in the past, Sun Microsystems & EDS (neither of who have made the list recently). And I would have to agree that Sun does not belong on that list anymore. The cost of benefits keeps increasing for the employer and the job satisfaction I've had has steadily decreased lately. Sun does have a great telecommuting program, although it may hurt many groups more than it benefits them. Well this year with my changing jobs to go work for Microsoft (# 50 on this years list), I am once again part of a company that made the list. I'm not sure that it matters a whole lot, but there is some mental happiness in the fact that someone else thinks that where I work is a good place to work. In the stats for Microsoft, they are given high accolades for their top notch benefits, especially paying 100% of health care benefits (This is a big deal as I have a new baby). I also found it interesting that they hired 5203 people last year, and received 947,250 applications for employment, so only 0.5% of applicants get a job there. That apparently does not include people, like myself, who did not apply for a job, but were recruited directly by Microsoft. Anyhow, nothing too interesting, but it is somewhat satisfying to be somewhere where other people want to be as well.

Friday, January 05, 2007

New Job Part 2

So another common question people ask me is how I got a job at Microsoft. This is a completely valid question as I have no experience with any of their products. I program in Java and J2EE, I use Eclipse and NetBeans as my dev environment, I run Linux primarily and also Solaris as my operating systems, I use Thunderbird and Firefox, I contribute to opensource projects, I have an Ipod and a Wii (not really), and I've been getting anti-Microsoft propoganda from Scott McNealy for the last 10 years of my career. So why then am I going to work at Microsoft and why then would Microsoft be at all interested in hiring me in the first place?

I'll start with why I took this job. For me one of the most important things in my job, the thing that I get a lot of job satisfaction from, is the ability to be constantly learning. I also really enjoy being challenged to the point where I feel "in over my head". This new job provides me with huge opportunities on both of these fronts. I will be learning a new product as well as a complete new technology stack. And the challenges that are ahead of me seem certain to stretch me in a whole host of new directions. In addition to this, I really just needed a change. My job at Sun was looking like more of the same thing that we have been doing, with little to no clear direction, and no clear idea of the business value that our work would provide as well as not having much more than a plan 2 months out. The group I am going to may not be perfect but they seem to understand their value and their long term plans for what is being developed. That excites me a lot about the potential. I was offered another job internally at Sun, but just felt like it was not really a change as I would be working on so many of the things that I have been in the past. Much of what I do at Sun revolves around service based applications, whereas at Microsoft I will be getting back into product development. This is a whole and complete change for me.

But why would Microsoft be interested in someone who doesn't know their technology at all? Well that was exactly my question to everyone I interviewed with, starting with the recruiter who found my resume on some job board (Dice or LinkedIn I think, I never did apply to Microsoft directly). The answer I kept getting back is that they were very interested in my experience architecting and designing platform layer frameworks that were highly reusable, and also they were interested in my strong background in architecture as it pertained to building systemic qualities into the products. They then said that the technology was easy to learn and a good designer/architect would pick that up quickly. I guess that was a good enough answer for me, because I enjoy the architecture and design pieces of my job the most, and actually think I am relatively good at them. I also agree that picking up a new programming language and some underlying technology is relatively easy. Especially in going from Java to C# which are pretty similar languages.

All in all, I think that this job is a good fit for me. I spent a lot of time interviewing over the past year looking for the perfect job. I turned a number of things down because they just didn't seem to be a fit for where I wanted to take my career. So although this is a completely new world to me, I feel like it is probably the best possible fit for me at this point in my career and offers me the highest potential growth personally and professionally.

New Job

So the most common question I get from my co-workers and friends when I tell them I have quit Sun Microsystems and am moving to Seattle to take a job with Microsoft, is "what were you thinking?" Besides that everyone wants to know what I will be doing in my new job, so I thought I'd address that here once and for all. First, I am not 100% clear on the product I will be working on as it is a relatively new product that is still being defined to some extent. But I have accepted a job as a Sr. Technical Program Manager in the Connected Systems Group, which, as I understand it, is a part of the Server and Tools division at Microsoft.

The program manager position [link1][link2] at Microsoft is one of three technical positions (SDE and SDET are the other two). I will be responsible for the vision, architecture, design, requirements, customer interaction, and evangelism of the product that we are building out. It involves coordinating across many teams at Microsoft, working with customers to get feedback and push the product, and working on developing the detailed technical direction and driving the implementation of the products. This type of position was really appealing to me as it is similar to what I have been doing at Sun Microsystems as a Product Architect, but it gives me a lot more responsibility and a lot more latitude in how I do my work. In addition I get to work much more closely with customers, something that I was "sheltered" from at Sun. I still get to remain as an individual contributor and still get to be very hands on with the technical details of things, but won't be writing a lot of code for the product, although I will get to prototype stuff. I get to work with the management team, the engineering teams, the test teams, the architects, and the project managers. I get to work with teams outside of my product group and outside of the division, both engineering groups and non-engineering groups.

While it seems pretty clear what the PM role is, I have less of an idea what the product we are actually developing is.... From what I gathered during my interviews, the product that I will be responsible for is aiming to provide a framework that sits on top of the different infrastructure products that Microsoft has (BizTalk, WWF, WCF, etc.). A large part of this framework allows developers to easily create applications on top of these products using a declarative language similar to XUL from Mozilla. It sounds pretty interesting. The immediate goal of the product is to release internally to the other product groups within Microsoft. Many of the applications that the infrastrucutre products will provide to their users would likely be built with this, there are some things within the Office suite that would utilize this framework, and possibly even some things in the operating systems that would use it as well. Once the framework has been integrated into internal products and we've gotten it really stable and strong, we will be releasing it as a public api, possibly as part of the .Net framework. This is where some of the external customer interaction of the position comes in. So that is about all I know about it. I do know that it sounds really interesting though and has a lot of potential. The initial product vision is something that came out of Microsoft Research and a couple of the lead engineers on the project moved into this group from the Research group to continue working on this product.

So there it is, what I know about what I will be doing at Microsoft.

Robotics and Software

There is an interesting article in this month's Scientific American about robots, by Bill Gates. It mostly talks about the need to have some standard, underlying frameworks and common building blocks in the software space for robotics to really take off. Of course Microsoft is getting into this in a big way. One interesting idea that was in the article is the notion of using the robot as only a mechanism for remote sensory and then using networking technologies to send the sensory input back to a more powerful computer for processing (Gates says your desktop, I'm sure it could likely be a server farm as well). Sounds like Gates may finally be coming aroung to McNealy's mantra of "the network is the computer". Anyway, MS has put out a robotics software toolkit called Microsoft Robotics Studio that looks pretty interesting. It apparently works with Lego Mindstorms too, so it should be accessible to the hobbyist like myself. The coolest thing about this studio is that it has a full virtual testing environment built in so you don't actually even need a hardware robot to build something, you write your robotics code and then test it out in the virtual environment. If you have the hardware you could then upload your program to it.

Wednesday, January 03, 2007

Well I gave my resignation today....




Dear Dave:

After serious consideration, I have made the decision to resign my position as Staff Engineer with Sun Microsystems. My decision is final and I have accepted employment with a new organization.

I have enjoyed working on the Service Tags project under your guidance and look back on this experience with favorable memories. My new opportunity offers me a combination of challenge, dynamic growth, improved compensation, and geographic location that fits perfectly into my career plans for the future.

My last date of employment will be Jan. 19, 2007. Rest assured that I intend to close out my service with SysNet with the same vigor and energy that I have shown thus far.

Thank you for all of the courtesies extended to me during my employment.

Sincerely,

Mike Davis