Aug 232012

I am a big fan of using NuGet for managing dependencies between different .NET projects. Lately I’ve been focusing on using it for managing internal dependencies within an organization. Most organizations end up with some shared code that is used across multiple applications: logging, security, database access, common domain models, etc. A great way to handle this shared code is to publish it as an internal NuGet package, and then point all of the consuming applications at that package. Additionally, TeamCity can be used to ensure that new packages are created automatically whenever the shared code is updated, and those packages are instantly made available to consumers.

This setup works great, but it can be confusing as there are a lot of moving parts. One of the most confusing parts is the amount of different version / build numbers you end up juggling. This post explains how to configure everything so that the same version number is used in every piece across the entire process. Continue reading »

Aug 222012

I started working for a new company a few weeks ago, and I have been spending a lot of time just getting used to the new portfolio and all of the new techniques and conventions in use there.

One of the things I wasn’t used to is the heavy use of stored procedures that act as custom getter methods within the DAL layer of the .NET applications. The DAL is code generated and the codegen templates automatically know to transform those sprocs into getters on the generated entity manager. So if I have a Customer table, and a sproc in the database called sp_Customer_SearchByName, the codegen process will automatically create a Customer entity, along with a CustomerManager that has a SearchByName method on it, which takes the same inputs as the sproc and returns a collection of Customers.

One of the things I’m looking at is whether Entity Framework makes sense for this portfolio, and I wasn’t sure how EF would handle this type of situation. After pleading ignorance, I was told the magic keyword that I needed: Function Imports! Continue reading »

Jul 122012

I have had occasion in the past few years to participate in several different teams that were cutting their teeth on agile and Scrum for the first time. One thing that always seems to trip people up when they are first learning about agile is the concept of a “Story Point”. In this article I’m going to attempt to add some clarity to what story points are, what they aren’t, and how they should be used in agile project. Continue reading »

May 242012

NOTE: I have since solved this problem with a Ninject module that makes things much simpler. Check out this post for details.

This post describes a pattern I came up with for providing logging in an application is a very elegant way, with consumers of loggers able to use loggers that are injected via property injection. But, at test time if the logger is null, a NullReferenceException is prevented so that tests can be executed without having to provide a mocked logging interface.
Continue reading »

Apr 092012

Admiral Adama: In your opinion, off the record, what was Garner’s flaw?
Major Lee Adama: He was used to working with machines. Command is about people.
- Battlestar Galactica Episode “The Captain’s Hand”

A couple weeks ago I found that Netflix was providing every episode of the Battlestar Galactica series online. While I was watching it (and enjoying it thoroughly I might add), the above quote stuck with me. The quote refers to an episode in which an engineer is promoted to commander of a ship, and his command turns out to be quick and unsuccessful. The quote got me thinking about being an architect, and how often people promoted from the ranks of programmers into architects have the same problem. Sure, architecture requires a good understanding of technology, but understanding people can be much more crucial. Continue reading »

Mar 312012

I’ve often been asked to define what a software architect does. We do many different things, and the job description varies quite a bit among different companies, and across different sub-disciplines such as infrastructure architect or application architect. But the best definition I’ve come up with for what a software architect does is this: we balance the different quality attributes of a system so that they are best aligned to delivering business value for our organization. In this post I will talk about what quality attributes are and how they are employed when architecting a system.

Continue reading »

Mar 252012

I decided to spend some time this afternoon getting started with Microsoft’s Azure cloud service. Since I have an MSDN Subscription, I am allowed a certain amount of usage for free, and I figured I should check it out. I started by logging into my MSDN Subscription, clicking on My Account, and then clicking on Activate under the Azure section. I was greeting by this less-than-helpful message tell me “The offer is not available”. Continue reading »

Mar 242012

In December 2011, Microsoft released version 5 of their Silverlight platform. With that release, they filled in all of the remaining gaps and made Silverlight an excellent platform for internal line-of-business applications. It provides web-based deployment, COM integration, support for in- and out-of-browser modes, and all that using C# and XAML. What could be better for the thousands of run-of-the-mill data entry applications that are written everyday inside large corporations?

And yet developers are afraid to use Silverlight. Most devs I talk to think it is somewhere between dead and dying. Microsoft abandoned it, didn’t they? Aren’t you supposed to use HTML5 now? There is some truth to this, but plenty of confusion as well. In this post I’m going to update my position on Silverlight since I last wrote about it, and attempt to give developers a more clear direction on when it still makes sense to use Silverlight, and what it will mean for your career to invest your time in learning it.

Continue reading »