Clint Simon

Evolve the product toward complexity

Managing a product is hard. Ideas come from all angles, many of them have merit and worst of all you don’t generally have enough direct feedback to make an informed decision about which ideas carry the most value. There is an inherit danger in committing resources toward too many features. Time is finite and the team is small. Picking the wrong features means potentially confusing users or failing to attract users in the first place.

  • Clint Simon

MongoDB .Net Driver date handling

I ran into an interesting situation when saving dated to MongoDB using the Mongo .Net driver (version 2.0). When saving a date with unspecified kind, the driver converts the date to a universal datetime. It appears that the driver will assume that a DateTime object with an unspecified kind is a local time, and convert it to universal time (UTC) before committing it to the database. In my particular case, my origin date was UTC and was read from SQL server.

Windows Phone

Getting started with Windows Phone 7 application development

Get ready to create your first Windows Phone 7 (WP7) application! With only minimum software development skills, you can create your very own shiny new WP7 app. Get the tools The first step is to go get the tools you’ll need to build your application. Microsoft has the best development tools in world (in my humble opinion). Since WP7 application development is an extension of general .NET platform development and Silverlight technology, you can use the standard .


Keyboard Manual Registry Settings

I have always had a sneaking suspicion that my keyboard repeat rate and repeat delay settings were a little too slow for my taste. Windows only lets to you increase the values in a fixed range but with a registry change, you can adjust as you please. Play around with AutoRepeatDelay and AutoRepeatRate, these are the settings that work for me. Don’t set the AutoRepeatDelay too fast, it will make it so that when you type letters they are repeated immediately.


What I look for in a Candidate

Must have Experience. Nothing trumps experience. The more times you are “at-bat”, the more lessons you learn. Particularly experience at progressively higher of levels responsibility is desirable. Challenging yourself is ultimately the only way to grow and learn. Technology aptitude. I don’t necessarily mean reciting minute technical details from memory. I mean understanding the underlying principles of technology. Abstraction, service oriented architecture, componentization, dependency injection, user experience design. Deep understand of these topics are what separates the great consultants from the rest.


PowerShell Sublime Text Shortcut

Lately I have been learning about Git and GitHub. Most of this work is done at the command line, I have found myself quickly amassing PowerShell functions that acts as shortcuts. One very handy shortcut is the ability to launch the sublime text editor and open the current directory as a project. Or alternately passing in a file to edit. Once this function is in your powershell profile, just type “edit” at the command prompt and sublime will open the current folder.


Keeping Up with Technology

Learning new technologies and techniques is a part of life for any software developer. Programming is a quest for knowledge and understanding which lasts your entire lifetime. No other profession has a more dynamic working environment. Tools change and evolve on a daily basis it seems. Learning is incumbent on all developers. Darwin’s law applies, adapt or perish. Luckily most of us are used to this environment and thrive on the constantly changing landscape.


Using IE10 with Dynamics CRM Online

It appears that Dynamics CRM Online does not play well with Internet Explorer 10. In fact, it downright does not work with IE10. Many of the web dialogs are unusable and when you receive an error, the error dialog exhibits bazaar behavior. This is an absolute tragedy. Windows 8 launched 3 weeks ago with IE10 included and the Dynamics product team was not prepared. The user experience on a windows 8 machine for Dynamics CRM is basically unusable.


Remember, Software is Soft

There are times when I have witness (and participated in) arguments about trade-offs between scope and effort. Sometimes developers tend to push back fairly hard with the perception is that the effort is too high for a particular feature change. Coders can become downright defensive when you are talking about changing the fundamentals of an application. After all, this is their baby and someone just through it out with the bathwater.


It doesn't matter what it is. Start Now.

It’s funny, I put off writing this post for over a week. That might make me a hypocrite but it doesn’t mean that the truth is less important. Procrastination is the enemy. If you want to get something done, start immediately and fail often. There are a million reasons not to start right away. Maybe you won’t be any good at it, or you have more important things to do. Maybe you are just plain scared of judgment from your peers.


