A Day in the Life of a Software Developer

8:30AM – Arrive at work

Hopefully, I arrive at work just in time for the first tea round – makes for a much better start to my day!

This time is usually used for catching up on emails and picking up where I left off yesterday. It’s useful to remind myself where I got to and try to achieve what I was in the middle of before stand up.

9:50AM – Stand up

This time is used to feedback to the team on my progress yesterday and what I intend to do today.

Now is a good time to pose any questions I have and to mention anything that may be blocking my work. For this stand up, it’s also time to look at the Kanban board for our project. This is something new our team is trying out, to see if we can get a better sight of what is being achieved during this project compared to other projects in the past. It is not without its pains but the general feeling is that it has been worthwhile to try out.

10:00AM – After stand up discussions

Since we’ve already been interrupted by stand up, now is the perfect time to discuss anything we have preying on our minds.

This can be anything from a simple user journey question to working together to overcome a problem. Today that means bringing our new team member up to speed with the project and what outstanding tasks I would like them to do first. I’m working on the front end of this project and would like a call for historical data to be completed so that I can progress further with my screen.

10:15AM – Time to get buried in code

Hoping for no more interruptions until lunch – it’s time for me to get knee deep in code.

Usually this involves working with legacy code and that is part of the battle! However, I am in the very fortunate position that this project is very greenfield. Whilst we are adding features to already existing functionality, our team have taken this opportunity to start fresh. A lot of the old code was done to an older standard, older ideas about the project and with older technologies in play. Now we can bring in newer technologies and our new way of doing things.

For instance, we are using Durandal for the new set of screens we are creating. Not only do we want this to feel like a one page application, but using Durandal helps us to modularise our front end code much better. All in all, this code will be much cleaner to work with in the future, and starting from scratch will benefit us greatly (plus it makes my job so much easier!).

12:30PM – Lunch

Time to get out of the office and clear my head.

Well sort of… Trips to lunch can easily turn into further discussion about problems we are facing in the project and how we might overcome them. It’s not a bad thing; it just shows how challenging the work can be and naturally you’ll want time to mull it over with someone.

1:30PM – Getting back to it

Now it’s time to get back to programming.

Today, I’m trying to not fiddle too much with the UI side of things. Instead, I want to get enough functionality into the screen so that I can complete at least one user journey. I’m working on what we’re calling a set up screen, which allows the user to set goals for their stores. This is by far the hardest screen in the project because there is just so much functionality, different possibilities and user journeys to consider. Now and then, I will come across a problem or a scenario that I want clarifying, but for the most part I am able to just get on with it.

Once I am satisfied that my JavaScript is working as it should, I try out a few quick scenarios. It doesn’t take me long to find an issue – unsurprising at this stage of development. This is the first time I will have called some of the controllers. In this instance it is on creation of a certain type of goal that’s brought up an error, so it’s time to take a look at the server side to sort out the problem.

5:15PM – Home Time

By the end of the day, I would have hoped to have got a big part of functionality done.

You can’t necessarily complete a Kanban task or sub task in a day, so I always try to give myself an aim for where I want to be with that task at the end of a day. While I try to leave my work at a good point to pick up for the next day, that doesn’t happen often.

Usually the time will honestly fly by and I am only reminded by others leaving that it is time for me to go.

An Epiphany in Chicago: Customers are Humans Too

At the Chicago Subway Convention I had an epiphany, a realisation through human observation.  I could try and explain it to you in my own words but, by chance, I stumbled across a word online which I think sums up the concept perfectly.


n. the realisation that each random passerby is living a life as vivid and complex as your own—populated with their own ambitions, friends, routines, worries and inherited craziness—an epic story that continues invisibly around you. (John Koenig – dictionary of obscure sorrows).

Ok, Sonder is technically a made up word but my point still stands: our customers are real people. It seems obvious, but sometimes we are so focused on our customers being customers that we forget this really important fact.

