Software Development: Making Software Development Centers Work

Last time I shared a bit about the concept of Development Centers for software development. Because we effectively use this model at my firm – we call it “The Intertech Way” – I thought I would share the best practices for making it work.

The fundamental criteria for an effective Dev Center model is using defined methodology (and following it, of course!). I recommend several levels of leadership to ensure that the younger professionals (think of them as apprentices) are supported at every project level and, most importantly, that clients or end users (if you are interested in using the Dev Center model within your corporate IT department) receive quality software on time and within budget. Levels of accountability within your Dev Center might look like this:

  • Delivery Manager to ensure a standard process is followed on all projects and that quality standards have been met before project delivery.
  • Director of Consulting to ensure that each apprentice is paired with a dedicated senior professional
  • Dev Center Manager to mentor, help bolster technical skills, and to ensure all apprentices can operate at a consistently high technical level.

Maybe you will want a slightly different organizational structure in your Dev Center, but the key is to ensure you have more than simply a senior professional paired with an apprentice. The other roles are necessary to ensuring that younger team members develop consistency in their skills and the overall process they use to make software. We have found this model is working well and consistently results in turnkey solutions.

When I began this series of posts on the perils and challenges of software development, I lamented the high level of failed IT projects and my theory that offshore development is largely to blame. I noted that instead of providing a cheap, fast turnkey solution, offshore software projects frequently are bedeviled by poor management, confusion about team roles, and quality standards well below what U.S. companies (and consumers) expect. (In fairness to lower-paid offshore IT professionals, language barriers, and time zone and cultural differences are tough hurdles to overcome.)

And yet many are holding tight to the offshore model hoping to save money. Ironically, instead of cost savings, we’re now seeing costs shift from the actual development work to the writing of requirements and quality assurance – and development takes longer because of the time lag in communication when team members are located around in the world and in different time zones. Also, not surprisingly, people writing such detailed requirements must be more advanced (i.e., expensive) to anticipate issues a lesser-skilled developer might face during a project.

The only true benefit with off-shore development is that it forces business leaders to think holistically about what they expect from an application on the front end. That helps to prevent costly changes in mid-stream. But the negatives of off-shore development still outweigh the benefits.

I’m convinced that guided learning and mentoring, in the matrixed leadership approach I described above, allows younger developers to be exposed to every aspect of a project (a good way to build your department’s expertise) while providing the guidance from deeply experienced IT professionals – and the level of accountability necessary for quality outcomes. With an offshore model or a completely outsourced model, however, there is no accountability at the individual level where it matters most.

Software Development: Balancing Youth with Experience

In our youth-obsessed culture, it’s easy to forget that younger people lack one very important attribute: experience. And while software development is a fast-changing industry that traditionally favors young people eager to learn, experience still is a critical ingredient in quality outcomes. Instead of putting young hotshots on a pedestal – and then suffering predictable disappointment when they stumble – I recommend a more moderate approach that goes back centuries in many traditional trades.

I’m talking about pairing younger professionals with more experienced people in a classic apprenticeship approach. This approach makes a lot of sense and still is common in European countries where young people often apprentice for several years before they are considered fully developed professionals. I think of this as the “Development Center” approach.

Besides ensuring valuable transfer of skills and judgment, a Development Center model provides financial benefits too. For companies relying entirely on in-house IT staff, employing a mix of young (and less expensive) and older (and more expensive) professionals helps keep overall employee costs more moderate. IT consulting firms, such as Intertech, that use this Development Center model can charge clients a lower overall project rate without sacrificing quality or accountability.

For this model to truly work, however, senior people must do more than peek over the shoulder of younger talent. Acting as true mentors, more experienced professionals should outline what younger team members are expected to do, review their code, and help integrate the work that they’re doing into the overall project.

And then there’s the harder to measure but infinitely invaluable transfer of “soft skills” that make all the difference between success and failure. At our firm, this means having one of our top consultants allocate 100 percent of his time to provide guidance on project management, communication, understanding Agile and Scrum, and how to work effectively with team members and clients. Watching senior people in action also allows younger people to develop critical skills. And clients obviously appreciate not picking up the tab for junior employee making mistakes or missing deadlines during the process!

I’m reminded of the picture of an older cobbler painstakingly making top-quality leather shoes while a young apprentice stands by observing and occasionally engaging in the less critical aspects of the job. While shoes are now manufactured in mass production factories, the old master/apprentice model still makes perfect sense for those engaged in the work of making software. (I will share more about how this works at Intertech in next post.)

The older have a lot to teach the young and it’s time the IT industry starts acknowledging this truth. When we do, we all win.

Software Development: The Right Team Makes all the Difference

With technology continually providing new and faster ways to do almost everything, the human factor can be easy to discount. That’s a mistake, particularly when it comes to software development. Whether you’re looking to hire new IT professionals for your in-house team or engaging an outside firm, taking the time to choose the right people can make a critical difference to your project outcome. Great people can help you catapult across the finish with a superior product. Mediocre people frequently limp in late (and frequently over budget) with a mediocre solution that needs replacing in a short time. And choosing the right partners sometimes can be the difference between a solid outcome and no outcome at all.

