Gary Allison's Cloud Blog

Effective Software Projects


Agile Software and Effective Software Projects and Leadership and Teams19 Jan 2012 04:57 am

Last night, I read a passage in the Steve Jobs Bio recounting a conversation between Steve and Mike Markkula as Steve was contemplating his return to Apple.  The passage was about reinventing a company, and struck me as very poignant as I had just spoken to my team a few weeks ago at our 2012 kickoff about reinvention.  The passage

They spent the rest of the time talking about where Apple should focus in the future. Jobs’s ambition was to build a company that would endure, and he asked Markkula what the formula for that would be. Markkula replied that lasting companies know how to reinvent themselves. Hewlett-Packard had done that repeatedly; it started as an instrument company, then became a calculator company, then a computer company. “Apple has been sidelined by Microsoft in the PC business,” Markkula said. “you’ve got to reinvent the company to do some other thing, like other consumer products or devices. You’ve got to be like a butterfly and have a metamorphosis.” Jobs didn’t say much, but he agreed.

How prophetic. Also evident in the book is that not only did Apple have to reinvent itself, Jobs had to reinvent himself to a degree in order to become an effective CEO.

Reinvention is the key to all success and the path forward. For teams and companies to grow, they must recognize that the things that worked in the past which made them successful, will have to change, be reinvented, to continue that growth.  Since growth = success in our measurement system, then change requires reinvention.  Approaches, processes, technologies, teams, communication – it all must be reinvented all the time.

Five years ago, I wrote a blog about leading through change.  Rereading this now, I feel it is still on target.  At the time I was thinking about change that is sourced from the outside.  Reinvention is sourced internally.  The same strategies apply.

Cloud Computing and Effective Software Projects and Leadership and Teams27 Nov 2011 10:28 pm

Last week, one of my team members forwarded me a link to this blog by Savio Rodrigues, entitled Why devops is no silver bullet for developers.  It’s a well written blog and Savio makes some good points, namely that environments that the Devops team hopes to build on need to be standardized. He comes so close to hitting some important topics right on the head, and then just misses the mark slightly, IMHO.

Savio nails it when he points out

“One thing I’ve come to understand is that these two groups tend to think differently, even if they are using the same words and nodding in agreement.”

Bingo Savio.  He goes on to say,

“It’s no surprise developers want to adopt tools and processes that allow them to become more efficient in delivering new applications and continuous updates to existing applications. Today, these two tasks are hindered to a degree by the operations teams that are responsible for production environments”

But then, he misses an opportunity to drive the point home and starts a discussion about standards. I agree standards are important, but what needs to be reckoned with are the very different culture, goals, and reward systems between the two disciplines of Engineering/Development and IT/Operations.

How are these teams measured and rewarded? The answers to these questions tell you many things about the team’s culture. A Development team is typically measured and rewarded by amount of innovation, quality of their deliverables, timeliness of delivery, and responsiveness to market.  An IT team is measured and rewarded typically by uptime, stability, security, and control.  (Note rewarded can mean “not punished due to failure” as well as more expected definitions of reward).

All of the above seem like good things! We want uptime, innovation, quality, stability, etc!  Right? I envision one could draw a Venn diagram for the Dev culture and the IT culture and there would be overlap, but there would be just as much outside the intersection.  Innovation is often at odds with stability.  Responsiveness to market can be at odds with uptime, etc.

We’ve had the good fortune of having a few opportunities to implement a new Devops model.  When everyone is rowing together the boat certainly moves faster in the desired direction. But it is difficult. It requires continual investment in the Devops team because at the core, these two very different cultures aren’t going away anytime soon.  Savio sees it too when he says, “This isn’t a technical issue. It’s a cultural issue.” I’d suggest we spend as much time looking at the measurements and rewards as we do thinking about standardizing platforms.

Agile Software and Effective Software Projects and Leadership and Teams02 Jan 2011 08:34 pm

