30. March 2017 11:10
by Troy

Technology Conference Update

30. March 2017 11:10 by Troy | 0 Comments

A long while back, I created a list of technical conferences that might be of interest to those working with the Microsoft stack.  Since then, a lot has changed.  Microsoft has shuttered some conferences and adjusted others either in name or in definition.  My career path has opened up somewhat to include some other areas of development as well, not limited to strictly a Microsoft stack anymore.  I recently found myself doing some research to identify some of the options available for conferences these days and I figured it would be a good opportunity to gather the results of that research together into this list so it is all in one place.

Name Description Duration When Where Link
QCon New York 18 editorial tracks across 3 days, 140+ practitioner speakers from places like Uber, Google, Dropbox, Slack, Twitter, and more…, 11 to 1 attendee to speaker ratio 3 days + 2 days workshop Jun 26 - 28 New York https://qconnewyork.com/
QCon San Francisco 18 editorial tracks across 3 days, 140+ practitioner speakers from places like Uber, Google, Dropbox, Slack, Twitter, and more…, 11 to 1 attendee to speaker ratio 3 days + 2 day workshops Nov 13 - 15 San Francisco https://qconsf.com/
Advanced Distributed Systems Design course on modern architecture design practices for distributed systems with Service-Oriented Architecture that will change the way you think about designing software systems 5 days various Dallas, Los Angeles https://particular.net/adsd
goto; conference GOTO Chicago is about learning, networking and meeting the best in our communities 2 days May 1 - 2 Chicago https://gotochgo.com/
FITC Web Unleashed front end dev focus 2 days + 1 day workshop Sept 25 - 26 Toronto http://fitc.ca/event/webu17/
Anglebrackets Anglebrackets brings together open source collaborators on Angular, HTML 5, ASP.net, bootstrap, Node.js and more 4 days May 21 - 24 Orlando https://anglebrackets.org/#!/
aws re:Invent AWS re:Invent is designed to bring together AWS users of all skill levels to connect, engage, and learn more about AWS. 5 days Nov 27 - Dec 1 Las Vegas https://reinvent.awsevents.com/
Dev Connections 5 tech tracks 4 days Oct 23 - 26 San Francisco http://www.devconnections.com/dc17/Public/enter.aspx
MS Ignite very MS product focused 5 days Sept 25 - 29 Orlando https://ignite.microsoft.com/
DeveloperWeek DeveloperWeek 2017 is the world’s largest developer expo and conference series with over 50 week-long events including the DeveloperWeek 2017 Conference & Expo (8,000 attendees) 3 days + 2 day hackathon Feb 11 - 15 San Francisco http://www.developerweek.com/
Agile Alliance Tech Here we focus on the doing, the building, and the creating 3 days Apr 19 - 21 Boston https://www.agilealliance.org/agile-alliance-technical-conference-2017/
Dockercon DockerCon is the community and container industry conference for makers and operators of next generation distributed apps built with containers. 3 days Apr 17 - 20 Austin http://2017.dockercon.com
ForwardJS Javascript focus with events in San Francisco and Ottawa 2 days + 8 days workshops July 26 - 27 San Francisco https://forwardjs.com/
DEV Intersection Microsoft tech focus with events twice a year, providing sessions on what is new with product releases. 7 conferences in 1, co-located with AngleBrackets. 4 days + workshops May 21 - 24 Orlando https://www.devintersection.com/
DEV Intersection Microsoft tech focus with events twice a year, providing sessions on what is new with product releases. 7 conferences in 1, co-located with AngleBrackets. 4 days + workshops Oct 30 - Nov 2 Las Vegas https://www.devintersection.com/


Personally, I've been to a few of these in the past and I'll mention a few quick impressions:

QCon San Francisco

A great conference, lots of skilled presenters representing some of the largest, well known companies.  Smaller than some of the Microsoft conferences, but that provides a more intimate feel and can make it easier to connect with people.

FITC Web Unleashed

This is a good conference because it is one of the few I can attend in my area, helping to reduce travel costs.  The speakers have been getting better each year, offering a mix of local talent and some heavy hitters from afar.  Relatively small in size, the opportunity to network and socialize with peers is great.  The sessions are relatively short (~45 mins) meaning you don't get seriously in depth into any one topic.  You do get a quick overview that can be good to get you caught up on what is happening in the industry and provide lots of takeaways for later research and tinkering.

Advanced Distributed Systems Design