Why is the human factor so important?

I explain it this way: great software development requires a combination of logical intellectual work and creativity. People who are highly skilled and experienced, but who also possess passion for creative problem solving, can achieve results that less experienced or unmotivated professionals cannot.

It’s tempting to hire or engage the cheapest employee or firm but remember that software development is a much more sophisticated enterprise than cranking out bars of steel in a factory. The difference between the top tier and bottom tier is a factor, not a mere percentage. In other words, “you get what you pay for” is especially true in the world of software!

If you’re looking to hire individuals to join or partner with your team, make sure serious candidates

can understand business needs and problems and to propose/implement effective solutions. Ask candidates about a time they solved a problem out of curiosity, versus the need to do so for a business reason. Professionals with inherent curiosity are much more likely to keep learning in ways that can pay big dividends on the job.

What should you do if you’re looking to engage a software development partner? Like most things that matter, begin by doing your homework. Dig in and ask tough questions. I suggest the following questions to kick off your search:

  • How long has your firm been in business? Obviously, you want a firm with a proven track record and an authentic list of satisfied repeat customers.
  • How large is your firm? If you’re a small or mid-sized company, be careful not to get lost in the shuffle at a big consulting firm where your business may be considered “small potatoes” compared to bigger corporate clients.
  • How will you partner with us? Again, proven experience is key to ensuring your chosen consultants will work shoulder to shoulder with your team, solving problems and transferring knowledge daily. The consulting firm should leave your team more technically robust than when the engagement began.
  • How do you ensure the technical expertise of your consultants? You should also ask how the consulting firm leverages collective knowledge for the benefit of all its customers.

Work to find people who bring a fresh perspective (versus a narrow focus influenced by a legacy process, ideas or culture). People with deep experience across multiple industries and technologies are more likely to approach challenges with new ideas and creative approaches that are not obvious to the “it’s always been done this way” crowd. They also tend to be more versatile, with the ability to perform in multiple roles as circumstances require.

While software development demands stellar technical skills, strong verbal and written communication skills also are key. People with the ability to talk with other technical professionals and business stakeholders are much more likely to complete projects that meet or exceed expectations.

And while it might sound quaint to some, I believe professionals who come equipped with above average integrity best serve organizations. A strong moral compass includes a genuine concern for an employer’s or client’s best interests. People who care bring drive and determination to solving problems by finding the best solutions, even if that means working longer hours from time to time. They also treat fellow team members with respect, which increases the odds of successful collaboration over the long term.

Your search for the best and brightest can be challenging, especially now with more demand for IT professionals than people to fill those positions. Sometimes engaging less experienced talent can help, but a careful approach must be taken to ensure success. Check back soon…that’s the topic of my next post!

Software Development: Being Agile

Dogs at work. Insane hours. Beer bongs in the break room.

Oh, the crazy days of IT yore!

If you were developing software when these were hot trends, you know there’s another legacy that’s not quite as fun to remember: failed IT projects. From extreme cost overruns to missed deadlines to projects that were cancelled mid-way through, the track record for wildly successful software development projects is less than perfect (see my previous post for more about that bad news).

But here’s some good news: software development has come a long way since the ‘90s! Instead of the traditional Sequential or “Waterfall” development process – which involved a long requirements gathering process in the beginning, followed by design, development and testing – many developers (including ours) now use the Agile or “Collaborative” development process.

I think of Agile as reality-based development because life, work and, well, software development, is all about change. (If you’ve been alive longer than five minutes you know that’s reality!) When an Agile approach is used, changes are easily accepted and adapted. In fact, with Agile, change is baked right into the process.

But don’t confuse change with confusion. Progress must be made and measured on a regular basis. When Agile is in use, progress is measured in “iterations,” which translates into a tangible work product. Multiple iterations provide the project foundation, with each one taking from one to four weeks to complete (two-week iterations or “sprints” are most common).

One of the best things about Agile software development is that it keeps all parties actively engaged and work gets done in the way they like best. Customers (or other key stakeholders) determine the priority order of the iterations and other key decisions. Developers – many of whom are Millennials that thrive on continuous feedback and teamwork – can deliver working software with each iteration. A classic win-win!

“There is pleasure in the pathless woods,” declared an 18th century poet. Maybe that’s the best environment for developing poetry, but software development works best with a clear path. That’s why Agile involves a work plan defining each step before any work begins, with plenty of flexibility for adaptation as changing circumstances dictate. Best of all, using an Agile software engineering approach adapted to an organization’s specific culture, history and staff means more accountability and less waste.

We’ve come a long way since the crazy ‘90s as Agile-based development is proving every day. (There may not be many dogs in offices anymore, but successful software projects don’t need to rely on gimmicks to distract developers from terrible projects!)

Next, I’ll share thoughts on what to look for and how to work with team members and partners.