I have been a developer for a few years and counting and the one thing that still surprises me to this day is when someone says “Don’t you develop (write code) in the dev server?”. This question didn’t bother me in the beginning as I didn’t know the difference.
A dev machine is a computer that you use to write code through an IDE. This article assumes that development starts locally on your dev machine.
A dev server is a computer(server, container) that you use to host your applications so that it is available to the user. The main and important function of a server is to listen in on a port for incoming network requests. A good demonstration of this is the interaction between a Web server and a browser.
This is achieved through the use of web server software ie. apache, IIS, Nginx, just to name a few. Users can be anyone and usually, there are different types of people that test applications in different testing environments. Let me explain what I mean by this:
Once development is done from a local, the code is then pushed into a version control repository ie. Github and then deployed using a pipeline such as Jenkins. What is the use for all these environments?
The application is deployed into this environment to ensure that the application still works as expected and the testing here could be done by a dev or through running tests against the application using scripts.
This environment is used by quality assurance people to test features and run different types of tests - Manual, Regression, Integration and Functional just to name a few.
This environment is used by someone who needs to sign off if the application is working as expected, these people can be Product Owners or people that are paying for the application to be built.
This is the stage where the application is available for customers to use. Please also note that DEV is usually built the same as SIT and the assumption is that UAT is a mirror of production - well this is a story for another day.
In simple terms when you deploy your application into a server it’s usually done by running command(s) that will convert your projects files into a compressed file. Once the compression is done the file(s) are then copied to the server and therefore making the application available to the end-user. The whole deployment process can either be done manually or through the use of deployment pipelines.
According to my experience, having conversations with people that thought developers use dev server to write code is in the word DEV. I then asked the question “what happens when dev is down?” Well, what do you know… I caused more confusion.
The suggestion would be, developers can’t work until someone brings the server back up. Well, this couldn’t be further from the truth all it means is that an environment that we need for testing is not available and in the case of the automated pipeline it means the pipeline is broken.
Essentially I think that if there was no environment called dev (may be called something else) then the confusion could’ve been avoided. In conclusion and in my own words: “A dev server is an environment where you deploy your code, after writing your code locally (dev machine) for further testing”.