Mar 27 2009

A Simple Software Design Methodology


No matter what software development methodology you adopt, you will always be faced with 'design' that is between good and bad, between necessary and unnecessary, between complicated and over-complicated. Design, even if it is technically good, can have disastrous effects on the project, if implemented incorrectly, or creates discord within a team, misunderstanding. In fact there are so many reasons, it would be better just to tell you what good design is. That's if I could, but I can't!.
However, I can say that Design is one of the most important factors for a project, it influences time lines more than anything else. Underdesigning, or overdesigning, neglecting to think ahead far enough, not including certain implicit requirements can all add days and weeks to a project.

Most of the time, its in your hands

A project requires thought and understanding. It takes a wide range of thinking outside of the box, thinking realistically, but yet being extremely open to ways of improvement. Here are three activities that will definitely aid your methodologies, skydiving and chess and music.

More...

Tags: , ,

Feb 6 2009

TalkWare Episode 2 with Kent Beck

Category: MethodologyWeek | TalkWareJonathan @ 00:26

Like the show, Shout this Out for me. Spread the word. Robert C. Martin interview coming soon.

Kent Beck
Interview with Kent Beck
Kent Beck is the founder and director of Three Rivers Institute (TRI), and the creator of Extreme Programming.

Stay tuned, subscribe to TalkWare, by clicking the TalkWare icon at the top right.



This is also available in iTunes



Download mp3 - [43mb]

In this episode:

Mr Thee Beck

Before we had Methodologies and Patterns

The Ancients understood more

When did you think about XP?

The issues in the context around programming

Can DSL's bridge a Gap?

Agile, People and Relationships

What exactly is Extreme programming?

Values: Communication, Simplicity, Feedback, Courage and Respect

Principles are Fuzzy

Practices, are NOT Fuzzy

Pair Programming
 "People pretty much know what to do already, they are just not doing it."

Can XP make it all better?

Beck et al 2001

What do you do everyday?

Just Ship, Baby
 "Valuable source code. In my mind."
 "As I dig into my own motivations"

Service and Sustenance

JUnit Max

Can you get money from software?

The Costs of testing, writing it and running it

Do you test all the time?

I design badly all the time.

Testing can give early feedback about your designs

Generating Code from Tests?

Agitar


Tags: , , ,

Feb 5 2009

Scrum Software Methodology

Category: Methodology | MethodologyWeekJonathan @ 03:04

Scrum is an Agile Software Development Process that Jeff Sutherland invented based on work done at Easel Corporation in 1993.

Pigs and chickens?

A very quick overview. A Scrum Master, leads the scrum. Typically a scrum meeting should be a precise meeting, standing and ready to leave after 15 minutes.
With precise questions:
1. What have you done since yesterday?
2. What are you planning to do by today?
3. Do you have any problems preventing you from accomplishing your goal? (It is the role of the ScrumMaster to remember these impediments.)

Each iteration is called sprints, and are typically 4 weeks of development. I have found that usually you end up writing code for 2 weeks, integrating and testing for a week and fixing it up a bit before the sprint ends. Not sequentially, but more something like this
code, test, code, integrate, test, code, deploy, code, test, deploy

Each sprint has a design and a plan. You set out the goals of the sprint, and then you sprint, with your 15 minutes of meeting each day. So it is not blindly sprinting. As that, could cause injury.

Testing is part of it, and unit testing is critical.

Have a look at Control Chaos for information on SCRUM.

When you are ill, you visit Doctor

And when your project is ill, you should call a qualified Agile practitioner.

If you project is running late, and you don't use any Agile Methods, "SCRUM and XP" together for a few months, will more than likely help the situation.
However, I should stress, if you are new to these methods, don't try it on your own for a critical project. Get a consultant, get someone who knows the method, who you can work with your project team, who can help you implement the 3 months properly.
The team ethic, the calculated sprints, unit tests and pair programming are definitely a great combination for a lagging project.

One of my favorite things about scrum is the burn down chart.

When other methods, like Waterfall demand more documentation and quantification in time consuming ways, this is simple and very visual. it is as accurate as any other, as its still prediction at the core.

I am going to be asking Kent Beck, about XP, and maybe, just maybe (I am trying) to get Jeff Sutherland on as well for a word on SCRUM.

Next post, DSDM. (If you are in a very formal method, DSDM could help, as it offers the most structure to Agile Methods?)

Tags:

Feb 3 2009

Are you Also an Agile Expert?

Category: Design | Methodology | MethodologyWeekJonathan @ 14:15
You can't move to the left or to the right, without bumping into an "Agile Expert". Everything has become painted with the g-l-o-r-y of "being Agile" and "focused" on the business need. smungle, bungle, jungle.

The majority of managers, teams and clients who say they are Agile, are basically using the term, because its become a convenient truth. It is good for business. It is a good pick up line.

