Is DevOps or Full Stack Developer a new Role?
Who has not heard about DevOps? Who has not received an email from a HR recruiter looking for Full Stack Developer? In this article I will try to analyze if these new concepts are really new roles or new names for the same thing.
Developer Evolution
I have been a developer for more than 16 years now, although my current job title says another thing, I have the chance to still develop almost everyday. But, when I walk through my first steps, I remember things were quite different.
Like almost every single thing in this century, the developer scorecard and responsibilities have changed a lot. Let me try to explain what I think has happened.
Ten, or more, years ago development lifecycle was different. Waterfall and RUP were the standard to follow, and projects were composed by a lot of roles that have specific roles: Analyst, Designers, Developers, Architects, Testers, Configuration Management, Infrastructure, etc etc etc.
So, the process was like this…
It was unimaginable asking a developer to write a functional or performance test or to run a deployment. Concepts like Continuous Integration, Automation Testing or Agile were in diapers.
Lets go more technicals. There was less programming languages than today, and developers only need to know one of them. Frameworks were huge and the development environment were even more complex. But, they tried to resolve everything for you, you just need to write code and commit it. There were no need to know about deployment strategies, or database implementation or even integration with other systems. Other people took care of it. Then, the projects were staffed with a lot of people, and applications ended up a monolithic core.
What has changed?
In the last decade, IT business has continued growing exponentially, and new tendencies have arisen. Let’s review some of them:
- Agile & Scrum methodology: Today’s clients needs cannot be fulfilled with waterfall approach. Business change too often, time to market is everyday shorter, people do not have patience now. Those are some reasons why Agile Methodologies were born. Agile method makes us run a full development cycle in a Sprint, so concepts like Continuous Deployment, Automation Testing have become as important as coding. Agile method suggests us keeping team size small, so everyone must contribute with new knowledge.
- New programming languages: There has been an explosion of new languages or tools in the last years. They haven't arrived to replace Java, C, or PHP. Nevertheless, they are meant to cover gaps or improve poor implementations. So, as a developer, it is a must to at least master a few of them and to be flexible to rapidly learn new ones.
- SOA, Microservices: SOA Architecture was born in this century. At the beginning not so much change. Main Vendors served us with huge ESB that ended up working as Monolithic Core. But with the new deployment techniques, virtualization and now with Docker everything is changing in front of us right now. Production environments now can live in our laptops, deployment strategies are defined by developers, containers with specific configuration can be deployed together.
- Continuous Integration, Testing, Deployment, etc: If you have to do it more than once, automate it. There are more applications than developers and it will continue like that. So, manual stuff is not feasible. There are new deployment languages like puppet, ansible, etc to help us. Automation testing has awesome open source frameworks and tools that must be used to validate every single feature you develop. And coordinating all these, configuration management tools like maven or gradle to coordinate all this. Can you continue doing your job without knowing all this?
Developer 2.0
It is a fact that the application development world has changed in the last years, and developers must adapt to the new needs. The minimum requirements to be a developer have grown and it is not longer valid to be only an expert in one or two skills.
Since Agile Methodologies and Microservices approach require small teams to cover the whole process, developers’s responsibilities have also widen and now. They must be involved in automation testing, deployment strategies, configuration management process, design, etc.
Of course, it is not possible to master all skills but it is important to understand that the ability of coding doesn't make you a successful developer anymore.
New concepts like “DevOps” or “Full Stack Developer” have appeared in the last years. I read that they are new roles, but I think they hide the fact that the developer's role has changed. They are masquerading the ugly truth, we must mutate/adapt/improve.
Do you know what is expected from you as a developer these days?
As I wrote at the beginning, ten or more years ago, the responsibility of a developer involved only writing code and unit test. What about now?
Here is a list of task that you must consider nowadays:
- Technical Analysis: If not already decided, choose technologies to be used wisely, make a technical design, understand production environment and deployment needs.
- Code: At least, this one has not change.
- Develop Unit test: This is a must!!!!
- Develop integration test: Unit test isn't enough. CI environments needs integration test to validate pipelines and microservices.
- Run analysis tools: This is the quality card of your code. You decide if you want to be good or not at your work.
- Integrate into continuous Integration environment: yes, it is your responsibility.
- Deployment involvement: Decide (if it is not already done), develop and test deployment recipes for your code. Your work ends when your tested code can be shipped automatically.
And, do not forget, all this is meant to be done in one sprint! Thank god there are a lot of new tools like Jenkins, Docker, Gradle, Maven, Ansible, Puppet that help us to speed things up a lot.
Hope you get on the bus, it is never too late!!!