In a prior post, I wrote about the relentless pace at which our Agile development moves, especially as it is teamed with delivery of software as a service (SaaS).  One of the consequences of this speed of constant delivery is that there’s never time to go back and “clean up” any of those important but not urgent tasks that you just didn’t get to in the sprint.  You know the ones I mean – that last unit test you really should write, fixing a low priority bug, UI tweaks, or automating all of the QA tests.

We’ve found that at the core of this challenge is that the team may not all be engaged simultaneously on the same project.  As I work with other Engineering executives, many face the inherent conflict of QA sprints that lag behind development sprints.  On the surface, this seems natural.  After all, there’s nothing to test until it is written?

We know from test driven development practices this doesn’t have to be the case. Even if not following strict test driven development practices, with careful development story planning, the UI aspects or API stubs can be built first in the sprint, so by the time the QA team has spent a day or two planning test scenarios or preparing test data, they can begin automated test development.

We also find that we need for new code development to stop at some point in the sprint. From that point to the end, developers are only fixing bugs found by the QA team in the sprint, completing those final few unit test cases, taking on usability feedback, and otherwise driving to complete.

By taking this approach, the developers and QA engineers stay together, focused on one goal as a team.  That goal is sprint complete of a high quality and finished deliverable.  The result is far fewer lose ends, a higher quality product with less rework, and just as important a team that works together.

Agile Software and Effective Software Projects and Leadership and Teams02 Dec 2010 01:28 pm

Smell the Agile Roses

On my day off today, I find myself contemplating how little time there is to smell the roses (and write blog posts).  We have so tuned our processes that really there is no downtime.  It turns out that when you add Agile development processes to delivering software as a service (SaaS), what you achieve is a relentless pace of innovation.  That’s good right?

Well, it does have a few consequences that are important to manage.  First is that there is never time to go back and finish that unit test, test automation, or UI tweak you really wanted to do last sprint.  You need to be complete and ready to move on to the next project.  We’ve been working on ways to improve here which will be part of a follow up post (really it will).

This post is about another consequence – we deliver innovation so quickly while also working on the way we deliver that it is easy to lose sight of how far we come.  As I overheard on a flight yesterday, “the days are long and the years are short”.  So true.

To combat this in my team, we try to be as rigorous about our celebrations as we are about our delivery.  We deliver somewhere around 10 times a year (even more with minor updates) and this will only grow as our product line continues to expand.  Still there are certain deliveries that stand out as larger accomplishments and 3 times a year as a team we will take a day and celebrate.

Often these celebrations include a team engineering event – we’ve built tinker toy towers, water balloon launchers, and aqueducts.  We’ve played kickball, laser tag, and cruised the lake on a party barge.  Once a year in Dec/Jan, we will take stock and as a team, share what we feel are our largest accomplishments as we also layout how we want to raise the bar for the next year.

It can be exhausting at times to be a part of the relentless pace of Agile delivery, and at those times when the release is rolled out to clients, maybe the last thing you want to do is plan a celebration. But every time we have one of these events, I am reminded what great people we have on our team and how much they deserve (and need) these times together.

Agile Software and Effective Software Projects and Everyday Tech and Teams and Tech News17 Oct 2009 06:04 am

Oh, how I love this post by Joel on The Duct Tape Programmer!  This is such a salient point that applies to so much more than the context here.  “You see, everybody else is too afraid of looking stupid because they just can’t keep enough facts in their head at once to make multiple inheritance, or templates, or COM, or multithreading, or any of that stuff work.”

I just ordered my copy of  Coders At Work.

On a total Tangent, I just completed the transfer of my domain name off of Network Solutions to Dreamhost.  Dreamhost is awesome and dirt cheap.  They have one -click installs of just about everything you’d ever want to run on your website and their registrations are almost free they are so inexpensive.  I’ve been hosting with them for over a year and have had zero issues (other than imap email, but that’s another story).  I 100% recommend Dreamhost.

Agile Software and Effective Software Projects and Leadership and Teams17 Oct 2009 05:52 am

