Click here to Skip to main content
13,453,725 members (43,325 online)

Dominic Burford - Professional Profile



Follow on Twitter Google+ LinkedIn      Blog RSS
I am a professional software engineer and architect with over eighteen years commercial development experience with a strong focus on the design and development of web and mobile applications.

I have experience of architecting scalable, distributed, high volume web applications that are accessible from multiple devices due to their responsive web design, including architecting enterprise service-oriented solutions. I have also developed enterprise mobile applications using Xamarin and Telerik Platform.

I have extensive experience using .NET, ASP.NET, Windows and Web Services, WCF, SQL Server, LINQ and other Microsoft technologies. I am also familiar with HTML, Bootstrap, Javascript (inc. JQuery and Node.js), CSS, XML, JSON, Apache Cordova, KendoUI and many other web and mobile related technologies.

I am enthusiastic about Continuous Integration, Continuous Delivery and Application Life-cycle Management having configured such environments using CruiseControl.NET, TeamCity and Team Foundation Services. I enjoy working in Agile and Test Driven Development (TDD) environments.

Outside of work I have two beautiful daughters. I enjoy cycling, running and taking the dog for long walks. I love listening to music and am a fan of Rush and the Red Hot Chilli Peppers to name a few.



For more information on Reputation please see the FAQ.


Members need to achieve at least one of the given member levels in the given reputation categories in order to perform a given action. For example, to store personal files in your account area you will need to achieve Platinum level in either the Author or Authority category. The "If Owner" column means that owners of an item automatically have the privilege. The member types column lists member types who gain the privilege regardless of their reputation level.

ActionAuthorAuthorityDebatorEditorEnquirerOrganiserParticipantIf OwnerMember Types
Have no restrictions on voting frequencysilversilversilversilverAdmin
Bypass spam checks when posting contentsilversilversilversilversilversilversilverSitebuilder, Subeditor, Mentor, Protector, Editor, Staff, Admin
Store personal files in your account areaplatinumplatinumSitebuilder, Subeditor, Supporter, Editor, Staff
Have live hyperlinks in your profilebronzebronzebronzebronzebronzebronzesilverSubeditor, Protector, Editor, Staff, Admin
Have the ability to include a biography in your profilebronzebronzebronzebronzebronzebronzesilverSubeditor, Protector, Editor, Staff, Admin
Edit a Question in Q&AsilversilversilversilverYesSubeditor, Protector, Editor, Admin
Edit an Answer in Q&AsilversilversilversilverYesSubeditor, Protector, Editor, Admin
Delete a Question in Q&AYesSubeditor, Protector, Editor, Admin
Delete an Answer in Q&AYesSubeditor, Protector, Editor, Admin
Report an ArticlesilversilversilversilverSubeditor, Mentor, Protector, Editor, Staff, Admin
Approve/Disapprove a pending ArticlegoldgoldgoldgoldSubeditor, Mentor, Protector, Editor, Staff, Admin
Edit other members' articlesSubeditor, Protector, Editor, Admin
Create an article without requiring moderationplatinumSubeditor, Mentor, Protector, Editor, Staff, Admin
Approve/Disapprove a pending QuestionProtector, Admin
Approve/Disapprove a pending AnswerProtector, Admin
Report a forum messagesilversilverbronzeProtector, Editor, Admin
Approve/Disapprove a pending Forum MessageProtector, Admin
Create a new tagsilversilversilversilverAdmin
Modify a tagsilversilversilversilverAdmin

Actions with a green tick can be performed by this member.

GeneralBeat the Thrashing Pin
Dominic Burford5-May-17 6:03
professionalDominic Burford5-May-17 6:03 
GeneralWorking with Azure Blob Storage Pin
Dominic Burford27-Apr-17 2:29
professionalDominic Burford27-Apr-17 2:29 
GeneralWrestling with Apple Pin
Dominic Burford20-Apr-17 3:37
professionalDominic Burford20-Apr-17 3:37 
GeneralTwo unit tests, zero integration tests Pin
Dominic Burford10-Apr-17 22:39
professionalDominic Burford10-Apr-17 22:39 
GeneralThe Mediocre Mindset Pin
Dominic Burford29-Mar-17 1:10
professionalDominic Burford29-Mar-17 1:10 
GeneralHow much code coverage is enough? Pin
Dominic Burford21-Mar-17 5:14
professionalDominic Burford21-Mar-17 5:14 
GeneralThe Mythical Full Stack Developer Pin
Dominic Burford14-Mar-17 3:18
professionalDominic Burford14-Mar-17 3:18 
GeneralCreating your own private NuGet server Pin
Dominic Burford2-Mar-17 0:36
professionalDominic Burford2-Mar-17 0:36 
In my previous article article[^] I described how I resolved a dependency problem between two different projects using NuGet. An assembly that was created by one project was required as a dependency by a different project. I resolved the dependency problem using NuGet. The build of the donor project created and published a package that was consumed by the build of the recipient project.

Although this all worked absolutely perfectly, the only slight drawback was that my solution relied on a network share as the location where the packages were published. This didn't seem very satisfactory. A better solution would be to publish the packages to an HTTP endpoint i.e. a web based package repository of some kind. The package repository needed to be private. The assemblies I needed to publish weren't intended for general purpose use, but only intended to be used by the other members of the development team in our own applications. So a public NuGet repository wasn't an option.

There are several ways of achieving this. Visual Studio Team Services (VSTS) package management, a private NuGet server or a third party package management service such as myget[^] all provide the ability to host your own private packages. The last option incurs costs (albeit fairly trivial costs unless you are scaling up), and we don't currently use VSTS services. So that left a private NuGet server as the proposed solution.