At PXtech, a vital part of our development team’s ethos is to keep the customer as our primary focus.  We start thinking about our customer at the design phase and constantly try to refine our products through the development life cycle. We constantly ask questions like “Why would our customers use this?” and “How could we make this easier for our customers to use?” to ensure we’re on the right track. This approach is already working. I had many people at the convention tell me that they liked what we’ve created and I saw how passionate some of our customers were about our products. However, to take our products to the next level, I think we need to keep in mind the concept of sonder.

Whenever we start to create something, we should not only be thinking about what our customers need as customers, but also what they need as people. We should be creating something which feeds into their lives seamlessly and aims to make their complexities simple.  We should be thinking about what stresses them out on a day to day basis and how our software can make them feel better, happier and healthier by taking away even one little stressor.

From a business point of view, we can start to build up complex pictures of who our customers are, what tasks they do, what they find difficult and most importantly, how they want to use our tools. We can make sure our products are inclusive by catering for all different types of customers. For example, our products should be crisp and simple enough for those who require automatic, high level or quick solutions but detailed enough for those who prefer something configurable and highly detailed. To understand our customers as people means we can ensure we deliver products that are truly valuable for all.

From a selfish perspective, the idea of sonder makes me feel really good about what I do. Yes, we can help save our customers’ time and money but we could also be giving them the tools to enhance their lives in other ways. Just think: we create a product which reduces the time a customer spends on activity X by 30 minutes each week. Making a task more efficient for a customer is always a success but when we factor in sonder, we could also be doing something much greater. Our customer will now have an extra 30 minutes of free time each week. This is 30 minutes they could use to meet with their friends, take their dog for a walk or play with their children. 30 minutes doing something fun or at least something less stressful than activity X. To me, this is a really nice thought. It makes things seem more personal and definitely makes me more passionate.

We can use the concept of sonder to spark new ideas and use it to innovate thoughtful solutions. The next time you’re working on a product, just stop and think. Realise that what you’re doing really can have a positive and meaningful impact on somebody’s life.

Kim Hoffman, Senior QA Analyst

Why adaptable restaurant technology is essential

With the rate technology changes, keeping up with the latest gadgets and gizmos can seem impossible. It’s understandable that many businesses are hesitant to invest in new technologies, especially if they’re going to be implemented in tens or hundreds of locations. Investing can be scary because who knows what will come next for restaurant technology? How soon will you have to replace your existing tech to stay on trend and be able to deliver services as customers demand them?

It’s not just technology that changes. As your business grows, your technology may quickly become difficult to work with or no longer meet your business requirements. It may even hold you back, forcing you to maintain old processes that don’t let you work as effectively as possible. Hospitality trends are fickle; customers demand human interaction, convenience, quick and easy service, and online delivery, all rolled into one. Customer demands fluctuate regularly and if your technology isn’t able to keep up, you will quickly find your business falling behind your competitors.

So how do you keep up date with this ever-changing environment?

When looking at tech solutions, the term ‘future-proof’ is used often in marketing spiels. But unless your chosen techies are also time travellers, nothing is guaranteed in the world of future technology. However, there are many options that could help reduce the frequency of replacing technology going forward and limit the disruption of doing so.

Good technology companies who are passionate and interested in future tech will likely be developing and creating technology solutions as trends change. They’ll always be on the lookout for what to do next and where they can push and improve their solutions to help their customers be more successful and work more efficiently and effectively. Here at PXtech, we have an in-house development team, a portion of which are dedicated to keeping their eye on and developing with the newest and up and coming technologies.

Our solutions adapt as your business changes and grow with you as you become more successful. You can modify any element of your solution to suit your working practices and change it at a later date if these should change. The benefit of adaptable technology is that you won’t have to keep replacing it every few years to stay current. With a centralised database and remote management, you can add varying modules to your EPOS software and add in extra functionality should you need it, just at the touch of a button.

Outdated tech can really hinder your chance of success. There are so many different types of restaurants constantly entering the marketplace and competition is rife. Don’t let your technology hold you back.

Invest in good technology. Invest in a good technology company.

If you’d like to talk about your options for updating your technology, get in touch on hospitality@pxtech.com.

Charities adapting to change

Charity Store

Small charities face a “hurricane of change” according to the Facing Forward report by Lloyds Bank Foundation for England and Wales. The report calls for government, funders and larger charities to take action to help small charities in challenging times, echoing some of our own thoughts on the benefits of charity collaboration.

