Overview Of Software Development Processes

"Forewarned, forearmed; to be prepared is half the victory." - Miguel de Cervantes 

Introduction

In previous article, I discussed what is required for one to become a mindset good software developer. In this article, I will discuss the various processes a new developer comes across in the IT companies. Many new developers are introduced to a labyrinth of bureaucracy and I will try to throw some light on it so the new developers are well prepared on the first day of their new job.
  • Building software is a complex process

    It has many challenges. Over time, many processes have arisen to keep software development on the right path. Many software projects fail, while few succeed. The software built sometimes makes end users happy and sometimes times it doesn't. They say the only thing, which is constant in life is change. To handle it, the software development companies have come up with the software development life cycle.

  • Software flow - The software in the organization flows primarily through three phases, which are-

    • Development
      Development team writes the code, builds user interfaces and pushes the software to Quality Assurance, so as to test.

    • Quality Assurance
      Quality Assurance team tests the written software written by the development team. It finds bugs and sends it back to the developers to fix them. All the bugs cannot be fixed before the software is released to the end users. Some are involved in the task of manual testing while others are involved in some automated testing.

    • Production
      Once it is developed, quality assurance teams and others feel comfortable with the software which they have built after some demos and subsequently the software is moved to the production for the end users. For the developers and quality assurance members, this can be very fulfilling and frustrating at the same time. The teams will have to rapidly act on production fixes because if the system is down, the end users cannot do their day to day jobs.

  • Organization Structure

    Here are how  most IT organizations are structured. The job, position, hierarchy, and titles may change, based upon the how big or small the organization is. Startups may be flatter with respect to hierarchy and big banks, health care, insurance or government organizations may have many additional layers like Project Manager, Product Manager, Tech Lead, Architect, Vice President, President, Chief Technology Officer, Chief Security Officer etc. Here are the primary job positions; a new developer comes across in an IT department. 

    • Manager or managers
      These are the ones, who make hiring/firing decisions and they are basically like the captain of the ship.

    • Developers/Programmers
      These people build software. There are various types of them but primarily there are two types of developers Front End Developers, who build User Interfaces and Back End Developers, who build Business layer and database logic.

    • Business Analysts/Testers
      These interact with the end users and have domain knowledge. By domain knowledge, I mean if you are working on building the health care software, they know a lot of inner workings of the health care industry. Some of them will write the test cases and test the software, which you have built.

    • Build Engineers
      All the organizations do not have build engineers but big organizations definitely have build engineers. As I have indicated at the start the software in the organization flows from the development to the quality assurance to the production. Build engineers are those, who promote the software between the various environment through various automated processes like Team Foundation Server, Microsoft Release Management Server, Jenkins etc. 

    • Scrum Master
      Scrum Masters are not available in all organizations. The Scrum Master conducts daily status meetings, conducts planning meetings, creates stories, tasks to track the progress, and removes day to day obstacles for the team.

    • Database Administrator
      In the small organizations, you may not have Database Administrators but the big organizations definitely have Database Administrators. Database administrator takes care of the databases, backups and data security. Software developers will take some time to run into challenges in getting their database changes promoted, from the development to the quality assurance to the production, if it does not have appropriate security checks, if they have have run the query execution plans and seen the changes which they are trying to implement don't mess with the other important tables. Software developers have to take various unknown scenarios to build the software. There are many ways to solve the same problem and you may run into conflict with the database administrators. You may think they are creating unwanted roadblocks but do not take it personally. Considering the end user's data in the production is very important and many database administrators do a great job.

    • System Administrator
      In the small organizations, you may not have system administrator but in a bigger organization, you will definitely have a system administrator. System administrator takes care of the development, quality assurance and production Servers. He applies patches to them, takes care of the security of them, protects them from the various attacks. Many new software developers run into conflict with the system administrator and the primary reason of it is the software developer blurts out it works on my machine.

      Organization Structure


    • The software built by the new software developers works on their machine but does not work in the production and they blurt out to the system administrator or a database administrator by saying it works on my machine , when it does not work in the production or quality assurance environments, so don't be that person. As a software developer, your goal should be to build a software, which will work in all three environments: development, quality assurance and production environments. As you proceed through the environment, you will have lesser permissions and some errors only occur after the software runs for a long time. Thus, add appropriate error handling, logging and make sure your software works in every environment. When it breaks, you can capture more information about the the reason why it broke, so you can fix it.

  • Software development process - Waterfall Vs Agile 

    • Waterfall
      Waterfall model is a sequential design process, used in the software development processes, in which the progress is seen as flowing steadily downwards (like a waterfall) through the phases of Conception, Initiation, Analysis, Design, Construction, Testing, Production/Implementation and Maintenance. In Waterfall model, quite some time is spent on writing up the initial specification document. Waterfall in some situations can discourage the change to initial specifications.

  • Agile

    Agile software development is a group of software development methos in which requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. It promotes adaptive planning, evolutionary development, early delivery, continuous improvement, encourages rapid and flexible response to change. It is a conceptual framework, which focuses on frequently delivering small increments of the working software.

  • Agile is about delivering business value to the end users and releasing the software to the end users after each iteration instead of waiting till the whole Application is built.

  • There will be some epics- a huge 10000 ft overview of the product we are trying to build. The epic will have the user stories and each user story will have the tasks.

  • The stories are put in backlog and team decides how many user stories they will work on during the planning. The team picks the stories during the planning and does them during an iteration. Size of the iteration varies from one week to one month.

  • At the end of the iteration, the stories the team worked are demoed to the end user and if the issues are reported by the end users, they are resolved and the team starts working while the iteration is moved to production. This is primarily agile and it has an advantage over Waterfall. The users are getting the functionality as soon as the team has worked on it.

  • In Agile, the organization have the roles, which are-

    • Product Owner
      Keeps product backlog maintainable. Interacts with the end users. Prioritizes what needs to be worked on by the teams.

    • Development Team
      Mix of developers, testers, designers etc. These people make it happen and they build the software.

    • Scrum Master
      Presides over daily stand up meetings. Removes the obstacles for the development team. Believes in the concept of servant leadership.

    • Stake Holders
      Various members, who are directly affected by the software

    • Managers
      Oversees the various teams, make hiring, technology, budget and human resource decisions.

  • There are various processes in Agile and some of them are- 

    • Kanban
      It is primarily used for high priority production support issues. The tasks rapidly move from between streams like backlog, in progress, production etc. Team sometimes decides to put a limit on how many items can be in each column like at any point of time in development, there cannot be more than 5 in the progress.

      Organization Structure

    • Pair Programming
      It is the software development process in which two programmers will work on the same computer together. One writes the code while other watches and switch the roles. Sometimes one may ask for 15- 20 uninterrupted blocks of time, so they can focus.

    • TDD
      It is the software development process, where the software is written for many different test cases. In the process, the developers are encouraged to write the tests first before they write their code. It is good for the quality and maintenance of code base but it may take more time initially to setup the test cases.

  • Waterfall team tries to get almost all the requirements upfront and then release fully functional product to the production. In Agile, team builds small parts of software and gets it out to the end users in the production. Most of the IT organizations prefer Agile over Waterfall, nowadays.

References

  1. Developer Mindset
  2. Waterfall model
  3. Agile software methodologies
  4. Software processes
  5. Increment Development Model
  6. https://en.wikipedia.org/wiki/Systems_development_life_cycle
  7. http://www.brainyquote.com/quotes/quotes/m/migueldece125059.html
  8. https://www.visualstudio.com/tfs/
  9. https://www.visualstudio.com/team-services/release-management/
  10. https://jenkins.io/
  11. https://blog.codinghorror.com/the-works-on-my-machine-certification-program/
  12. Pair programming
  13. Test Driven Development