Who has not heard about DevOps? Who has not received an e-mail from an 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.
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 every day. But, when I walked 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, the development lifecycle was different. Waterfall and RUP were the standards 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 to ask 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.
Let’s be more technical. There were less programming languages than today, and developers only need to know one of them. Frameworks were huge and the development environment was even more complex. But, they tried to resolve everything for you, you just needed 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, the IT business has grown exponentially, and new tendencies have arisen. Let’s review some of them:
- Agile & Scrum methodology: Today’s client’s needs cannot be fulfilled with a waterfall approach. Business changes too often, time to market is everyday shorter, people do not have patience now. Those are some reasons why Agile Methodologies were born. The 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. The agile method suggests we should keep team size small, so everyone must contribute with new knowledge.
- New programming languages: It 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 changed. Main Vendors served us with huge ESB that ends up working as Monolithic Core. But with 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?
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 requires small teams to cover the whole process, developers’ responsibilities have also widened 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 and 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 changed.
- Develop Unit test: This is a must!!!!
- Develop integration test: Unit test isn’t enough. CI environments need 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!!!