Ok, this is not so much a conference, as it is a week long, intensive training course.  I attended in 2010 and I highly recommend this course.  It will challenge the way you think about software development and help to rethink and redefine many of the 'best practices' that you may have gotten used to.  This was a real eye opener for me and I am very glad that I attended.  The instructor, Udi Dahan, is an extremely effective teacher and while he is the author of NServiceBus and the founder of Particular Software, there is a lot of great knowledge to be gained from this that is technology agnostic.  If you work in the .NET stack and could benefit from trying NServiceBus, then even better, but I think the course could still be quite valuable to non-Microsofties as well.


30. January 2013 02:44
by Troy

Office Space vs. The Programmer

30. January 2013 02:44 by Troy | 1 Comments

The office is a place to get work done.  Why then, do so many complain they can't get any actual work done while "at work"?  This problem is common among most office bound employees, but I'm most interested in how it affects my field, The Programmer.  Specifically, how does the office space support or hinder the programmers' productivity?

There is no shortage of innovative office spaces out there, each with it's own advantages and disadvantages.  Everything from windowless plain white boxes to funky open concept, natural material spaces that invite the outdoors in and spur the imagination to wander.  When it comes to office space, some characteristics come to mind:

  • comfortable
  • no distractions
  • distractions
  • controlled dimmable light
  • natural light
  • quiet
  • moderate noise, hustle and bustle
  • no interruption
  • interruption and collaboration is great

I believe that all of those are important.  Of course the ones in bold represent the exact opposite of the others, with the exception of being "comfortable".  The reason for this is because my ideal office space depends on what I'm doing.  Programmers are most productive when they can get into "The Zone" where nothing else exists in their mind except what they are working on.  All of the items in bold support the ability to get into "The Zone", while the others usually serve to disrupt or prevent getting into and staying in The Zone.

Comfortable is the easiest item to deal with because it is constant, the need for it doesn't change with the type of work you are doing at that moment.  People always want to be comfortable.  Not being comfortable is a distraction so you want to get this right.  Office temperature and good equipment (desks, chairs and computer hardware) serve the employee and allow productivity.  A worker who is in pain from shoulder fatigue or shivering under a blanket will not do their best work.

The Zone is important for productivity.  Being knocked out of The Zone is costly for the business, because studies show that once a developer drops out of The Zone, it can take at least 10-15 minutes before they can become productive again and get back to where they were at the time of interruption.

Getting back to our office space, lets consider some of our options:

Office TypePromotesGood For The ZoneGood For Collaboration
Open Concept distractions, natural light, moderate noise, collaboration, hustle and bustle No Yes
Cubicles reduced distractions, natural light, moderate noise, reduced hustle and bustle A bit better It Depends
Individual Offices no distractions, controllable light, quiet, no interruption Yes No

So, it looks like we can maximize collaboration or The Zone, but we can't have an office space that is best for both.  Personally, I'm not really a fan of cubicles.  I'm not sure that their cost is worth the little bit of privacy and reduction of visual distraction that they provide.

What is the perfect developer office space?  An article posted on TechCrunch talked about Facebook's Mark Zuckerberg hiring famous architect Frank Gehry to design the ultimate space for employees to get their geek on.  Zuckerberg says: 

The idea is to make the perfect engineering space: one giant room that fits thousands of people, all close enough to collaborate together.

Ok, the largest open floor plan in the world sounds cool, and is something I wouldn't mind seeing, but I don't think my concentration level would ever approach The Zone in a room with thousands of people.  Of course, this level of extreme is beyond the scope of most corporations anyway, but the general idea is the same.  How can the business maximize employees and minimize the floor space needed?  Clearly the Open Concept floor plan wins if that is your primary objective.  Also gaining popularity is Agile Software Development which emphasizes collaboration with an open concept work area called a "bullpen".  It seems that the cards are stacked in favour of the Open Concept design.

Now, Zuckerberg is not oblivious to The Zone.  He also said:

It will be the largest open floor plan in the world, but it will also have plenty of private, quiet spaces as well.

If your devs are not chained to their desks because they use laptops and your building has enough space to create shared, private spaces that workers can move to when they want to find The Zone, that may be one option.  If workstations include multiple monitors, then the private spaces should be likewise equipped for this to be a viable option.  Even then, this solution may not be perfect, as the dev may lose access to visual cues they use when at their desk, like post-it notes, whiteboards, corkboards, etc.