Lots of discussion lately about measuring productivity has had me spending time I should be sleeping thinking about the same.  I love accountants and finance folks.  I find them very bright and love the way they typically approach any business discussion from the point of logic, but they can be an intractable lot as well.  They’d love to measure software engineering efforts like a consultancy – hours in, output out, utilization metrics pop right out the other side of the equation.  More utilization of the team means more productivity!  Wonderful!  Its so simple and we should have figured this out so long ago.  All that time wasted counting KLOCS and function points….

Of course it doesn’t really work. You can count hours, or days, or whatever to your hearts content but you are only measuring effort.  And, measuring effort of a software development group is an exceptionally tricky (and potentially dangerous) thing.  Its not the effort that matters, but rather the results.  So how do we measure the results?  Ahhh there’s the rub.

What we need to measure is the business value of the stories the team is being asked to build.  For the consultant this is very simple – you are paid by the hour for the consulting performed.  Thus, hours billed X hourly rate = business value.  The business value of a software going into a product is not so easily measured.  But, lets assume this is a solvable problem.  It gets even more interesting in the planning phase when you are making product choices.  For a proposed feature, what is the busniess value?  Now suddenly, this is not a software engineering question at all.

Effective Software Projects and Tech News01 Feb 2009 11:08 am

Do you know what this is?

load AX, BX

Then chances are you know how computers really work, and chances are you are, what’s the word, old?  I’m currently working on a presentation for an upcoming conference that describes how Software as a Service, cloud computing, and web services are changing the landscape for education.  The thought occurred to me recently when working on the outline of the presentation that many of today’s computer science students have no idea how computers really work.  Systems level knowledge of programming and operating systems seems to be arcane. Maybe that’s good in a way.

No you can build full-on applications in scripting languages, deploy them in the cloud and not worry about load balancing, firewalls, and nusiances like memory management.  Maybe in 10 years, developers of the future will laugh at us when they recount, ” yea, you used to have to write applications in this complex language called Java, now you just drink it, ha, ha, ha”.  I used to laugh at the PL-1 and FORTRAN programmers.

Maybe this is good.  Now, developers can focus on solving business problems and spend less time on the nuainces of programming.  Or, maybe they actually have less control and are forced into the confines of what is offered in the toolbox of Google, Amazon, Salesforce and the like.  And, since soon they will lack any real systems development skills, maybe they give up all chance of getting outside of those boxes?

Effective Software Projects and Tech News04 Nov 2008 02:03 pm

Force.com

This week finds me at Salesforce.com’s Dreamforce show where a number of very interesting developments are coming to light.  In Marc Benioff’s keynote yesterday, he emphasized the role of cloud computing in the future of all application development, throwing jabs at Microsoft all along the way.  Benioff cast the cloud into these sets of services:

  • Amazon is the server plumbing and storage – their EC2 elastic computing cloud providing all the virtual servers you need while S3 provides boundless very low cost storage
  • Google is the Microsoft Office and Sharepoint alternative, offering shared applications like calendaring, documents, and spreadsheets, with the capability to share all three, plus adwords that can feed into salesforce leads
  • Facebook offers the social graph where new applications can leverage and integrate to spread virally
  • Salesforce’s force.com is the application layer to develop business apps and tie all the above together on every platform, mobile to all browsers

This staking out of claims on the cloud computescape is a fascinating thought to me.  While I’m not sure that all other other companies would agree with the above positioning, there has never been a more exciting time to be in software development – the cost  of building a truly scalable application that can service tens of thousands of users  is truly in every developer’s reach.  I woke up at 1 am this morning with my mind racing about how the applications I and others could build!  This clearly has implications for global software development, lowering the bar for anyone in any country who has a great idea to build it out with a small team and bootstrap an effort self funded.

It also means that if you were thinking of corporate IT as a long term career, you should think again.  These services are going to consolidate into a few very large providers, at the end of the day, this is good for our industry. It allows the great ideas, the great innovations to be born more quickly, removing unnecessary barriers and hurdles.