One of the prevalent themes in the report is the effect of the ever-changing digital landscape and what this means for small charities. Over the last few decades, the technology sector has completely transformed the way we live, work and communicate. Among other topics such as Brexit, changes to the government, and funding, advances in technology remains one of the most important influential factors in how the third sector is developing.

The digital divide

The digital divide is constantly widening with many volunteers now needing training and support to be comfortable with the technology they use on a day-to-day basis. Old-fashioned manual cash registers are being replaced with EPOS systems, paper forms are now filled out electronically and charities who are not partaking in digital marketing of some kind will often find themselves struggling in comparison to their more technology-savvy counterparts.

Convenience and Flexibility

Flexible and remote working is also on the increase across all sectors, and charities are not different. Managers must now communicate, plan and organise without needing to be physically present in the shop. Volunteers are increasingly demanding the freedom of adaptable shift patterns and convenient hours, and in many cases will move to the charity who can offer them. The expectation of easily viewing and changing shifts online impacts what workers want from their workplace, voluntary or otherwise.

Autonomous Processes

Automation will also have a large impact on working processes. On a larger scale, the report mentions autonomous cars affecting community transport or breakthroughs in personalised medicine affecting health charities. But even on a granular level, automation of menial tasks will replace some jobs in-store. Simple things will be made much more efficient with automation, such as sending emails out to donors or providing digital checklists to allow volunteers to complete daily tasks without supervision.

Other tech trends such as tracking (of our health, sleep, interactions, and possessions) is tipped to have a large influence on the working practices of many organisations. We’ve yet to understand the wider implications of this kind of data capture but do know that it gives businesses the ability to tailor certain products or services to an individual much easier than before.

Get digital savy

While these developments may seem too advanced or far away in the future for small charities to start thinking about, the acceleration of these trends are already beginning to alter the third sector. There’s no certainty in predicting the future, but staying clued-up and aware of technological developments will certainly help in adapting to meet change in the digital landscape.

The charity retail sector is gradually bringing itself up to date with the same working practices as some of the more pioneering for-profit businesses. While small charities are unlikely to have the capabilities of investing in the most advanced tech, being open-minded, innovative, and eager to embrace a digital transformation will help set you in good stead for the future.


Release Often, Reduce the Pain

Release management

Releases are painful.

That is a generally accepted “fact” in many parts of the software industry. Yet it needn’t be so.

Releases can be painful. If you release functionality in a “big bang” style, once per quarter approach, then don’t be surprised if the experience isn’t everything you’d hoped it would be.

Like anything in life, the more you do something, the more you learn, and the easier it becomes. Practice makes perfect. By the same vein, breaking big things up into small chunks often makes them easier.

Take running a marathon (uh oh, bad metaphor coming up…). If you run 26.2 miles in one go, then it’s hard work! If you run 26.2 miles every month, you’ll find it easier, but if you only do it once in a blue moon then chances are you’ll hit a wall at some point, pain will set in and you’ll wonder why on earth you signed up for this nonsense.

Take that same 26.2 miles though, and, let’s say, you run it in 4 parts. Run one part per week for 4 weeks and you’ve finished your marathon. Yes it took longer (did it?), but it was less painful right?

I said it took longer… but that’s not necessarily true. Perhaps you ran the last mile at around the same time you would have anyway, but you ran the first mile a month earlier because you didn’t feel you needed to train as hard or as long for the whole thing?

Because you were running in smaller chunks and resting inbetween, you probably also ran a bit faster. So you were running for less time overall!

To stretch the metaphor to its limit: you probably spent less time running and ‘delivered’ your first miles around 4 weeks earlier than you would have if you did it all in one go.

Still with me? OK, back to software…

By releasing smaller chunks of functionality more frequently, you are able to release them earlier, before everything else is ready to go.

Smaller releases generally take less time too. Because there’s less to push out, less to validate and check, and (in theory) less to go wrong.

Finally, through the act of releasing more often, you learn more about the process you go through, are less likely to make mistakes, and are probably more willing to put the effort in to streamline the process through more automation.

