Answers: <p>In terms of development procedure, you should consider using the <a href="https://en.wikipedia.org/wiki/Agile_software_development" rel="nofollow noreferrer">agile method</a>. This is the most <a href="https://insights.stackoverflow.com/survey/2017#work-which-methodologies-do-developers-use" rel="nofollow noreferrer">widely used method of software development</a> and has proven itself. Within the scope of the agile method <a href="https://en.wikipedia.org/wiki/Pair_programming" rel="nofollow noreferrer">Pair programming</a> will allow you to spool up another developer to assist with your projects when you are ready and find that you have more work than you can handle. You can then move into a <a href="https://en.wikipedia.org/wiki/Agile_software_development#Agile_software_development_practices" rel="nofollow noreferrer">standard agile method like scrum/kanban/scrumban</a> (or continue the pair programming if you find you like it!)</p>
  
  <p>One particular reason for choosing this method is that is lends itself well to DevOps and Continuous Integration. In fact, one could describe DevOps as a <em>specific way</em> of implementing the agile method. The Iterative, incremental and evolutionary philosophy of agile and the very short feedback loop and adaptation cycle <a href="https://en.wikipedia.org/wiki/Agile_software_development#Quality_focus" rel="nofollow noreferrer">marry beautifully</a> with DevOps/Continuous Integration and provide a solid foundation to build upon.</p>
  
  <blockquote>
    <p>Here in the agency we have a infrastructure team as well, with the possibility to set-up our own internal or external servers to handle things.</p>
  </blockquote>
  
  <p>Make good friends with the infrastructure team. Involve them early and often and drive them towards a <a href="https://en.wikipedia.org/wiki/Infrastructure_as_Code" rel="nofollow noreferrer">Infrastructure/Configuration as Code</a> philosophy which will allow you to collaborate closely with them. While it might seem like it is faster to just do it manually, doing so is creating <a href="https://en.wikipedia.org/wiki/Technical_debt" rel="nofollow noreferrer">technical debt.</a> In a few years when it comes time to upgrade, no one will remember how the thing is built. It will also allow the infrastructure team to look good. Never again will they make a mistake or forget a step during deployment. Either the deployment code works or it doesn't and it will deploy exactly the same way it deployed in test/staging - making deployments and upgrades easy and horizontal scaling a breeze. Ignoring these techniques also slows down <em>your</em> development. If you can just fire up a new server, have it pull down (and compile) your latest git commit, run through an automated testing suite and then E-mail you the results while you go do something else it is a huge time-saver.</p>
  
  <p>If you can, utilize the cloud - with Amazon for instance, a lot of the tools are <a href="https://aws.amazon.com/products/" rel="nofollow noreferrer">already built for you</a>. While this might make your Infrastructure team leery, just remind them that the cloud is just someone elses computer. All the cloud does is provide you with hardware. It will still require someone from the infrastructure team to install maintain and operate it. And it will allow you to avoid scalability issues. The database problems, storage and backup issues and headaches have now been outsourced.</p>
  
  <blockquote>
    <p>and I have little control over the client's servers.</p>
  </blockquote>
  
  <p>See what you can do about this. Consider leveraging a tool like <a href="https://www.theforeman.org/" rel="nofollow noreferrer">The Forman's</a> Katello scenario (I like to deploy it with Salt Stack personally - I don't like ruby) which will allow you to manage and <a href="https://theforeman.org/manuals/1.15/index.html#5.2ComputeResources" rel="nofollow noreferrer">deploy your VMs on nearly any iron or cloud (including bare metal)</a>, manage the configuration of that hosts using Salt Stack, Chef, Puppet or Ansible, manage your docker containers and manage updates to your machines. This will allow you to then easily provide the code to your client to either A) automate or B) manually deploy their updates and deployments. Once you have proven the value of the speed and efficiency this method gives you, you may be able to simply use these same tools to spawn your client a copy of this stack for managing their environment or you may be able to talk/upsell your clients into letting you manage these deployments - The Foreman will allow you to configure sites and organizations (as well as mange users if paired with FreeIPA) so you can configure multi-tenancy. And the project is <a href="https://en.wikipedia.org/wiki/Satellite_(software)" rel="nofollow noreferrer">backed and supported by Red Hat</a>.</p>
  
  <p>If you have any doubts about the above, I recommend you pick up a <a href="http://rads.stackoverflow.com/amzn/click/0988262592" rel="nofollow noreferrer">copy</a> of "The Phoenix Project" of the <a href="http://rads.stackoverflow.com/amzn/click/B00VATFAMI" rel="nofollow noreferrer">Audiobook</a> which illustrates very well the value and benefit of the above.</p>
  
  <blockquote>
    <p>One of the first things I plan to do, is to elect a preferred development language and framework</p>
  </blockquote>
  
  <p>If you go this route, just make sure to standardize on a language that <a href="https://en.wikipedia.org/wiki/Representational_state_transfer" rel="nofollow noreferrer">plays well with REST</a> most DevOps stuff uses this interface.</p>
  
  <p>And finally,</p>
  
  <blockquote>
    <p>The entire dev team had been hired by another company - and they didn't have a solid process as well, only a few gits here and there</p>
  </blockquote>
  
  <p>Do what you can to merge these together into one place. It will make your life a heck of a lot easier.</p>
  