Agile Software and Effective Software Projects and Leadership and Teams23 Jun 2008 08:41 pm

Recently, we evaluated several Agile Project Management tools.  Having used XPlanner for years, it was time for a change.  XPlanner is great in some ways – fairly lightweight and easy to use for developers.  It really falls apart though when you start to consider multiple agile teams working together to deliver a release.  It is just really problematic to get a group view of where you are, what progress is being made by the team, and where the hot spots might be.  To accomplish this, you need to drill into the details of every scrum team and study the metrics / charts.  I even went so far as to change the source code to build a dashboard – that’s when we started to approach diminishing returns.

The other shortcoming of XPlanner is the management of the product backlog and release planning.  Yes, you can work around this, but intrinsically, the tool does not support building a backlog and then moving stories into a sprint.  Yes, this can be done, but it is arduous.  The interface also is stuck in Web 1.0 land, making data entry into a form submit after form submit affair.

So then what?  Surveying the market and talking to many of my longtime friends developing software with agile process, we quickly build the short list to replace XPlanner. We looked in detail at Rally, VersionOne, and FogBugz.  Though FogBugz had some very interesting capabilities around predicting the accuracy of estimates, it didn’t really seem to support agile planning methodologies and the scrum process.  Also, though the predictive capabilities are interesting, this really isn’t a huge benefit in my opinion if agile is really used and you know your people.

So, it was down to VersionOne vs Rally.   Both companies did extensive demos for our leadership team and key stakeholders.  Both tools intrinsically are built around the scrum agile process.  Both were priced around the same level with VersionOne being just a little less per seat, per month, but Rally matched and beat this price point in our negotiations.  The huge gaping hole in VersionOne for us was that it really didn’t assist with resource planning at all.  That is, they don’t enable you to enter the amount of available resources in terms of hours, days, etc, and then in the planning cycle show you where you are in using those hours as you take stories from the backlog and add them to the sprint.  Both tools track burndown during the sprint of course, but only Rally lets you know if you are planning too many stories in the sprint.  Even XPlanner supports this, so it is a big miss for VersionOne.  We can only assume they are working to add this capability.

Also, the rollup reporting for an entire release is more powerful and flexible in Rally.  This was a big plus for us.  To be sure, Rally isn’t super sophisticated in resource planning.  It doesn’t allow the individual team members enter their availability and then sum it up for the sprint.  (I would like this feature – I need to add this to the Rally Community.)  Rather, it just allows you to add the total number of hours available for a sprint at the beginning of the planning cycle.  How you figure this out is up to you.  After you add the total number of hours available, it shows you hours remaining as you add stories.

In coming blogs, we’ll talk more about the pros and cons of Rally as a Agile management tool.

Effective Software Projects and Tech News14 Jun 2008 05:15 am

This week Apple unveiled the iPhone 2.0 device and more importantly showed the results of their SDK released just 3 months ago for iPhone. As someone who has been leading teams in building mobile applications off and on over the last 6 years, the results are really impressive. The ease of which very sophisticated applications can be ported to iPhone is astonishing. During the keynote at the WWDC, some interesting games and just amazing medical imaging applications are on display.

More than simply an interesting use of mobile technology, in my view Apple has created the first viable platform to move laptop users to the truly mobile device. They have the device, now with 3G speed, they have the platform based on their desktop OSX, and they have the developer tools and APIs to quickly build the application.

Contrast this with google’s android. Cool concepts, plenty of big budget behind it, but no devices, and with so many vendors in play there is likely to be subtle differences in implementation / compatibility. These are problems that have plagued Windows Mobile and Java 2 Mobile Edition, both of which propose to be a unifying platform. Truth is that you have to build and test for each device you intend to support. This is expensive and inconvenient as you start putting conditionals in the code for devices, screen sizes, etc. And, is it just me, or are the top folks at google starting to look like IBMers?

This is where Apple has it right, in my view – great dev tools (as Microsoft ahs clearly shown is a key part of promoting a new platform), great platform (with innovative location and push notifications), and that gorgeous device. To top it off, they have a terrific market distribution channel with iTunes. Boy, do they have this right. I’m completely impressed.