This brings me to the first iteration of what my ideal office space might look like.  This assumes the use of Agile Software Development, which arranges its people in cross-functional teams of around 6 or 8 people.

The image above shows a mock-up floor plan that I think would work well for the following reasons: 

  • one team per office/room is cheaper than separate offices for each
  • collaboration is encouraged by placing team members together, with a center table they can roll up to
  • The Zone is supported by short dividers between desks to reduce visual distractions
  • keeping dividers short, collaboration is supported by allowing teammates to simply lean back in their chair to see each other
  • Agile is supported by whiteboards and/or scrum boards for the team along the bottom wall
  • The Zone is supported by a room with a door to reduce non-team related distractions
  • separating teams in different rooms allows each team to find their own rhythm, without disrupting the other, so one could be in The Zone while the other openly discusses a new feature
  • cross-team collaboration can be facilitated with meetings, or ad-hoc discussions around common areas like the lunch room or a games room
  • A company policy of don't knock, don't come in could support team-wide entry into The Zone for scheduled periods of time
  • An open door would invite collaboration with other teams at other times during the day

Now, some people will obviously wonder why headphones are not mentioned as a possible solution to some of these challenges.  For some developers, headphones work well.  For others, not so much.  I personally don't want to destroy my hearing with excessive volume because I am trying to drown out the others in my area.  Plus, headphones do nothing for visual distractions.

I think there are advantages and trade-offs to every office layout but this one provides a decent balance of the two extremes.  Programmers benefit from an environment that allows them to get into The Zone to get the work done, but a collaborative environment is essential for deciding what work to do.


17. January 2013 21:54
by Troy

Website (Re)Design - What is Important Today?

17. January 2013 21:54 by Troy | 0 Comments

Mobile devices.  More on that later.

I decided that it was time to update my website with a new design.  The previous one had been around since 2002.  Since then, the site had seen some content updates and a few technology updates, but nothing major.  Nothing architectural.  Nothing visual.

I began the process of redesign by doing some research and identifying some requirements.  I also identified some specific technologies that I wanted to use, mostly out of interest, since this simple site could be completed successfully in many ways.

The requirements:

  • Mobile device compatible
  • Responsive UI design (related to mobile device compatibility)
  • new look and feel - new design, something different
  • adopt HTML5 and CSS3
  • adopt MVC (Model-View-Controller) with extension-less URLs (like /Resume instead of /Resume.aspx)
  • support proper redirection of URLs that changed because of above, so that old links to my site would not return a 404 Not Found
  • support for canonical URLs
  • custom 404 Not Found page
  • update blog to use latest version of BlogEngine.NET
  • provide a printer friendly version of my online resume

If you are redesigning an existing site or application, the size and scope of the work has to be analyzed to determine the best implementation strategy.  In my case, the site was small enough and simple enough that a complete re-write was the logical choice.  For larger projects, a phased approach might make more sense and would probably deliver business value sooner than attempting a complete re-write from scratch.

I started with site architecture research.  I wanted an HTML5 site that used CSS3 and supported mobile devices.  Mobile device support is important.  It is no secret that mobile device adoption is soaring.  The typical options for mobile support currently include building:

  • a native application (an application designed specifically for each device type such as iPhone, android, BlackBerry, Windows Phone, etc.)
  • a website with a Responsive UI design that works well with mobile devices or a site designed specifically for mobile
  • a hybrid - a site built mostly with HTML5 and javascript that is then wrapped inside a native application using a tool like PhoneGap to create the wrapper

My simple site did not warrant a native application, nor a hybrid solution.  I did not want to create a separate site or design to support mobile devices, so I opted for a Responsive UI design that "adjusts" itself as the screen size changes, to provide an optimized view of the site content at different resolutions.  To implement this, I reviewed HTML5Boilerplate and Twitter Bootstrap, eventually choosing the latter.  Both are very good based on my testing so far and are an excellent way to get started with a responsive layout using HTML5 and CSS3.  Bootstrap includes Glyphicons which are cool, but I switched to FontAwesome, which uses a custom font instead of images.  Using a font is cool because changing the icon size and color is as simple as changing font size and color using standard CSS.  No photoshop required to get a blue version of a white icon.

I am not a web designer, my strength lies more with software architecture, so the new look and feel was developed with help from some Bootstrap themes and my desire to move towards a clean, simple site that focused on functionality and readability. In some respects, moving toward a Microsoft Modern UI (formerly Metro) style look, but without going all the way there.

