If you want to go surfing but you live smack dab in Kansas, it could be a challenge. (Unless you want to go paddle in a lake.)
If you want to create a new and innovative software to change the world, but your company and its bureaucratic processes are stuck in the 1980s, it could possibly take a while. (Compared to a start-up organization, for sure.)
If you want to write Objective-C, and all you have is a PC, there will be some challenges. (Buy a Mac!)
When goals and environment are not on the same page, there is a disconnect. That disconnect can cause some major problems, especially in business – You have to change your circumstances.
Your environment must match and support what you want to accomplish. That is, if you want it to work seamlessly and without bumps in the road.
For example, Agile development. Agility is the verb that has been assigned as the solution for IT’s slushiness in developing custom software. We have had great success in applying Agile processes to the development cycle to our clients. However, if the mechanism for software development is not Agile, then there will be some definite problems. It can be a waste of time, resources, and peoples’ patience as they get more and more frustrated.
So how do we fix it? Listed below are things that should be put into place in order to effectively support an Agile software construction environment:
Consistent Application Architecture
Consistency promotes predictability, scalability, and re-usability in software development. Impacts of applying new frameworks and patterns can be predicted. Consistent application structure and application of frameworks allows developers to functionally decompose their work efforts in a consistent manner for level of effort and resource planning. Additionally, consistency promotes reuse, as generalized components can rely upon an expected consuming application structure.
Convention Over Configuration
Whenever possible, introduce generalized mechanisms that allow developers to start writing code out of the box. Eliminate having to set up or visit configuration files, hunting down libraries. The developer should always produce code that is verifiable and directly solving a problem space. (As opposed to having perform setup or initialization activities.)
Continuous Integration Environment
Establish an automated mechanism that “continuously” and frequently compiles/builds/deploys/tests code committed by the team to the repository. This environment helps ensures quality, and eliminates the inefficiencies developers can have when dealing with code resulting from merging activities. Less time is spent setting up demo and prototype environments for verification, allowing developers to keep their stream of consciousness in providing a solution.
Define and maintain a basic application that represents your application architecture. This can then be used a medium to describe how applications are constructed with your architecture, and communicate and prove new frameworks or technologies. Scaling Agile development can also be enforced, by documenting steps required to build this application. New resources can then go through this exercise which will expedite their learning curve on their own, without taking away from existing resources.
Provide an environment in which the development team can easily install supporting software such as application servers or database instances. This of course, is limited to just the construction phase of the project, but by providing this “low ceremony” ability, agility is achieved by passing the normal IT administration protocol during construction. Things can happen quicker, and after an Agile spring/iteration verification the team will have a better understanding of the “to be” production environment. At the same time quickly deliver early working deliverables and versions of the software.
Take advantage of WIKI software, which will provide a way to communicate your application architecture and development environment. The WIKI brings agility to documentation, as it can be edited in-line allowing developers to collectively contribute to it, thereby helping to keep documentation fresh and relevant.
… Just to name a few.
If you’re going to do something, do it right! Although many make the disconnect work for their company, wouldn’t it make it easier to have a “no bumps in the road” agile software construction environment? Agile tells us to always be looking for ways to do things better– start now!
— David Pitt and Lauren Fournier, firstname.lastname@example.org