"Hey honey, I am Agile."
"Your place or mine"

I am not saying everyone, but the amount of people who are signed up and preaching their Agile ways, while missing a deadline, not writing unit tests, frowning when a client objects to a particular thing. Agile is a mindset first. You have to understand, be humble, amicable, friendly. Kent Beck includes Respect as a Value. These are important in creating a mindset. You cant just adopt a certain method point by point and expect miracles. You and your team have to "understand" and "experience" being Agile more.And then 5 to 10 years down the line, your mindset will be what it needs to be. SCRUM, XP and the others are vital as it teaches agile concepts, but you can be Agile without following any of the methods. It is akin to being Moralistic without being religious.

Being Agile is a way of doing and thinking.

Talk to your clients.
Talk to each other
Leave egos at the door
Be open and fair
Be realistic
Be smart, do less for more
If it goes wrong, react and change
Don't worry about complex documents and analysis.
Create Mentors, Leaders
Get a good team spirit
Look at the processes you have and improve it

That is what its about. Its not a step 1 to 10 for enlightenment.

Then, I hear some also using the same Agilese language to counter the Agile methods.

You know the ones who say. All I think that matters, "is delivery the software to the client", not ____ or ____. Yes we all want to deliver to the client, we all want to write good software that can deal with change, but the actual process, the actual mentality for doing so, is "hard".

If you think running a business, a project and a team, satisfying the client, the developers and other interests, on time, within budget is easy because you "put customers first", or follow a mantra, then you are probably not entirely there.

Often the more experience you have, the more you realize how little you know and understand. But after a few years, say 4 or 5, I have found that most developers seem to go to Guru mode. Yes, its beginner, developer, guru in 5 years.
If I sound cynical. I am... You see its taken a lot of experience to understand what works and what doesn't. It takes a lot of experience to learn why something should be done a certain way.

I lot of really smart people are really concerned with how things are going in our industry. Its not your project, or mine thats important. It is actually all projects, across the world now. Most users, think that programmers are not really in tune with whats really useful for them. Most users, quietly think that we are a little too geekyand not all that practical. I did a survey a few years back, while running my ex-software-house, and the results came back that most thought developers lacked common sense.

Whether you agree or not, it is a viewpoint. Now those very smart people are trying to do a few things for us and the IT sector as a whole. They are trying to give credibility to the semi-artform, we call programming. They are trying to shape the software industry so we catch up to engineering, and perhaps move ahead of it. they are trying to get thoughts adopted that shape the way the systems work.
How can we create the future software the world needs?, if the last project you were involved with was so buggy and most of us are currently on, or were on a project than ran late.?

It is hard satisfying customers and users at the same time. It is a difficult road to walk, and software is increasingly more important with every line thats written.

Agile, was created to try and counter the weight of burden we had/have. It was created to break the chain of Waterfall Models, software centric, inward focused, software vanity that was going on. Agile was created as a statement of intent. "Hey, lets actually write the software before documents, lets listen and deal with people and what they need, before we focus on UML, lets collaborate with our clients, build a team, before we think about functional specs equates to dollars, and lets rather respond to change, when we think of it, when its needed and when it happens, rather than creating a massive set of documentation constraints, and some "master plan".

At this point, please feel free read the Agile Manifesto. Agile is not a buzz word, its supposed to be a way of thinking and a way of doing.

Now, if you have any thoughts, please write me. I would love to hear your views.

Also remember, Kent Beck, one of the original 17 signatatories, of Agile Manifesto, will be speaking with me and available on Friday. To subscribe to podcast, use the TalkWare subscription icon on my website.

Tags: , ,

Feb 2 2009

Software Development Methodology

Category: Design | MethodologyWeekJonathan @ 03:21

This week is dedicated to software development methodologies. So to start with here is a simple overview.

If you see my Skype online status is true, then call me to record your opinion for the next podcast.

A Method for results