I implemented the site with ASP.NET MVC3. I used a Legacy Route Handler to accomplish the redirection of old links to the new extension-less URLs in a way that provides a proper 301 Moved Permanently response to help search engines update their indexes.

Support for canonical URLs was implemented using the IIS7 URL Rewrite 2.0 extension.  It allows the definition of simple rules to manipulate URLs.  In my case, it was used so that multiple domains (like troyfarrell.ca) get redirected to my primary .com domain.  This is also important for search engines, to avoid duplicate indexing of the same content.

So that sums up what was important to me, when considering a site redesign this time around.  What do you think?  What did I forget?

28. June 2012 09:35
by Troy

Exploring Business Capability Mapping

28. June 2012 09:35 by Troy | 0 Comments

"There is surely nothing quite so useless as doing with great efficiency what should not be done at all." - Peter Drucker

I started looking into the process of Business Capability mapping while following up on notes from my Advanced Distributed Systems Design using SOA & DDD course with Udi Dahan who mentioned it.  The process dubbed MOTION by Microsoft was referenced during the course, as a good thing to follow up on later.

MOTION was the codename for the project, from which a process was created.  It was later renamed as Microsoft Services Business Architecture (MSBA) and was available from Microsoft as consulting services for a fee (though not any more).  Several patents were registered for this process methodology.

Process defined:  Motion uses business architecture to expose the business model of an organization, and then applies that information either to resolving a specific problem, or to informing decisions related to project prioritization and selection. Motion includes a patent-pending business architecture model, a template-rich methodology, and a variety of tools for capturing the business architecture and business model information in a highly stable, objective, and metric-rich format. That business architecture information can be linked to process, organization, and IT architecture information. By design, everything about Motion is technology-agnostic and mostly acronym-free.

Wikipedia defines Capability as: the ability to perform actions. As it applies to human capital, capability is the sum of expertise and capacity.

Forrester Research says:  A business capability defines the organization's capacity to successfully perform a unique business activity.  Capabilities:

  • are the building blocks of the business
  • represent stable business functions
  • are unique and independent from each other
  • are abstracted from the organizational model
  • capture the business interests

A capability usually starts with a verb.  So an insurance company might have a "Manage Life Insurance Contracts" capability, but not a "Contract System".  Certainly, there may indeed be a system or set of services that support the capability of managing life insurance contracts, however, the contract system is more focused on the IT architecture, instead of the business capability.

The capabilities focus more on the "what" does a business do, and less on "how" the business does it.  The advantage of modeling things this way is they are less prone to change.  A simple example might be a Send Customer Invoice capability.  Over time, the method of sending that invoice has changed, from printed and mailed bills, to emailed PDFs, but the business capability remains the same.

Sometimes, capabilities are automated using IT solutions, and other times, they may be supported and provided by manual office operations of the business (using email, spreadsheets, etc.).  Capabilities can be composed of a combination of People, Processes and IT supported solutions.

Each capability can also have over 100 attributes (properties), for instance:

  • performance metrics (time, financial, volume, etc)
  • cost information
  • compliance criteria
  • service level agreements (SLA) or service level expectations (SLE)
  • owner
  • description
  • manual/automated
  • in-sourced/outsourced

Once the Business Capabilities are defined, they outline "what" the business does and this can be used to map out the areas of the business that:

  • might benefit from IT support.
  • are important
  • are less important
  • might be candidates for outsourcing
  • etc.

Processes and Technology(IT) often represent the "how" a business does something and not the "what" the business does.

Maybe an Example?

Sure.  The following represents the expression of a set of sample business capabilities from a fictitious mortgage company. 


Level 1 Capabilities

  1. Develop Product/Service
  2. Generate Demand
  3. Fulfill Demand==============>
  4. Plan and Manage the Business
  5. Collaboration

Level 2 Capabilities for Fulfill Demand

3.1.   Provide Service
3.2.   Advanced Planning
3.3.   Procurement==========>
3.4.   Produce Product 

Level 3 Capabilities for Fulfill Demand/Procurement

3.3.1.   Sourcing and Supplier Contract Management
3.3.2.   Purchase Resources========>
3.3.3.   Receiving of Indirect/Capital Goods and Services 

Level 4 Capabilities for Fulfill Demand/Procurement/Purchase Resources   Request Resources============>   Acquire/Purchase Resources   Manage Suppliers 