Agile Software and Effective Software Projects20 May 2007 08:07 pm

The Third Sin of Software Projects is failing to understand its all about the people – attracting, retaining, and helping the best software development professionals available to succeed. The people on the project are the key determining factor of success. Let’s look at a few of the key factors in what we need in our people.

Productivity – you’ve probably read that top notch software developers are 2x – 5x more productive that the average developer. I’ve lived it and can attest. It’s not that the best will write 2 – 5 times as much code; it’s that they either can achieve the goal 2x – 5x more quickly, or just simply solve problems that others find unassailable. When I was early in my career I had the good fortune of working with just such a superstar: Brian. While I could hold my own in some of the most difficult projects, I could also see that Brian was simply a brilliant developer. He was simply world class, solving the most challenging issues and making it seem almost effortless. What if you could build a team mostly of this type of person? You could do anything! (FWIW: this also opened my eyes that I needed to focus my career on an area where I felt I could truly excel – leadership.)

Motivation – Software professionals are different than many other professionals in what motivates them. They are motivated by working with other smart people, working on challenging problems and cool technology, and by achieving a level of success personally and technically. (This last one is a complex subject as there are as many meanings of success as there are different types of people in software development). As leaders, we must understand that software professionals are motivated differently, and try to understand what success means to each person in our team.

Teams – In addition to having the most productive and motivated professionals, we need to be able to have them work effectively in a team. Dysfunctional personalities, poor attitudes, or weak contributors will torpedo a team very quickly. Any of these attributes in a team member negates all the positives above. Take a developer who is tremendously productive and knowledgeable, but just has a very negative attitude and they can drag everyone else down, kill cooperation and communication, and single handedly cause a project to fail. Conversely, a team that is made up of top-notch people that are motivated, focused, and check egos at the door can turn out the most innovative solutions imaginable.

Trust - finally, the key essential ingredient in the organization that makes it all work is trust. People within the team must trust each other to deliver, development must trust product mangers, teams must trust their leaders, and all the way through the organization. Very recently, I’ve heard about a situation where a new leader came into a development team and half the team left the company. It’s safe to say that more emphasis on building trust was needed! A subtle implication of trust is that integrity is required for trust to exist. The best companies I’ve worked with have a deep appreciation for all these ingredients, starting with the CEO. Those that don’t will fail.

Agile Software and Effective Software Projects25 Mar 2007 03:55 pm

In this business, we are all subject to schedule pressure which is essentially market pressure. This pressure is often real, coming from executive management, the board, or investors. Despite this, there are some necessary steps in the development process that can seem expedient to skip that in many cases, just shouldn’t be skipped:

  • Prototyping the UI and getting feedback and buy in from Marketing and target customers. In the rush to get to market, we can easily skip this one. After all, once the design is done and the developers are implementing, its very expensive to change. Also, when working with new technologies, you don’t always know up front what is possible in the UI.
  • Throw away the prototype. Its tempting to keep the hastily constructed prototype and evolve it into the final product. Especially when considering the need to prototype to explore UI options and technologies, this early deliverable is critical but also a mess under the covers. Learn from it and toss it.
  • Internationalize the code and externalize strings up front. Its tempting to say “we can do that later”. Later is incredibly expensive. In our globalized world, most commercial software must be internationalized – design it in.
    Continue Reading »
Agile Software and Effective Software Projects08 Jan 2007 04:07 am

Talking about requirements makes people’s eyes glaze over, so lets ask a more poignant question. What market are we trying to win? This focuses our vision in a much more effective way. The first deadly sin of software projects lies in not asking this question. Requirements management is a fundamental necessity in software development. Changing requirements causes obvious schedule impacts but has more subtle impacts in quality of the product and maintainability of the architecture. But, lets face it, few systems worth building have all their requirements known up front. There is always some element of discovery as the business matures, as early customers give feedback, as new deals are brought to the table.