Overall, releasing little and often is a win for you, a win for your team, and most importantly a win for your product and your users.

Ralph Cooper, Head of Software Development

What can you get out of Business Intelligence?

Business Intelligence

Business intelligence (BI) is an incredibly powerful and useful tool for restaurant owners, even more so if you manage multiple sites at once. Integrating a BI solution with a good EPOS system is essential for those wishing to succeed. The insights garnered from a single software platform hosted in a centralised database can assist restaurant owners and managers in better understanding their business, their employees, and their customers. Knowing exactly what is going on at any one time, from any location in the world, can help you make informed decisions and ensure you’re always maximising efficiency and boosting productivity and sales.

Here are just a few insights that BI can give you about your business:

Sales data

From the most lucrative time of day, week, month or year, to your most sold meal – sales data can give valuable insights into which of your marketing efforts are succeeding, what your customers most desire and means you can ensure popular items are readily available across locations. If you know peak selling times and your demand for a product, you can enhance your operations, keeping customers happy and improving customer service.

Employee productivity

Knowing which employees are more productive than others allows you to identify your best team members so you can optimise teams and ensure you have the most productive employees working together at the most profitable selling times. Having an idea about how your employees work together makes employee scheduling easier and knowing how many people to have on at any one time reduces unnecessary labour costs.

Stock control

Keeping an eye on your inventory lets you know when you need to reorder items, what’s been popular, what hasn’t, and could indicate if employees are helping themselves to a free lunch.

Integrated with tablet ordering and Kitchen Display Systems, stock control modules also allow you to alert staff immediately of any out of stock items, reducing the number of unhappy customers and awkward apologies after orders have been placed.

Spot trends and possible fraudulent activity

BI is tremendous at showing you certain trends and patterns in your restaurant data. For example, it can alert you to discrepancies in stock or unusual transactions (such as a large number of voids) that may highlight fraudulent activity or indicate that further staff training is needed. This allows you to rectify any issues right away so you can always be at your most profitable. Tracking employee IDs for certain transactions and using CCTV drilldown means no one is falsely accused and you can rectify any issues before they have a large impact on your organisation.

Business intelligence gives a detailed and in-depth view of your whole business, across stores, locations and brands. It’s important you know how your business is performing so you can make better decisions about where you should pay most of your attention to. Tracking business activity means you can always be aware of any issues and resolve them immediately and it also means you can view and celebrate your ongoing success!

If you’d like to know more about how business intelligence can help your business, get in touch on hospitality@pxtech.com.

Staying Current – 5 Tactics for Technical Managers

Chess Board

You developers have got it easy when it comes to staying up to date with current tech. Even if you’re not lucky enough to be working with the latest and greatest stuff like the team at PXtech, you’re at least writing code every day, solving software problems, and keeping your tech mind sharp 9-5.

Since becoming development manager, I’ve really had to work hard to keep my development skills up to date. As time has gone on, my workload has shifted away from the code, and more towards reports, organisation, recruitment etc. (you know, all that management stuff). This meant that dipping into the code on the rare occasions I was able to, was just getting more and more difficult, and taking more and more time to get up to speed with what was going on. It didn’t help that making even an hour of space to focus on it without interruptions was nigh on impossible.

Things are changing though. Focusing is easier, I’m able to get productive from a cold start more quickly, and many of the newer frameworks the team are using don’t feel quite as alien anymore. Put another way, I feel in touch. Not as on top of everything as I’d like to be, but I can be productive as a developer alongside my responsibilities as a manager.

I wanted to share some of the tactics I’ve used to get to this point, and will continue to use to maintain the skills that are so valuable to me and, I hope, to my role at PXtech.

Make the space

It sounds obvious, but if you don’t make the space to work on your development skills, you won’t be able to work on them. Making the space is actually the easy bit, protecting it is harder. Distractions such as email, meetings, questions etc. all break your flow, which as you know is just disastrous for programming.

I did a few things to defend this time, which really helped. First I made a conscious effort to get control over when meetings happened. Bunching them together is best and planning the preparation and follow up time appropriately also helps. Second, I closed Outlook (I can sense the collective intake of breath from here). Yes that’s right, I closed my email, and most days I will only check emails at 11am and 3pm. I can’t claim credit for this idea, but this guy can.

