top of page
Search

The Road To Continuous Delivery - Part 1

Feb 2, 2012
3 min read

Updated: Aug 18, 2021



The following series of posts are coming from my experience as the head of back-end engineering at Wix.com. I will try to tell the story of Wix and how we see and practice continuous delivery, hoping it will help you make the switch too.


So you decided that your development process is too slow and thinking to go to continuous delivery methodology instead of the “not so agile” Scrum. I assume you did some research, talked to a couple of companies and attended some lectures about the subject and want to practice continuous deployment too, but many companies asking me how to start and what to do? In this series of articles I will try to describe some strategies to make the switch to Continuous delivery (CD).





Continuous Delivery is the last step in a long process. If you are just starting you should not expect that you can do this within a few weeks or even within few months. It might take you almost a year to actually make several deployments a day. One important thing to know, it takes full commitment from the management. Real CD is going to change the whole development methodologies and affect everyone in the R&D.


Phase 1 – Test Driven Development

In order to do a successful CD you need to change the development methodology to be Test Driven Development. There are many books and online resources about how to do TDD. I will not write about it here but I will share our experience and the things we did in order to do TDD. One of the best books I recommend is “Growing Object Oriented Guided by tests”.


A key concept of CD is that everything should be tested automatically. Like most companies we had a manual QA department which was one of the reasons the release process is taking so long. With every new version of the product regression tests takes longer.


Usually when you’ll suggest moving to TDD and eventually to CI/CD the QA department will start having concerns that they are going to be expandable and be fired, but we did not do such thing. What we did is that we sent our entire QA department to learn Java. Up to that point our QA personnel were not developers and did not know how to write code. Our initial thought was that the QA department is going to write tests, but not Unit tests, they are going to write Integration and End to End Tests.


Since we had a lot of legacy code that was not tested at all, the best way to test it, is by integration tests because IT is similar to what manual QA is doing, testing the system from outside. We needed the man power to help the developers so training the QA personal was a good choice.


Now as for the development department, we started to teach the developers how to write tests. Of course the first tests we wrote were pretty bad ones but as time passes, like any skill, knowing how to write good test is also a skill, so it improves in time. In order to succeed in moving to CD it is critical to get support from the management because before you see results there is a lot of investments to be done and development velocity is going to sink even further as you start training and building the infrastructure to support CD.


We were lucky to get such support. We identified that our legacy code is unmaintainable and we decided we need a complete re-write. However this is not always possible, especially with large legacy systems so you may want to make the switch only for new products. So what we did is we stopped all the development of new features and started to progress in several fronts. First we selected our new build system and CI server. There are many options to choose from, we chose Git, Maven, Team City and Artifactory. Then we started to build our new framework in TDD so we could have a good foundation for our products. Note that we did not anything that relates to deployment (yet).


Building our framework we set few requirements for ourselves. When a developer checks our code from Git he should be able to run unit test and integration tests on his own laptop WITHOUT any network connections. This is very important because if you depend on fixtures such as remote database to run your IT, you don’t write good integration tests, limit to work only from the office, your tests will probably run slower and you will probably get into trouble running multiple tests on the same database because tests will contaminate the DB.



 
 
 

132 Comments


nancywalker40524
7 hours ago

What draws my attention to building management skills through practical situations is the possibility of making an unfamiliar subject feel closer to everyday life. A realistic scenario can expose how different decisions affect a team's work. I would keep that thought nearby when looking for ideas about management skills training. I am more curious about the process than a polished result, because the steps in between are usually where questions appear. Which situations are most useful for practising management before taking responsibility for a team?

Like

susanclark765
10 hours ago

The topic of using familiar characters in preschool learning gives me a few things to think about, especially when the discussion moves beyond general advice. A familiar character can make a new classroom routine feel easier to approach. I would use that point as a starting question when considering preschool storytelling activities. I would be interested in a simple example, because it is often the ordinary details that make an idea memorable. How can a story character support learning while leaving children room to create?

Like

stevenlee67326
11 hours ago

Considering developing a reflective approach to learning, I keep coming back to the difference between knowing about an idea and putting it into practice. Looking back at a task can reveal which part was difficult and which strategy helped. Seen this way, reflective learning habits becomes a topic to explore rather than something to sum up too quickly. I do not have a settled view yet, but this seems like a good place to slow down and look more closely. How can reflection remain practical rather than becoming another form to complete?

Like

brianthompson239
12 hours ago

A conversation about understanding media messages more carefully seems most useful to me when it leaves space for uncertainty and further questions. Separating a claim from the evidence offered for it makes a message easier to examine. I would use that point as a starting question when considering media literacy skills. I do not have a settled view yet, but this seems like a good place to slow down and look more closely. What questions should readers ask before sharing a striking headline?

Like

johnking42345
2 days ago

Thinking about exploring the relationship between nature and wellbeing, I find the smaller practical questions more interesting than a quick conclusion. Noticing a familiar outdoor place can offer a simple starting point for thinking about our surroundings. It also gives the phrase ecopsychology and wellbeing a clearer meaning than a label on its own. I would probably come back to this question after trying to work through one concrete example rather than deciding immediately. How could a nature activity leave space for different personal responses?

Like
bottom of page