We have seen successful roll-out of Just-In-Time concept in manufacturing. This technique was popularized by Toyota with their car manufacturing process. With proper coordination, they are able to adjust their production line easily when certain demand increases. For example, if report shows increase in demand on a specific model or color, they call their suppliers and receive the parts quick enough to fulfill the demands.
Dell is also good example of a successful JIT execution. They achieved a 4-hour production cycle to support build-to-order process. This means they manufacture computers based on actual orders… no stocks, nor left-overs. This saved the company millions of dollars by eliminating the need for warehouses.
We have also seen the same concept applied to compilers such as Java JIT compiler. The JIT compiler reduces overhead of translating bytecodes by dynamically recompiling bytecodes into its native language. This results to about 40% performance increase in many Java applications.
The principle behind JIT is quite simple, be lightweight with minimum overhead. This results to efficiency in production and agility in adapting to the market demands.
There is a substantial amount of information from the JIT experience that can be applied to software development projects – especially web projects. Web projects are first-to-market, and flex-to-market. First-to-market is netscape, hotmail, yahoo, amazon, and ebay. They are revolutionary. Captured the market because they were the first. Flex-to-market is google, friendster, firefox, and gmail. They are evolutionary. Captured the market because they adopted to the market needs.
JIT Development is key to web projects. It is lightweight. It is agile. It is extreme. It is more with less.
To achieve JIT development, keep the following 5 principles in mind.
Prepare minimum and progressive plan. There is no need to create a full 30+ page project plan. Keep it to minimum but support a process for change.
When planning, start by finalizing the timeline, a.k.a. release plan. Identify the scope and resources afterwards. Keep in mind that projects are time-critical. Time is determined by the market, not by scope nor resources. Scope can be managed by priority. Resources must be flexible and adaptive, build the support structure to achieve this.
Prepare a work breakdown based on deliverables. Make sure all tasks are associated to a deliverable. Keep it lean and avoid fats. If a task does not have a deliverable, remove it – that is overhead, fat. Streamline your activities by ensuring concrete deliverables for every task.
Lastly, support progressive elaboration. A plan is a living document. It breaths within its environment. So make room to breathe air by putting an integrated change control process with your project iterations.
On time, on time and on time. The project triangle is the dependency between time, scope and resource. When triangle changes, keep the time fixed. Flex on resource or scope but always be on time.
Identify the priorities of your requirements by importance based on market demands. In case of delays, drop the least important, do not sacrifice quality over functionality. You can always add new requirements in the next iteration.
Resources must be flexible, your agility to ramp-up or scale-down resources is the key. To do this, find consultants, look for partners or outsource. Develop service level agreements that will meet your quality. Do this before you need them, scrutinize their skills, processes and methodologies. Make it fit to your demands. Establish business relationships.
Document less. Reduce time for documentation. This is overhead, fat. However, business operation requires documentation. So, document only as needed.
Requirements does not need to be well-documented, only well-analyzed. Requirements can be represented in many forms – use cases, site map, diagrams, prototype and others. As long as client and stakeholders understand and agree to the requirements, you are fine. Prepare a good document only after successful implementation. Your process will make up lack of requirements by adopting to changes. Considering that requirement defects has the highest amount of rework needed, might as well implement few requirements rather than wrong requirements.
Forget detailed diagrams, oftentimes they are wrong. It is only during actual coding that the correct details are discovered. Get well-rounded and multi-skilled people that can do design, analysis, coding and testing. Perform peer-reviews. Document only what is necessary (framework, integration) and when necessary (stable code).
Frame the work. Establish standard using an application framework. Look for the most suitable framework from open-source solutions. Use struts or smarty, use hibernate or activerecords. Whatever it is, reuse a framework. This ensures a standard coding process that leads to productivity and efficiency.
Invest in architecture and framework. Setup a core group responsible in establishing standard development strategy. They are responsible in ensuring consistent coding strategy, developing libraries/reusable codes and deploying scaffolds.
Start with a standard then seek for efficiency. With standard codes, refactoring is controlled and performance is consistent. Changes Implement peer reviews.
Iterate. Release weekly if possible. Look for quick wins. Get feedback early. Iterate over the previous process, release it then improve it. Time is critical and there is no need to over-emphasize this.
The end result of JIT Development is a lean process for developing web projects. An opportunity for first-to-market, and flex-to-market.