Finally, I accepted that I needed to regularly commit time out of work to learning. It’s good practice for developers anyway, but essential if you’re not 100% development focused in your day job.

Embrace generalism

Sounds backwards right? The most successful programmers out there specialise, and for good reason. If you’re a generalist then your skills are in rich supply. If you’re a specialist, then you’re that big fish in a small pond (hat tip to John Sonmez).

Well, all that is true, but now you’re managing a team of specialists and aspiring specialists, and you need to know at least a little bit about what each of them is doing. Chances are your experience will help them hone that speciality and (if you’re doing your job right) apply it to your team’s products in the most effective way through excellent application architecture design.

I try to learn something new every week. Whether it’s a technique one of my team are using, or looking at an emerging technology area so I can have an informed discussion on it with our expert in that area. It helps to push me and my team, as well as keeping my knowledge relevant to what’s being worked on

Have a side project

I can’t stress this enough. It’s all very well aiming to be an active member of the development team, delivering value to the customer by coding features and completing sprint items, but sooner or later you’ll be pulled away and you’ll go through a period where getting anything (technical) done is not, and cannot be top of your priority list. The team will be impacted, sprint goals will be missed, and you’ll feel awful being the one dragging everyone else down. Sorry – it’s a fact, and you can bet it’ll happen at the worst time.

For that reason, I try to limit my direct delivery of backlog features to relatively independent, lower priority items. Naturally, they’re also not always the most interesting.

To afford myself the luxury of playing with the very latest tech in an interesting way and being able to dip in and out as required, I have a side project (an important one, but a side project nonetheless) that only I work on. It’s my playground for want of a better word. Somewhere I can try things out and learn new things safely. It’s been invaluable to me in staying up to date and keeping up with the team around me.

Read endlessly

Read tech blogs, news, books, everything you can to keep a grip on where the industry is going. Not only do you want to make sure you’re focusing your precious time in the right areas, but you need to keep tabs on your team to ensure you have the right mix of capabilities in the right areas.

I find Twitter is a particularly useful tool for this. I check it as frequently as I can, and try to keep the majority of the people I follow relevant to my industry. (If it helps, set up another account for this!)

Learn from your team

One of the best resources available to you, is sat right with you in the same room most of the time. These are the people who you are entrusting and helping to become specialists in their respective fields, so learn from them. Get them to show you what they’re doing, explain it, and help you apply it. They’ll benefit from your eyes and approval of their work, and you’ll benefit from the research and learning they did to get to that point. Win-Win.

So there are the 5 main tactics I have used to keep myself up to date since letting go of development full time. It’s hard – really hard – but I’m not ready to let go of it yet, and I can’t yet imagine a time when I will be.

Ralph Cooper, Head of Software Development

Will ghost kitchens destroy your restaurant business?


When we saw the rise of third-party online ordering websites, the restaurant industry feared the impact it would have. Now the restaurant scene is getting even more competitive with the introduction of delivery-only ‘ghost’ kitchens.

Surpassing the local chippy or Chinese takeaway, these kitchens are offering premium meals directly to people’s doors. Embracing the current demand for food on the go, they half their overhead by shaking off property driven expansions, high rent and labour costs.

By crowding the marketplace even more, the traditional sit-down restaurant is ever more in fear of becoming extinct.

With double the overheads of ghost kitchens, how can you prevent being priced out of the restaurant scene?

If you haven’t already started utilising technology within your restaurant, now is certainly the time.

There’s no doubt that online ordering, payment and delivery options are essential. If you fail to keep up with the demand of being able to offer your meals to customers who dine at home, your restaurant and brand risk being left behind as we move towards more digitalised dining in the future.

Being more technical with your ordering processes is a must. Gone are the days of diners ordering food by calling. Diners want to be able to order from an app or website that allows them to choose, review and pay in one smooth transaction. Having the technologies available to you to do this is one thing but having an integrated system to streamline the process will truly up your online ordering game.