Tech Interview Question: The Clock Problem

“The Clock Problem” is an interview question that I have been using for a few years. I first learned about it when I was being interviewed. I have now adopted it as my first line of defense against imposters. :) It’s a simple problem that can be used to determine a candidate’s capacity for analytical problem solving. The beauty is that the problem has a simple and elegant solution which can be found in less than 10 minutes.


Take Pride in Your Work

In my daily work, I lead teams that build software. These are “line of business” or “enterprise” software systems. I come into contact with a lot of developers, all with differing backgrounds, experience levels and personalities. I see the good and the bad. Pride generally stands out as the most accurate quality indicator of the individual developer. Having pride in your work makes you want to improve. If you are mindful of the effects that your work has on others, that can only lead to a better career path.


Link Roundup

Microsoft employees getting free Surface tablets, new work PCs, Windows Phone 8 Quite a company meeting this year. Intel researchers put WiFi inside - the processor, that is Makes sense. It’s fascinating that analog components in almost all mobile phones. Japan Commits to Eliminating Nuclear Power Remember when nuclear power was the future? Mother nature issued a veto. iOS 6 review Love these “just the facts” reviews. Will Science Someday Rule Out the Possibility of God?

Windows 8

Windows 8 Developer Messaging

Bit of a rant here. I received this message today Microsoft. Do you think the average developer knows that “Windows 8 GA” means? GA stands for “Generally Availability”. Put yourself in the position of the Microsoft marketer who composed this message. Why on Earth won’t you just write out the words instead of using the abbreviation? This doesn’t need to be a secret handshake. Granted, if you Google it on bing, you’ll get an answer fairly quickly.


Link Roundup

Windows 8: The Boldest, Biggest Redesign In Microsoft’s History Fast company with a mostly positive article on Windows 8. Refreshing. The iPhone 5 Is Completely Amazing and Utterly Boring I could not agree more. As Louis CK would say – Everything is amazing and nobody is happy. The power of ignoring mainstream news When I first started ignoring news, I felt that I was simply making an excuse, that if I had more time I should read the news.


Link Roundup

Never Forget The attacks resulted in the death of 2,996 people, including the 19 hijackers and 2,977 victims. The victims included 246 on the four planes (from which there were no survivors), 2,606 in New York City in the towers and on the ground, and 125 at the Pentagon. Nearly all of the victims were civilians; 55 military personnel were among those killed at the Pentagon. Sorry, Windows 8 Is Not Going to Save the PC Industry Another article bashing Windows 8 and the Microsoft strategy around it.


Link Roundup

My Favorite Features: Entity Framework Code First and ASP.NET Web API Great overview of the EF5 release with summary and coding samples. Jason Zander: New features in Entity Framework 5: Enum support is a long awaited feature for EF and allows you to have enum properties in your domain classes. EF5 makes enum support available in the EF Designer and Code First. Table-valued functions in an existing database can now be included in models that are created using the EF Designer.


Training People

Whether you know it or not, you are training everyone you interact with each day. When you answer that email at midnight or take that call at 8PM, you are sending a message. The message is that you work any time and you are willing to sacrifice your personal life for the job. In typical over-achiever fashion, you are reacting to each request without regard for your personal well-being. After following this pattern for years, I have realized that I need to stop the vicious cycle.

App Engine

The case of the 30 day memcache timeout on app engine

I ran into an interesting problem with Google app engine. It seems that the memcache time limit is enforced differently on the development server versus the production servers. The documentation says that the time limit for a memcache key is 30 days. The behavior that I have observed is that if you set a memcache key to timeout at 30 days, the development server (on windows) will happily persist the data as expected.


Should you be a platform developer?

Over the past few years I have seen many developers struggle with a growing dilemma, do I devote my time to platform development? When I say “platform development” I mean building application on products such as Microsoft SharePoint and Microsoft CRM. The IT world is rapidly moving toward standardizing on platforms such as these. They offer lower IT costs, standardized infrastructure and overall lower cost of ownership. It makes sense from a business perspective, but what do you do as a developer?