All methodologies are structural frameworks for a development process. The process has varying degrees of formality, and various amounts of 'advice'. Typically they are in two camps, light and heavy weight.
All who create methodologies, are keen to demonstrate that their way is best, and of course many are mostly a mixture of good and semi-good principles, with varying degrees of success when deployed within various teams. That is not necessarily because the methods are wrong, as the method may not have been followed correctly, or sometimes conditions just dictate that it will go wrong (ie. probably the people chemistry contributed to it not working. I'll talk about this a little bit later).

Agile Methods has been gaining more ground over recent years, as it is more customer centric and a little more updated from older more 1970's style official office decor.

There are quite a few to choose from, and most who do not follow a certain methodology, are probably following the Waterfall Model in the larger company or some sort of non complicated model perhaps develop-until-done, in the smaller.

A recipe for failure

Must be more than 13 years ago, I failed at a job interview, because when asked about Booch's OOAD, I replied, "I don't think its the only way to build software, and sometimes its overkill on lightweight systems." -- I really needed that job. But what I believed then is still true. I have been happy to work within the confines and processes of each team and project set before me, but to believe that only one way of doing things will work, is almost, well....religious. (Nothing against Booch, it's the company, not his company, the company that never gave me the job!)

Rather be Agile

In the sense that planning for change. Whether its change of team, change of requirements or change of mind, change will happen, so we need a process that deal with change properly. Unfortunately with current tools and technologies change is hard. Consider requirements, functional specification and other documents, consider tests and diagrams, they are all time consuming when changed. In fact, I don't think many people have been on a large project, without these things becoming out of date and semi redundant. UML was very much like that until recent years.

Being concreted in paperwork, has brought in a lot of good minds thinking about better ways. In our future we have a combination of tools and processes, that will be far superior to anything we have today. I am speaking of Software Factories, Domain Specific Languages and Models, and then the complete process in terms of best practices. Today though we still have some interesting ways of doing things. In the Agile space, we have XP, DSDM Atern, AUP, FDD and others. All offer something similar and in the case of XP, something slightly more extreme.

Dynamic Systems Development Method (DSDM)

There are 8 principles in the DSDM Atern version. (I think Atern is a version name) Whenever I read something on DSDM, I get a sense of the stars. I mean the stars predictions on Capricorn, if read to a Gemini, without them knowing its the wrong write up, would probably agree with it as being their star. It has a classic generalization built into the language, which as a software designer I really appreciate. (at times).

DSDM Atern, Principle 1, states
"Every decision taken during a project should be viewed in the light of the overriding project goal, which is to deliver what the business needs to deliver, when it needs to be delivered."

Now this is a classic generalization that is True, but so is the following description.
"A project is finished when it is finished, and not any sooner, because then it would not be finished."

Principle 2 is deliver on time, 3 is Collaborate, 4 is never compromise quality.
Wait.

From Atern pocketbook, "A solution has to be 'good enough'".

Now thats a contradiction on the title, never compromise quality.

Well the truth is quality is abstract, moving and subjective. I would argue you cannot base a principle on a moving target.

5 is develop iteratively, 6 is build incrementally from firm foundations, 7 is communicate continuously, and 8 is demonstrate control. All of these offer a very simple statement of generalized fact, that will ring true, no matter what. Yes, the business goal comes first, yes I must design and implement quality thats good enough, and yes it must all happen on time.

Other methods are perhaps not as wish washy? Do you agree, disagree? Let me know.

Extreme today may not be Extreme tomorrow

But then in light of DSDM, perhaps extreme may actually give it character and have something good to say. XP has character, but I think that DSDM has lost a lot from trying to be more business friendly and politically correct. It may be because XP has a few controversial practices which include Pair Programming and Test Driven Development. These are often referred to as controversial or extreme, but in a few years, time will tell if it is or not. The shift is moving rather quickly to Domain Specific Languages, Factories and Frameworks, we may just need to have two minds working on the same models at the same time. It may be common place. But, why not join me on Friday, where we will chat with Mr Kent Beck, the creator of Extreme Programming. (plug - but its my website after all)

So whats best?

"Best", is anything "more than nothing". So even DSDM Atern has its place. It is far better for a team to be collectively doing the same energetic activity towards deadlines, goals and milestones, than a broken, incoherent, inconsistent attitude.

So here are my 3 top reasons why Teams and Projects work.
1. Team work, good positive communication and weeding out trouble-makers, destructive personalities
2. Less is more philosophy, quality not quantity. Document something quickly and to the point, no fluff.
3. Have a good qualified, experienced and malleable leader to help out across every aspect of a development (including tests, code, database, design, help, review etc).

If you have these 3 things you may have a good team and project, and any process will be "almost" right. If you have the converse of these 3 things, you will definitely have the reverse result.

I have been in a successful waterfall model project, an unsuccessful waterfall model. I have been in an unsuccessful RUP project, and in a successful one. It is always 70% people, attitude and experience before any process. So before you adopt one, or change one, make sure you have the right recipe within the team to make it work.
The 3 things above are not principles, nor the complete picture, it is "just necessary".

People 70, Methods 30

People, or rather certain personality and environments can breed bad projects.
Typically its my experience that when things get tighter, deadlines get closer, managers tend to want more justification, more proof, more tests, more meetings and more documentation. This leads to an endless cycle, where projects are never given the air to breathe, and the life is then sucked right out. I was unfortunate to be involved in one such development. The stress involved in such a development is usually then accompanied by the PeopleProblem. The PeopleProblem, is when stress lend certain people with certain personality traits to cover themselves and the stress of the project by delving into non project (after-hours) activities, such as politics, whining and other destructive activities. All these sorts of things has lead people to develop more agile approaches. No matter what approach you have, get rid of the destructive members of the team, as they will make any method fail.

Disagree?

Tags: , , , ,