Integrating your online ordering system with your EPOS bypasses those third party services meaning you keep all the profits from the sale and the order is sent directly to the kitchen, optimising communication and reducing order time. This not only ensures customers get their order as quickly as possible with less chance of mistakes but also works to engage the customer through their digital experience and means all transactions are accurately tracked through your POS.

As you no longer have the opportunity to engage diners in your restaurant with great customer service, you need to ensure that your brand ethos is visible to the customer in your technology solutions. Creating an easy and smooth transaction for the customer, whether in the restaurant or at home, will always win repeat custom. Online orders can also be linked directly with loyalty programs so your customers reap the benefits of ordering with you directly and are rewarded for their loyalty.

While there’s much discussion around if diners prefer to eat at home or go out for a meal, there’s no denying that the desire to be able to eat premium food at home is increasing. While being prepared is essential, taking it to that next level by engaging customers online will really help you to stay ahead of your competitors and secure your restaurant’s future in a digital world.

The Importance of Choosing the Right Technology

It’s easy to get whisked away by the possibilities of modern technology. It’s human nature to want the newest gadgets packed with endless features that empower you to be more productive, more efficient, more successful. With a smooth-talking salesman eager to dazzle you with the amazing things technology can do, it’s very easy to be led to believe that you need all of these features and functionalities to operate effectively. But that’s not always the case.

The charity sector has seen an influx of new technologies over the last few years and many are rushing to take advantage of the possibilities and benefits that it can bring. As a charity every penny spent on technology is a penny not going towards your cause and that’s why it’s so important to invest in technologies that will be worth it in the long run, that can and will provide the largest return on your investment.

Today’s POS technology often boasts never-ending lists of functionality, all promising increased Gift Aid sign ups, improved people management, easy stock tracking, better staff scheduling, hosted documents, improved communication, user-friendly interfaces, quicker cashing up processes… It’s hard not to buy into the many features available.

There’s no doubt that these systems can be extremely helpful. They can help you to improve how you work in your charity and having all those features at the touch of a button is incredibly useful. But realistically, how many of those features will you actually use? It’s all well and good having the functionality to manage floor space within a giant warehouse and handle the logistics of international delivery, but if you are running an operation of three shops all in the same county, just how useful will this be?

Having huge functionality in your EPOS system is great – but if you’re paying for something you don’t need, you’re wasting valuable funds that could go towards supporting your cause.

Having an EPOS system is becoming a necessity but it doesn’t need to be a hundred and one things to make you more efficient. It just needs to do what you need it to. Perhaps you’d like to have some help tracking your stock movement but don’t need task lists for your volunteers hosted on your POS. Maybe you just want a simple system that processes transactions. No frills, no added costs and no faff.

So how can you identify the systems that actually do what you need them to?

Finding a good technology provider is crucial. While you may not fully understand what the technology can do for you, they’re experts in it. It’s also important that they understand your issues, your requirements, and how you work in order to choose the right solution for you.

At Charity Expertise, we know we are a good technology partner for charities. We spend time learning and understanding your charity so that we can figure out the best way to help you succeed. When we worked with Save the Children, we collaborated, listened, suggested the right system, and then worked with them to ensure they got the best possible return from their investment. The new system contributed to a 35% increase in Gift Aid claims.

When we launched our new digital Gift Aid sign up solution, Wil-U, that replaces the laborious paper forms, we knew it shouldn’t be tied to an EPOS system. We knew it wasn’t realistic or fair to expect charities struggling to increase Gift Aid sign ups to be forced to buy a whole new suite of technology for their stores in order to solve this problem. We created our digital Gift Aid solution with this in mind – the software is not tied to any system and can be used independently from technology you already use.

While we can provide multi-purpose EPOS systems, we appreciate that sometimes money is tight or that sometimes you just want to solve one problem before starting on the next.

If you’d like to know more about finding technology that truly works for you, get in touch at info@charityexpertise.com.


CI and Automated Deployments


Automating deployments with TeamCity has saved us hours of headaches! Finding the setup that works best for us has taken some time, but now we’re there, the great mist that was hanging over web deployments has lifted and the world feels like a clearer, simpler place.

A few years ago, we were in a bad place.

