Do you want your development team to deliver well-engineered, well-designed code at speed?
When asked this question, different people respond differently. They say it sounds very interesting, but what I really want is to
Create a good impression on customers
Improve the quality of my talent pool
Deliver high quality releases on time
PowerBoost is perfect!
These are the problems that PowerBoost solves
Delay and defects plague software development. PowerBoost is a complete system that is designed to improve developer productivity, and it helps developers deliver high-quality releases faster and at a sustained pace.
Most training for developers focus on giving information. The developers are expected to figure out how to incorporate this information into their daily routine. PowerBoost gives developers specific processes that they will use every day to write code faster and of better quality.
Everybody is frustrated when software does not behave as expected or fails unexpectedly. Often the organization has a wrong impression of how the customer perceives them. They dismiss customer complaints as a small problem that will be fixed in the next release. High-quality releases create a great impression on customers. PowerBoost sets up daily rituals that will make a huge difference in the quality of the release.
Strength and Stamina
In the PowerBoost workshop, developers are given practical training to improve their approach and technique. These complement the developer's skills by providing best practices to follow in any situation. These practices have come from refining and field-testing many techniques over years in the industry. This is equivalent to giving strength and stamina training to sportspersons'. See here for more on this.
How was PowerBoost Created?
PowerBoost was created by Charles and GK. This pair has more than forty years' experience in the software industry.
They saw smart developers with the best of intentions struggling to deliver on time. Some people were more productive than others. They looked at intelligence, experience, knowledge and technical skills, but none of these seemed to be the deciding factor on what made a particular developer productive.
Intrigued, they started researching this topic. There were many scattered ideas on this issue, but there was no coherent system. They field-tested many ideas to see what worked and what did not work. They gathered the ideas that worked into a coherent system, which they deliver in a hands-on workshop. For example, see this or this
The PowerBoost Intervention
The PowerBoost intervention is a three-day intense workshop and optional eight-week follow-up by industry veterans.
The three-day workshop
The workshop transforms developer behavior and gives them skills that they will use throughout their career.
The workshop ensures enthusiastic participation by having an on-going game with rewards that is tied to the learning process in the workshop.
The entire workshop is focused on learning through doing. PowerBoost consists of a proven set of rituals, processes, and techniques. Participants use what they are taught to complete individual assignments.
At the end of three days, the participants will have created working software, modified code written by other participants and undergone one-on-one code review with the trainer.
The eight-week follow-up
The follow-up session ensures the processes learned in the workshop are applied in assignments.
Each week there are two phone calls with a structured questionnaire and open discussion. There is also a weekly live on-site / video conference session. During this session, a refresher of one section of the workshop is done. Also, a detailed discussion of any issues faced in live assignments are discussed and addressed.
Some key concepts that make PowerBoost so effective
How will I ever deliver code on time?
This is a question that haunts many software development teams. The plan was to deliver the release in three months, but it took six months. Everybody is stressed out and upset.
Why is this so common and how can we change this? There are two problems here. (1) How good is the SDLC? (Software Development Life Cycle) and (2) How productive are the developers?
Most people try to solve problem 1 - improve the SDLC. Everyone starts with 'waterfall is wrong'. Maybe we should use Agile. Maybe we need Test Driven Development. Behaviour Driven Development. Kanbaan. Story Points. Planning Poker. When you improve your SDLC, you start delivering faster with the same developers.
But what about problem 2 - the productivity of your developers? Could you do something that allowed the same developers to deliver the release in four months with the same SDLC?
Development is a skill like any other, and training developers will improve their productivity.
Why do so few people spend time to solve problem 2? Developer productivity is poorly understood, so nobody is clear what needs to be done. So before we can decide what training will improve development skills we need to get an understanding on what exactly is developer productivity.
There are many definitions of developer productivity, but one good definition is - the ability to write well-designed, well-engineered, code at speed.
Let's break this down.
What does it mean to write code at speed?
A productive developer focuses on delivering the right functionality quickly. If he does not deliver the right functionality, we will have to re-work a lot of the code, and that is wasted time and effort. So the better he is able to understand what is required the faster he delivers.
There are two types of tasks that you can be asked to do. Tasks you already know how to do, for e.g. drive from home to work. Tasks that you don't know how to do, but have to learn and do simultaneously. Drive from your home to a friend's house in an unfamiliar neighborhood, that you have never visited before. Software development is a mix of these two type of tasks. So you often have to learn as you are working. But this can result in a developer getting stuck in dead-ends and unproductive work. You need to have the right mindset to be able to learn and deliver simultaneously and to make sure you don't get "stuck".
Software is very much a mental game. The developer needs to know how to manage his energy to play this game well. There are many studies that show that mental tiredness causes careless mistakes. Training developers to do work appropriate to their energy levels makes them more productive.
What does it mean to deliver well-engineered code?
Delivering code quickly is useless if the delivery is full of defects. If time is not spent on proper engineering, the initial release may go out earlier. However, the defects will prevent customers from being able to use the software well. The point in time customers gets functionality that they can use, that is when the delivery is complete.
There is another downside, there will be a lot of complaints and defects reported with improperly engineered code. Addressing these is actually stealing time away from new features. So it slows you down twice.
What does it mean to deliver well-designed code?
Well-designed code allows us to accommodate new requirements easily.
"Design is there to enable you to keep changing the software easily in the long term. As design deteriorates, so does your ability to make changes effectively." - Kent Beck
Today almost all software development is based on iterations. Poorly designed code slows down changes being made in every iteration. Therefore, even in the first release, poorly designed code leads to slower delivery. This problem, of course, becomes much worse with every subsequent release.
How do I get my developers to write well-designed, well-engineered, code at speed?
First - notice this is not a technology or language specific problem. When assigned a task, developers need methods and techniques to grasp the right problem statement, quickly come up with a clean design, code without going round in circles, and engineer the solution to catch defects and performance issues.