Personal Backup Strategy

There are a million and one ways to backup files from your hard drive. For me, the most important things are making sure that the files that cannot be replaced are safe. Rather than opt for a relatively complicated system image based backup system such as Windows Home Server or a automated file copy utility such SugarSync, I instead prefer good old fashioned Robocopy and physical DVD media. This might sound archaic in the age of cloud computing but I have found it to be the best way to ensure that I will not lose the most important files and have the least amount of headaches.


How to add your last tweet to your blog

I thought it would be nice to see my last tweet on my blog. It turns out that there is an easy way to do this using jquery and the twitter api. These instructions may not work for you if your blogging platform does not allow embedded JavaScript ( does not). To get the tweets for any user in JSON format you can visit Where username is the twitter username.

App Engine

Google's new App Engine pricing

Google App engine is in the process of changing it’s pricing model. At present this new pricing model goes into effect on December 1, 2011. There has been quite an uproar among App engine developers. In some cases the new billing model raises monthly costs by more than 300%. This has cause quite a reaction among the community and the backlash is very real What is changing? The primary change is that Google is moving from a model where you are charged by CPU time to a model where you are charged by “instance time”.


5 things you should do when estimating a technology project

Estimating a project can be one of the hardest things you do as a technology consultant. Over the years I have done my share of estimation and one thing has become clear to me. Estimation accurately is almost impossible. With lots of experience and some hard knocks, you can accumulate the courage necessary to throw down an estimate. Here’s a few tips that I think might help. Ask a lot of questions.


Code is Creative

Most people think of programmers as the guys guzzling mountain dew in a dark room where pizza slides under the door at around 6PM and a feature is built by 2AM. Although this is can be the case (we’ve all been there), I have found that most of the people that I look up to are not at all like this. More often than not people who have influenced me over the years are people that show a genuine passion for software but also have massive creative energy and a social team mentality to boot.


Using the SharePoint content database as a cache

Data caching is a core concept in the web dominated world that we live in. The premise is that we should not have to go back to retrieve data from a data store for every single web request when the data is unchanged, thereby sharing data across web requests. This offers huge performance advantages because all latency related to data fetching, query processing and transmission is eliminated for requests that use the same data.


Customize the web.config with a SharePoint XML customization

It is possible to manipulate the web.config file globally by using a little known feature in SharePoint that allows developers to describe a set of changes by using an XML customization file. In fact, both SharePoint and MOSS use this mechanism to publish web.config changes when a web application is created. Create the customization file The customization file is used by SharePoint to apply changes to the web.config file when a web application is created.


Anonymous access and item level permissions

You are probably familiar with the fact that SharePoint now has the capability to host site with anonymous access turned on. I learned the hard way that item level permissions do not participate in the anonymous access behavior the way you might expect. When an item does not inherit permissions, it is not possible to enable anonymous access on that item. Note the document library permission settings menu: Here’s the same menu for an item which is not inheriting permissions from the parent library:


Custom Field control implemented as a User Control

When creating custom controls it is often must easier to create a control using the “User Control” development model instead of the “Server Control” model. Server controls generally have a more “low level” feel and dictate that the developer build the control’s rendering from scratch. Either by building a control tree or by constructing the rendered output in code. Alternatively user controls have nice separation of code and presentation by virtue of having a markup file (.


SharePoint Custom Application Development Methodologies

As SharePoint becomes more prevalent in the custom application development realm, there has been some friction and malcontent expressed in relation to deployment processes, team development methods and application upgrade paths. I believe that Microsoft has fallen short on providing the tools necessary to promote and support custom application development on the SharePoint platform. In my opinion, the SharePoint platform should not limit nor impede my ability as a custom application developer to deliver solutions that follow the same deployment principals as any other custom asp.