We didn’t really know it yet, but we were definitely not set up for reliable, repeatable and scalable deployments. In fairness, what we had worked. With a relatively small team and not many applications, keeping on top of things wasn’t too onerous and generally there weren’t many mistakes.

Fast forward a few months and the system was seeing some growing pains. The development/test environment we experiencing contention, people overwriting each other’s changes and no one really knowing what version they were looking at. All deployments were manual, publishing from developer machines and copying the files. In today’s world though, this is practically a criminal offence! (It’s at least morally indefensible…)

Over the coming months and years we embarked on a journey of discovery. For some of us, the journey felt familiar – we’d covered much of the ground before – but for others it was a mysterious (and scary) voyage into the unknown. Today we’re in a better place, and here’s why…

We’re using git for source control.

Previously we had a large and unmanageable SVN repository. Moving to git was challenging, but in the end the benefits are proving to be well worth it. As things stand:

  • The single large repo is now many smaller ones
  • Managing code between branches (dev, release, feature, hotfix, master) is simple
  • Core modules are distributed using internal NuGet, dependencies are nicely managed
  • All repositories are centrally hosted using Stash

Continuous Integration (CI), is the first step for anyone towards salvation. We have TeamCity working hard validating that all our code in all branches builds once it’s checked in, giving us a confidence in our code base that we just didn’t have before. Additional steps run unit tests and create deployment packages. We also use features in TeamCity such as assembly versioning, to allow us to track which version of the code a particular DLL was built from.

Speed up and take out the human

Automating deployments speed up getting code into a working environment, and takes away the human element of deploying code. We have taken advantage of publish profiles and web deploy in Visual Studio and IIS to control where applications are deployed and with what configuration. Web.config transforms make managing multiple environment configurations a breeze, and you get consistent and reliable results. No more searching for hours to find that a setting wasn’t added to a particular web.config file!

Automating this much of the process has allowed us to create more environments, with better controls and clearer defined purposes. A test and production environment are fine in most cases, until you’re doing formal release testing and want to QA features that are for a future release. So we added another environment specifically for this purpose. Want an environment that’s more like production so you can do final validation checks before deploying? Easy, we created a staging environment.

All in all we now have 5 environments, all built from a specific code base:

Environment Built from Purpose
CI “dev” branch For developers to validate their changes with everyone else’s in an integrated environment
Test “dev” branch Owned by QA. For testing features that are in the current development iteration.
Release Verification “release/x.x” branch Owned by QA. For validating a release candidate. Only bug fixes relating to this release get deployed to this environment.
Staging “master” branch Owned by Infrastructure. Pre-live validation environment to perform final checks on a release before it’s deployed to production.
Production “master” branch The real deal

At first glance that’s a lot of environments, but thanks to automation the overheads are minimal compared to the benefits. Deployments are one click and take just a few minutes.

Streamlined Processes

Even so, we streamlined the process of creating new builds and environments. First of all, I want to say that TeamCity and Web Deploy are fantastic tools. If you’re not using them, you should be!

Creating a new set of environments is fairly straightforward. You do have to create the sites in IIS and point them to a place on the file system. You also have to set up the security correctly, but then that’s about it. Web deploy does the copying of files and the configuration side of things for you.

TeamCity allows you to create build configuration templates, which means new builds can be set up in just a few minutes. By selecting the template, then overriding a few parameters, your build is ready to go!

So, the scary part is clearly the production deployment, and there are some things you can do here to make it less scary:

  • Create a short MSBuild script to run before the deploy step that backs up the current production code to a known location. This means you can easily rollback if something’s gone wrong just by copying the files back into place.
  • Secure access to the production build configurations. There’s nothing worse than an accidental or unexpected deployment, and you can minimise the risk of this in TeamCity by having all your production deploy configurations in a separate project. This also means you can restrict access to just your infrastructure team, that way it’s impossible for developers to accidentally push changes into production without authorisation.

And that’s it! It took us quite a while to get here, and we’re by no means in a perfect place, but a lot of the stress and pain is now gone from validating and deploying our web projects. That means we can spend more time creating great products and less time worrying about deployments.

Ralph Cooper, Head of Software Development