This works by creating your own ASP.NET web application, which you then host on your internal network or cloud infrastructure. The key feature in creating this web application is that you must add the NuGet.Server package to it. This allows the web application to serve as a package manager. A full description of how to create this web application can be found here[^].

It didn't take long before I had the web application up and running. The next step was to update both the donor build script (to publish the package to the newly created NuGet server), and the recipient build script (to install the package from the NuGet server).

There are two settings in the web.config file that are worth mentioning.
<add key="requireApiKey" value="true"/>
- requiredApiKey - by default this is set to true. This means that you need to specify an API key when pushing / deleting packages. This ensures that only authorised applications (those you have entrusted with the private API key) can push and / or delete packages to your NuGet server. In our case, the NuGet server is hosted inside our firewall and only accessed by our build scripts. So we didn't require this functionality. So I set this value to false accordingly.
<add key="allowOverrideExistingPackageOnPush" value="false"/>
- allowOverrideExistingPackageOnPush - by default this is set to false, indicating that you cannot push the same package to the NuGet server more than once. I ran into this behaviour when testing that the builds were correctly publishing the package. I was manually queuing builds and so ran into this behaviour as I was getting an error when attempting to publish the same package to the NuGet server. I'll probably reset it back to its default once it has been up and running for a while, but for now, it's set to true while I'm still testing it out and manually queuing builds.

Publishing your assemblies to a NuGet server simplifies your DevOps process considerably. Each time the donor build is triggered, a new version of the package is created and published to the NuGet server. It is then up to the recipient build to determine which version of the assembly (or package) it wishes to consume. There is no automatic pull to use the latest package by the recipient build. This is a manual intervention under the control of DevOps.

When the recipient build is ready to use the new version of an assembly, it will do so in a development environment first to make sure there are no breaking changes, and to undertake sufficient regression testing. This is also where unit tests come into their own. If all your unit tests pass with the new package, then you can be fairly confident that everything works. The caveat being, your level of confidence is directly proportional to the quality of your unit tests.

The NuGet server works exactly as expected, and each build publishes / installs packages to and from the NuGet server perfectly. Yet again, the integration between the Team Foundation Server (TFS) 2015 build scripts and the private NuGet server is as tight as you would expect from Microsoft. They just work, and that's all you can ask for.
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare

Home | LinkedIn | Google+ | Twitter

modified 2-Mar-17 6:54am.

GeneralConsuming a dependency using NuGet Pin
Dominic Burford28-Feb-17 6:05
professionalDominic Burford28-Feb-17 6:05 
GeneralCoding Standards Pin
Dominic Burford24-Feb-17 6:02
professionalDominic Burford24-Feb-17 6:02 
GeneralSoftware Architecture Challenges Pin
Dominic Burford17-Feb-17 1:31
professionalDominic Burford17-Feb-17 1:31 
GeneralGetting the Most Out of Your Unit Tests Pin
Dominic Burford9-Feb-17 9:21
professionalDominic Burford9-Feb-17 9:21 
GeneralBuilding a strong development team Pin
Dominic Burford8-Feb-17 6:31
professionalDominic Burford8-Feb-17 6:31 
GeneralLast pieces of the mobile app in the Web API puzzle Pin
Dominic Burford27-Jan-17 5:03
professionalDominic Burford27-Jan-17 5:03 
GeneralSerializing .NET types that contain DateTime Pin
Dominic Burford22-Jan-17 18:53
professionalDominic Burford22-Jan-17 18:53 
GeneralClearing the Dead Letter Queue on an Azure Service Bus Queue Pin
Dominic Burford16-Jan-17 8:57
professionalDominic Burford16-Jan-17 8:57 
GeneralMigrating ASP.NET Web API services to the Azure platform Pin
Dominic Burford10-Jan-17 2:45
professionalDominic Burford10-Jan-17 2:45 
GeneralProcessing Azure Service Bus messages using an Azure Function Pin
Dominic Burford4-Jan-17 9:10
professionalDominic Burford4-Jan-17 9:10 
GeneralThe Structure of an Azure Service Bus message Pin
Dominic Burford30-Dec-16 3:11
professionalDominic Burford30-Dec-16 3:11 
GeneralMy Introduction into Service Bus Architecture Pin
Dominic Burford21-Dec-16 6:40
professionalDominic Burford21-Dec-16 6:40 
GeneralAdding resilience to your services by implementng a retry pattern Pin
Dominic Burford19-Dec-16 1:10
professionalDominic Burford19-Dec-16 1:10 
GeneralAuthenticating Web API services with JSON Web Token Pin
Dominic Burford13-Dec-16 2:26
professionalDominic Burford13-Dec-16 2:26 
GeneralDeploying to Azure with Team Foundation Server 2015 Pin
Dominic Burford9-Dec-16 2:29
professionalDominic Burford9-Dec-16 2:29 
GeneralCatch me over on Medium for my latest blog posts Pin
Dominic Burford7-Dec-16 1:15
professionalDominic Burford7-Dec-16 1:15 
GeneralWeb application metrics with Application Insight Pin
Dominic Burford25-Nov-16 10:03
professionalDominic Burford25-Nov-16 10:03 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Advertise | Privacy |
Web03 | 2.8.180318.3 | Last Updated 21 Mar 2018
Copyright © CodeProject, 1999-2018
All Rights Reserved. Terms of Service
Layout: fixed | fluid