The deadly mistake that can make your software project, and even the company, fail is a lack of focus on precisely how this product will win in the market. To answer this question, this presumes we can answer these questions of precisely which market are we in, who are our competitors, what are the major technology movements in the market, how will the product be marketed and sold, how should it be priced, and who will buy it. Even if you are the “technology” guy in charge of the software project, you need to know the answers to these questions because it affects in important ways the requirements of the system.   Most companies start out with a pretty firm grip on how they plan to win in the market. What trips them up time and again is not realizing the answers are changing. The deadly sin here is that if the answers to any one of the questions above change over time, they can dramatically affect your requirements and ultimately lead to the failure of your software project (and the company).  These changes can take place very quickly and very subtly in a small project. For example, selling a product into a new channel or to a new type of customer can quickly mushroom into a set of new requirements that can crush your existing commitments. To mitigate this, it is essential that the product management team and development leaders be integrated into the sales processes to gain visibility into these opportunities so they can anticipate new requirements as early as possible. This can be difficult as everyone is excited about the new customer or opportunity, and many times it becomes a “peeling the onion” exercise. At first, it seems that the new customer only needs a small change to the product, and then another, and then another. These changes are driven because they are fundamentally a different customer than has ever purchased before. Recognizing this difference is crucial.   

Another good example I’ve encountered many times is the difference between reseller and direct customers. Resellers are extremely valuable sales channels, but have very different requirements in products and billing than do direct customers. It is important to recognize and understand these differences up front. A reseller may want to embed your product in theirs or rebrand your service / web site. They often want to hide the visible aspects of your product because they want to present only their brand to the customer. These features must be factored in up front as they are very expensive to retrofit.

Finally, the new customer may not necessarily drive changes into your core product, but rather may require you to drive changes into your core processes. For example, a telco customer may have very long cycles between applying updates and may require different service levels that your other customers. Each of these have a cost component associated. The longer upgrade cycles may mean you have to keep alive older branches of source code alive for emergency patching, along with test environments that support that branch. These kinds of patches can be very expensive both to you and the customer. Also, you may have to go through longer or additional test cycles for the releases that go to these customers in an effort to avoid these costs.

In conclusion, asking “What market are we trying to win” means understanding the answer to the question and measuring each sales success against that answer. If the sale represents a fundamental change to this answer, then take the steps to deliberately plan for the product and process changes necessary to deliver on the opportunity.

Agile Software and Effective Software Projects03 Jan 2007 04:07 am

In our examination of reasons why software projects fail, we start with a few basic assumptions. These seven deadly sins of software development assume that many of the fundamentals are in place: the team is staffed with trained experienced developers, you have a modern source code control system, build processes, test methodologies and automation, bug tracking system, project management systems, etc. In essence, we are assuming at least a CMM Level 2 team – without at least this level of process maturity, there are many other opportunities for the project to fail. This series of short articles focuses on the set of issues that sneak up on experienced software developers and development managers. They are seemingly common issues, but can surface in subtle and surprising ways while teams are heads down implementing a project. We’ll examine some examples along the way as well. Although we may have to change a few names, they will be real examples drawn from experience.

Agile Software and Effective Software Projects28 Dec 2006 02:03 pm

Its been a very busy forth quarter rounding out 2006. Business travel has taken me to South America twice, we’ve been working on closing a number of deals, and December saw the largest number of products all go GA ever in a month at Simdesk. All these are great reasons for not keeping up with the blog, but its time to get back to it.In 2007, I’m planning to write a series of articles on Software Development revolving around common sense knowledge every leader of a project should know. Though I place them in the realm of common sense, I’ve also seen them sink projects over and over again for those that are unaware (or just too busy to notice). Every series like this needs a catchy title, but I’m afraid we’re out of luck. We’re going to call this one “The 7 Deadly Sins of Software Projects”. If you’re in the business, I’ll wager you’ve either seen a few of these or maybe even been guilty yourself. Its easy to do because they can sneak up on you. Stay tuned.

Next Page »