Answers: CC BY-SA 3.0
Answers: 2017-07-07T15:38:54.437Z
Answers: 2017-07-07T15:45:58.663Z
Answers: 2017-07-07T15:45:58.663Z
Answers: James Shewey
Body: <p><strong>Background:</strong></p>
  
  <p>Three months ago I was called to do a freelance job for a rather big agency, with 40~50 employees.</p>
  
  <p>Things were chaotic when I got here. The entire development team had been hired by another company one month ago, and there were a lot of overdue jobs. I freelanced here for about three weeks, until they hired me. Since then, I had been working hard to fix things, and there were so many things to do that I had to let go of the process to focus on delivering the software.</p>
  
  <p>Now, three months later, the dust have finally settled down, and now I'm looking forward to implement good development practices and methodologies, mixing development, deployment and project management.</p>
  
  <p><strong>Scenario:</strong></p>
  
  <p>We have several different clients, most of them with their own servers. Some of them have their own infrastructure team to handle their servers. Projects are in different languages, and I have little control over the client's servers.</p>
  
  <p>Throughout the day, there might pop up several demands for different clients, and I must deliver them as quick as possible.</p>
  
  <p><strong>Conclusion:</strong></p>
  
  <p>I have to deliver things quickly, but I feel a urge to employ a methodology to do it, because I know that if I just keep doing things without proper control, some thing will certainly go wrong sooner than later.</p>
  
  <p><strong>My two cents:</strong></p>
  
  <p>One of the first things I plan to do, is to elect a preferred development language and framework, so we can specialize in something. Other than that, I'm not sure what to do.</p>
  