Level 5 Capabilities for Fulfill Demand/Procurement/Purchasing/Request Resources   Create Purchase Requisitions   Manage Requisitions Approve Process   Perform Encumbrance Check   Create Auction Bids 


So, Why Does This Matter?

There are different types of software architecture commonly employed in the enterprise space, including Object Oriented, Services Oriented (SOA), etc.  The latter has gained popularity in the last few years and SOA in particular, can benefit from Business Capability maps, as they can assist in showing you "what" the business does, and provide direction on how the services in a system might be composed.  In this context, I'm not referring to web services, but to the autonomous building blocks that make up a software system that supports the operation of a business.

There are several business benefits mentioned above, but from my perspective, as a software architect, the primary value I see in documenting business capabilities lies in uncovering tools and information that might help me to design systems and applications that will serve the business most effectively.  It is difficult to design software to meet business needs, when the business does not have a clear definition of their needs.  When you begin gathing requirements, it is too easy to start writing down the "how" things are done and skip over the "what" and the "why". 

Since most ideas gain traction with a business case, it would be nice if there was a business case for the work required to develop Business Capabilities.  This article talks about some ideas to consider for developing a business case for Business Architecture, which can include business capability mapping.  Another must read is You Can't "Cost Justify" Architecture by John Zachman.  It outlines great arguments of why architecture is important and in many ways, the examples demonstrate reasons for investing in your products' software architecture too.

I'm Still Not Sold

As I read ReThink: A Business Manifesto for Cutting Costs and Boosting Innovation by Ric Merrifield (the former Microsoft employee behind MOTION) I'm working my way through the steps of questioning the process of architecting software, and finding it an interesting journey.

For software companies that sell a software product, I can see value in thinking about this process from two fronts:

  • internally, reviewing the business capabilities of your own business, to ensure you are focusing on what is important and what you are good at
  • externally, look at the business capabilities of your customers' business or different business verticals, or by industry if applicable, trying to find ways to improve the fit of your software within the "whats" of their business

Having this information could allow different teams within your organization to perform better:

  • Marketing could target features of your product to specific customers whose business capabilities would be best improved by having it
  • Engineering could better focus on building new product features that would best serve target vertical markets or industries

In fact, SAP has done something similar, by mapping their product offerings, to Business Maps that they have defined for several different industries.  Their maps define business capabilities and then each one has an icon that indicates if SAP sells a product module that will help their prospective customer with that business capability. (Although, I can't find them on their site anymore)

This demonstrates that Business Architecture is an asset, not an expense, because it is something that is used more than once (as was described in You Can't "Cost Justify" Architecture) .



7. November 2010 07:43
by Troy

Developer Hardware - How Much Is Enough?

7. November 2010 07:43 by Troy | 0 Comments

When the time came recently to upgrade the computer hardware for my developer workstation, it got me wondering what the average specifications are of dev workstations "in the field".  Through the use of twitter and linkedin, I reached out to several colleagues to conduct a very informal survey, to see what kind of horsepower they were running these days.  For all the respondents, they are full time employees and are not owners or consultants, so they typically don't make or influence the hardware purchase decision, they merely use daily what they are given.

In general, the results indicated that most were using a machine with specs similar to this:

Core i7 CPU @ ~2.67GHz, 2 Cores, 4 Logical cores, 8GB RAM, 7200 RPM Hard Drive

Upon doing some more research on the topic, I found this blog post on MSDN that discusses the hardware requirements for VS2010.  I also found myself referencing this blog from Jeff Atwood, that discusses a programmers "Bill of Rights" which includes some commentary on workstation hardware.

The basic theme I found in all that I read was, it does not really make sense to buy the bleeding edge, latest technology.  However, it is a very good idea to outfit your devs with the best hardware you can afford.

An argument in favour of this is a review of cost and productivity.


Some considerations on developer hardware:

$25/hr x 1 min/hr saved by faster hardware = $0.42 per hour

37 hrs/week * 52 weeks = 1,924 hours / year / developer

1,924 hrs * $0.42 per hour = $808.08 / year / developer

$808.08 * 20 devs = $16,161.60 total cost of lost productivity

So, if a more powerful dev workstation saved each dev only 1 minute of unproductive time per hour, that would result in a return of over $800/yr in increased productivity.

I highly suspect that the 1 min/hour is a conservative estimate.  I also suspect that for most locales, $25/hr for a professional software developer is also conservative.

If you used $40/hr instead, you would save $0.67/hr or $1,289.08 / year / developer.  That would be $25,781.60/yr for a team of 20 devs.

The ROI for fast dev machines seems apparent.


Now for the discussion about how much time a developer would actually save by having a faster machine.  I got some inspiration for doing some benchmarks from this blog by Scott Hanselman.  I used his idea of using the NHibernate.Everything.sln and source for benchmarking the machines that I had easy access to and the results of this are shown in Scenario 1.  I then added to the mix some other scenarios that developers in our organization might be likely to do in their day to day work, with our source code.  When using MSBuild.exe I used the /t:rebuild switch as well as the /m switch for parallel builds in B scenarios.


    #1 #2 #3 #4  
    Laptop Laptop Desktop Desktop Speed Comparison
Hardware Spec CPU Intel(R) Core(TM) i7 CPU       M 620  @ 2.67GHz, 2667 Mhz Intel(R) Core(TM)2 Duo CPU     P8400  @ 2.26GHz, 2267 Mhz Intel(R) Core(TM)2 Duo CPU     E6750  @ 2.66GHz, 2666 Mhz Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz, 2668 Mhz Machine #1 Faster than Machine #2 by X%
CPU Cores 2 Core(s), 4 Logical Processor(s)  2 Core(s), 2 Logical Processor(s)  2 Core(s), 2 Logical Processor(s) 4 Core(s), 8 Logical Processor(s)  
DRIVE 7200RPM  5400RPM  7200RPM 10,000RPM & 7200RPM  
Scenario 1A Run 1 18.48 25.16 26.76 17.67 36%
Run 2 18.21 25.63 21.71 17.53 41%
Run 3 18.66 25.94 21.7 17.36 39%
Scenario 1B Run 1 17.31 25.89 20.68 15.79 50%
Run 2 17.02 24.04 20.83 15.74 41%
Run 3 17.05 23.3 21.27 15.4 37%
Scenario 2A Run 1 02:09.50 03:04.48 02:45.51 02:19.46 42%
Run 2 02:07.96 03:03.71 02:40.45 02:19.36 44%
Run 3 02:09.40 03:03.94 02:44.04 02:19.18 42%
Scenario 2B Run 1 02:05.90 03:05.99 02:36.93 02:17.30 48%
Run 2 02:08.44 03:05.76 02:42.41 02:17.60 45%
Run 3 02:08.03 03:05.68 02:37.24 02:17.36 45%
Scenario 3 Run 1 04:32.42 06:41.30 04:04.74 02:55.43 47%
Run 2 04:16.23 07:12.21 03:55.35 02:58.62 69%
Run 3 04:22.14 07:04.65 03:45.49 02:56.92 62%
Scenario 4A Run 1 04:07.97 06:03.83 05:22.14 04:32.37 47%
Run 2 04:06.90 06:04.78 05:27.27 04:30.18 48%
Run 3 04:06.63 06:03.47 05:22.65 04:29.41 47%
Scenario 4B Run 1 02:30.94 04:19.15 03:39.78 02:23.07 72%
Run 2 02:30.15 04:14.75 03:31.28 02:23.98 70%
Run 3 02:32.83 04:14.65 03:32.82 02:23.95 67%

Results Comments

Scenario 1

Builds the source code for the open source project Nhibernate.  Parallel builds seems to have a small effect here, as shown in differences between 1A and 1B results.  Machine #1 is on average 41% faster than Machine #2.  For every hour of compile time, an extra 25 minutes would be saved by using the faster machine.

Scenario 2

Builds the database project for a single database.  Parallel builds seems to have a negligible effect here, as shown in a lack of differences between 2A and 2B results.  This makes sense since there is only 1 project to build.  Machine #1 is on average 44% faster than Machine #2.  For every hour of compile time, an extra 26 minutes would be saved by using the faster machine. 

Scenario 3

Deploys the database project from Scenario 2 to SQL Server, actually creating the database.  I do not believe that parallel processing is possible for database project deployments.  Machine #1 is on average 59% faster than Machine #2.  For every hour of time spent deploying databases, an extra 35 minutes would be saved by using the faster machine.   

Scenario 4

Builds the database projects for 5 databases and one shared server database project.  Parallel processing has a significant effect here, as a lack of dependencies between database projects allows a multi-core machine to build the projects concurrently instead of one after the other.  Machine #1 is on average 58% faster than Machine #2 for Scenario 4.  For every hour of time spent building the full database solution, an extra 35 minutes would be saved by using the faster machine.  Considering Scenario 4B only, when leveraging multiple cores and parallelism, Machine #1 is on average 69% faster than Machine #2 for Scenario 4B.  For every hour of time spent building the full database solution, an extra 41 minutes would be saved by using the faster machine.       

Final Thoughts

It seems that providing good quality workstations to your developers can result in increased productivity, that should more than cover the extra cost of acquiring faster hardware.


31. October 2010 18:25
by Troy

HowTo: Repointing Historic Masonry

31. October 2010 18:25 by Troy | 0 Comments

I recently took on a new challenge, the restoration of a 145 year old century home.  The house has triple brick walls and some of the restoration work we are doing includes repointing the lime based mortar.  This involves manually taking the old mortar out and then replacing it with new mortar.

I took a 2 day workshop to learn how, and then I thought that making a How To video of the steps I am taking would be fun.  So here it is!



31. October 2010 12:34
by Troy

Adventures In Innovation

31. October 2010 12:34 by Troy | 0 Comments

I recently had the opportunity to be an exhibitor at the Adventures In Innovation event held at Trent University in Peterborough on October 29, 2010.

The event was organized by the Workforce Development Board and the objectives of the event were to:

  • educate local Grade 10 students about employment opportunities, educational requirements and "day to day" responsibilities of a variety of careers
  • assist students in making informed career choices

Seeing as how we work in the field of Information Technology and more specifically, Software Development, we provided information about the types of employment positions that are typically found in that sector.

It was interesting to speak with some students who shared the same curious desire to take things apart and figure out how they worked, just as I did when I was their age.  Several students expressed a genuine interest in building software.  While some others, did a good job of faking it, in order to get one of our "spring" pens.  The unique pens proved to be a good draw of traffic.

After a couple of hours, we had succeeded in speaking with several students, and I'd say the event was a success.

Here is a co-worker and I at our exhibitor booth.  Unfortunately, our table had a bit of a sag in the middle which made things look a bit funny, but we persevered.


13. July 2010 20:41
by Troy

Software Conferences for Microsoft Tech

13. July 2010 20:41 by Troy | 0 Comments

I started thinking about putting a plan together for attending conferences.  I started doing some research about the different conferences that were geared towards the Microsoft Technology stack, or that were of interest to me.

As the information I gathered started to grow, I decided it might warrant a blog post.  Some of the events noted have already passed, as the collection of the information has been a bit of work in progress during spots of free time.


Conference Name

Cost Audience Description Duration When Cost per Day Web Location
TechDays $349CDN early-bird, $700CDN Developers Various sessions grouped by 5 tracks, including a local flavours track that highlights local speakers from each major city. 2 days Sept - Dec 2010
(Oct 27-28 Toronto)
$175 EB, $350 www.techdays.ca 8 Canadian cities
WPC Worldwide Partner Conference $1,795USD Business Types Focuses on delivering the MS roadmap for the upcoming year to MS Partners. 5 days July 11-15, 2010 $359 http://digitalwpc.com/ Washington, D.C.
PDC $1,000USD Developers / Architects Renouned for its size, with past events held in Los Angeles, this year scales things back with a shorter duration and a smaller, more intimate venue. Seats are reported to be limited. 2 Days Oct 28 - 29, 2010 $500 www.microsoftpdc.com Redmond, WA
MIX n/a Web Developers / Designers Sessions focus on web development and design, together with the MS technologies that support the development of same. 3 Days Apr 12-14, 2011 n/a http://live.visitmix.com/ Las Vegas, NV
TechEd $1,895US early-bird, $2,195 IT Pros and Developers Technical education on MS technology, tools, platforms and services 4 Days May 16-19, 2011 $474 EB, $549 http://northamerica.msteched.com/default.aspx Atlanta, GA
ALM Summit
(Application Lifecycle Management)
$1095US early-bird, $1495US ALM practitioners, managers Focus is on the application lifecycle and the management of same.  Sessions explore best practices of the application lifecycle for building software. 3 Days Nov 16-18, 2010 $365 EB, $498 http://alm-summit.com/home.aspx Redmond, WA
UX Week $2,295 early-bird, $2,495US Designers Premier conference for User eXperience types. 4 Days Aug 24-27, 2010 $574 EB, $624 http://www.uxweek.com/ San Fransisco, CA
Udi Dahan - Advanced Distributed Systems $1,800CDN Architects Advanced distributed systems architecture techniques.  Excellent course.
5 Days Aug 9-13, 2010 $360 http://www.eventbee.com/view/udidahan-toronto Toronto, ON
Agile $1,999US Developers / Architects Tracks include Technical, Business and Leadership & Organization focused areas, dealing with how to make software better, through agile methodologies.  5 days Aug 9-13, 2010 $400 http://agile2010.agilealliance.org/index.html Orlando, FL


16. May 2009 02:49
by Troy

Maximum file path length - Windows and TFS - Part 2 - error CS0006: Metadata file could not be found

16. May 2009 02:49 by Troy | 0 Comments

I blogged about TFS and the maximum file path length issue a while back, and thought I had covered it pretty well.  However, the issue came back to sting me again, so I thought it deserved another post.

Our issue was, sometimes, but not all the time, we would get this error on our team build on the build server (but the local developer build would always work fine).

[Any CPU/Release] CSC(0,0): error CS0006: Metadata file '..\..\..\..\SharedAssemblies\MSApplicationBlocks\Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dll' could not be found

It took some time to figure this out... the path was correct on the server and the DLL was there.  Now if you are the intuitive type, you may have already guessed from this blogs title that the problem is related to Windows path length limitation, but why was the problem intermittent?

It turns out that this assembly reference was on a VS.NET Team Test Unit Test project.  When you used the right click "Create Unit Tests" menu to create a new test, the wizard automatically adds assembly references, including a reference to this ExceptionHandling.dll.  This would break the build on our build server.  Our quick solution was to remove the reference from the unit test project, everything still compiled and it didn't seem to be needed.  The builds now worked again on the build server, UNTIL someone added a new unit test and the cycle would start over again.  This explained our intermittent problem.

It still didn't explain why the build failed when this assembly was referenced, until I happened to find this blog entry... the same blog entry I noted in Part 1 of this blog series, but I didn't connect the dots until now. Aaron's blog entry talks about the 260 character path limit, but doesn't mention the error message we were seeing.

It turns out, that for our unit test project,  this ExceptionHandling.dll reference was the longest path of all of them, and was just long enough to be too long, but ONLY on the build server.  The way the build server paths are structured is different than our dev boxes, which was shorter by about 25 characters and this explains why the build would break on our build server but not on our local boxes.

The other severely annoying thing is that the actual error message mentions NOTHING about the path length... just that the file cannot be found.

Using Aaron's tip about these variables ($(BuildDefinitionPath) and $(BuildDefinitionId)) in the properties of the Build Agent I switched to using the $(BuildDefinitionId) which shortened the path on our build server by about 23 characters.  Now the builds always work.

The moral of the story is... if you see the error message above, double-check your path lengths.

10. March 2009 11:12
by Troy

SQL Server Gotcha - Cannot open database requested in login 'dbName'.

10. March 2009 11:12 by Troy | 0 Comments

So I had a good fight today with a SQL Server 2008 connection that would not work.  The error was:

Cannot open database requested in login myDbName. Login fails. Login failed for user 'myDbUserName'

 This was dumbfounding.  Troubleshooting the usual suspects, the following were attempted:

  • check the database server to ensure that the database exists
  • check the user login to ensure it exists, check the permissions for the user for this database
  • try to connect using SQL Server authentication using this username and password from the Enterprise Manager - this works perfectly fine - but the ASP.NET application still gives this error
  • double, triple and quadruple check the connection string for the ASP.NET application - no problems found
  • drop the database and the login, recreate and try again - no difference
  • reboot the database server - no difference
  • check the event log for error messages - only the one displayed above is shown - nothing else out of the ordinary


I finally figured out, after a couple hours of head-scratching, from going through some event logs within SQL Server Enterprise Manager that the database name had 6 space characters appended to the name. Therefore what appeared in Enterprise manager and everywhere else as "myDbName" was actually "myDbName      ".  Something is obviously wrong with our MSBuild script which is autogenerating the database for us during the build process... I still have to figure out how it happened, but at least now I know why it would work in Enterprise Manager and not from the application.  The app defines the connection string explicitly (with incorrect name missing spaces), while EntMgr connects and gives you a list of databases to choose from, so you never need to define the database name.

Once I renamed the database to remove the blank spaces, everything worked again.

I confirmed my theory by running this query, which highlights the extra spaces:

SELECT '"' + name + '"' FROM sys.databases

Ahhhh, the world makes sense again.