Comments: CC BY-SA 3.0
Comments: 2017-07-06T16:08:06.113Z
Comments: First of all, I'd work on building a proper continuous integration system to enforce tests on all changes and ensure there's no regression.
Comments: Tensibai
Comments: CC BY-SA 3.0
Comments: 2017-07-06T17:37:34.860Z
Comments: @Tensibai can I do continuous integration even if I have little control over production servers?
Comments: Lucas Bustamante
Comments: CC BY-SA 3.0
Comments: 2017-07-06T20:55:40.157Z
Comments: Interesting scenario.. Do you have buy-in from the other devs? Something is making me feel that things wouldn't have gotten to this point if they shared the same mentality as you.
Comments: Craig Joachim
Comments: CC BY-SA 3.0
Comments: 2017-07-06T21:03:27.513Z
Comments: @lucas CI is about running test in an isolated environment, as near as possible as production, but at least something autonomous to run tests ND ensure everything still work as expected
Comments: Tensibai
Comments: CC BY-SA 3.0
Comments: 2017-07-07T13:21:00.337Z
Comments: @CraigJoachim, I'm the only dev! haha. The entire dev team had been hired by another company - and they didn't have a solid process as well, only a few gits here and there
Comments: Lucas Bustamante
Tags: <deployment><methodology>
Title: Methodology for software development and deploy in fast-paced agency
UserDisplayName: Lucas Bustamante
ThreadText: # Methodology for software development and deploy in fast-paced agency
  
  (Asked by: username_0 on 2017-07-06)
  
  **Background:**
  
  Three months ago I was called to do a freelance job for a rather big agency, with 40~50 employees.
  
  Things were chaotic when I got here. The entire development team had been hired by another company one month ago, and there were a lot of overdue jobs. I freelanced here for about three weeks, until they hired me. Since then, I had been working hard to fix things, and there were so many things to do that I had to let go of the process to focus on delivering the software.
  
  Now, three months later, the dust have finally settled down, and now I'm looking forward to implement good development practices and methodologies, mixing development, deployment and project management.
  
  **Scenario:**
  
  We have several different clients, most of them with their own servers. Some of them have their own infrastructure team to handle their servers. Projects are in different languages, and I have little control over the client's servers.
  
  Throughout the day, there might pop up several demands for different clients, and I must deliver them as quick as possible.
  
  **Conclusion:**
  
  I have to deliver things quickly, but I feel a urge to employ a methodology to do it, because I know that if I just keep doing things without proper control, some thing will certainly go wrong sooner than later.
  
  **My two cents:**
  
  One of the first things I plan to do, is to elect a preferred development language and framework, so we can specialize in something. Other than that, I'm not sure what to do.
  
  **Tags:** deployment, methodology
  
  > **Comments:**
  > **username_1**: First of all, I'd work on building a proper continuous integration system to enforce tests on all changes and ensure there's no regression.  
  > **username_0**: @username_1 can I do continuous integration even if I have little control over production servers?  
  > **username_2**: Interesting scenario.. Do you have buy-in from the other devs? Something is making me feel that things wouldn't have gotten to this point if they shared the same mentality as you.  
  > **username_1**: @username_0 CI is about running test in an isolated environment, as near as possible as production, but at least something autonomous to run tests ND ensure everything still work as expected  
  > **username_0**: @username_2, I'm the only dev! haha. The entire dev team had been hired by another company - and they didn't have a solid process as well, only a few gits here and there  
  
  ---
  
  ## 1 answers
  
  ### Answer by username_3 on 2017-07-07. Score: 3
  
  In terms of development procedure, you should consider using the [agile method](https://en.wikipedia.org/wiki/Agile_software_development). This is the most [widely used method of software development](https://insights.stackoverflow.com/survey/2017#work-which-methodologies-do-developers-use) and has proven itself. Within the scope of the agile method [Pair programming](https://en.wikipedia.org/wiki/Pair_programming) will allow you to spool up another developer to assist with your projects when you are ready and find that you have more work than you can handle. You can then move into a [standard agile method like scrum/kanban/scrumban](https://en.wikipedia.org/wiki/Agile_software_development#Agile_software_development_practices) (or continue the pair programming if you find you like it!)
  
  One particular reason for choosing this method is that is lends itself well to DevOps and Continuous Integration. In fact, one could describe DevOps as a *specific way* of implementing the agile method. The Iterative, incremental and evolutionary philosophy of agile and the very short feedback loop and adaptation cycle [marry beautifully](https://en.wikipedia.org/wiki/Agile_software_development#Quality_focus) with DevOps/Continuous Integration and provide a solid foundation to build upon.
  
  > Here in the agency we have a infrastructure team as well, with the possibility to set-up our own internal or external servers to handle things.
  
  Make good friends with the infrastructure team. Involve them early and often and drive them towards a [Infrastructure/Configuration as Code](https://en.wikipedia.org/wiki/Infrastructure_as_Code) philosophy which will allow you to collaborate closely with them. While it might seem like it is faster to just do it manually, doing so is creating [technical debt.](https://en.wikipedia.org/wiki/Technical_debt) In a few years when it comes time to upgrade, no one will remember how the thing is built. It will also allow the infrastructure team to look good. Never again will they make a mistake or forget a step during deployment. Either the deployment code works or it doesn't and it will deploy exactly the same way it deployed in test/staging - making deployments and upgrades easy and horizontal scaling a breeze. Ignoring these techniques also slows down *your* development. If you can just fire up a new server, have it pull down (and compile) your latest git commit, run through an automated testing suite and then E-mail you the results while you go do something else it is a huge time-saver.
  
  If you can, utilize the cloud - with Amazon for instance, a lot of the tools are [already built for you](https://aws.amazon.com/products/). While this might make your Infrastructure team leery, just remind them that the cloud is just someone elses computer. All the cloud does is provide you with hardware. It will still require someone from the infrastructure team to install maintain and operate it. And it will allow you to avoid scalability issues. The database problems, storage and backup issues and headaches have now been outsourced.
  
  > and I have little control over the client's servers.
  
  See what you can do about this. Consider leveraging a tool like [The Forman's](https://www.theforeman.org/) Katello scenario (I like to deploy it with Salt Stack personally - I don't like ruby) which will allow you to manage and [deploy your VMs on nearly any iron or cloud (including bare metal)](https://theforeman.org/manuals/1.15/index.html#5.2ComputeResources), manage the configuration of that hosts using Salt Stack, Chef, Puppet or Ansible, manage your docker containers and manage updates to your machines. This will allow you to then easily provide the code to your client to either A) automate or B) manually deploy their updates and deployments. Once you have proven the value of the speed and efficiency this method gives you, you may be able to simply use these same tools to spawn your client a copy of this stack for managing their environment or you may be able to talk/upsell your clients into letting you manage these deployments - The Foreman will allow you to configure sites and organizations (as well as mange users if paired with FreeIPA) so you can configure multi-tenancy. And the project is [backed and supported by Red Hat](https://en.wikipedia.org/wiki/Satellite_(software)).
  
  If you have any doubts about the above, I recommend you pick up a [copy](http://rads.stackoverflow.com/amzn/click/0988262592) of "The Phoenix Project" of the [Audiobook](http://rads.stackoverflow.com/amzn/click/B00VATFAMI) which illustrates very well the value and benefit of the above.
  
  > One of the first things I plan to do, is to elect a preferred development language and framework
  
  If you go this route, just make sure to standardize on a language that [plays well with REST](https://en.wikipedia.org/wiki/Representational_state_transfer) most DevOps stuff uses this interface.
  
  And finally,
  
  > The entire dev team had been hired by another company - and they didn't have a solid process as well, only a few gits here and there
  
  Do what you can to merge these together into one place. It will make your life a heck of a lot easier.
  
  
  ---
  
  