Feb 27 2009

Pai Mei Software method

Category: MethodologyJonathan @ 05:51

Pai Mei Software Method.
It is Your honour and His Duty.

In my last podcast with Uncle Bob, he mentioned the Apprenticeships and Martial Arts model for programming.
I really like the idea. Having a Sensei to teach you the ways of the enlightenment. So I have decided to write down the first draft of some Teacher/Student principles.

Teacher

When a student does something different, it is because they did not understand your request, they did not understand how to fulfil your request, or they have discovered another way they think is better. In all cases, discipline is very much needed.

Listen first to your student, hear what they have to say, they might have something valuable to contribute. However, since you are the master of your techniques, your student should now be whipped.

If your student asks questions, the correct response is "your question does not make sense", followed by quick assignment of more bug fixes.

Demonstrate your technique to your student. A percentage of your lessons will be taught silently, by example. But largely by a firm bamboo. Around 2 cm in diameter.

You should try to inform the student of their progress and praise them when they do something correct. This wont take much effort as it won't happen often.

Student

Pick the your Teacher wisely as there is no turning back.

Obey your Teacher and do what you are told at all times, accepting all punishments
Work harder than needed, work faster than needed, be diligent and vigilant. Coffee could be required at any time.

Make sure you have pride in your work, your Teacher and your new knowledge, as now one else will.

Spread the words of your Teacher, and question the techniques with care, as you may be beaten.

You will never be ready, unless your Teacher says so, and he might not.

Even when you feel down, accept your fate as the lowly dog that you are.

One day you will rise and become a Teacher, but for now, learn and be inspired. You can take your own out on your students.

Now find your Pai Mei or Obi-wan Kenobi and learn his ways. It is Your honour and His Duty.

Tags: ,

Feb 26 2009

A Language Abstraction Layer

Category: .NET | New Ideas | Visual StudioJonathan @ 03:42

By the next turn, our industry will be largely focused on functional requirements, modelling and specific languages for specific tasks. However, having 5 different code files for 5 different languages, and having the spec# /*! !*/ syntax is fair enough, but we are setting ourselves up for a much messy, file managing, experience. Take web projects, where we have CSS, HTML, Javascript, ASP-like tags, code behinds, inline code and more. A typical site could have 4 or 5 different languages and technologies, sometimes different environments to edit and so on.

Towards this, I wrote a post on abstracting the code file from the language
which is the idea that you don't need to have a physical file that you edit, which contains code, but rather a file that contains xml metadata, modelling, code and everything together which is the input into a "View". The view could be textual code editing, a model or I believe more importantly "any". We should be able to code CSS in a VB like syntax if that is our understanding, and it should not matter to the developer, or the developers of CSS, because the SAL (see below) would help the interpretation.

The language is not important, because I should be able to write vb syntax and have it spit out c# into my file, but I always see it as vb. This can be achieved with this abstraction, I mentioned. If like me, you prefer C#, you can open the file and see it as c#, by simply clicking a language menu option.
Likewise, if I only want to see properties, I should be able to toggle this on/off, or if I want to see base class methods of the superclass 'merged' into my current class (grey-code),it should all possible through this abstraction layer, together with other filtering and language oriented viewing features.

More...

Tags: , ,

Feb 25 2009

Our Software Methodology Nightmare

Category: MethodologyJonathan @ 02:23

A software developer's hats

I have been buying a lot of hats lately. Real hats, and some nice ones too. I have around 22 hats now. But although the average developer only walks to the bathroom, occasionally, and otherwise sits quite still, I think we probably have more hats to wear as software developers.

We know the usual ones, coder, tester, documenter, team leader, mentor, but there are lot of them that we don't really think about that often. All these hats make it hard to understand what methods should be applied to a team of such diverse people, doing such diverse activities, albeit comfortably sitting in a chair. There are other hats we wear.
More...

Tags: , , ,

Feb 23 2009

Software Development Methodology Tool


A software development tool, capturing project data you can use, no matter the methodology.
However, the word "metric" must now cease. I don't like the word at all. I don't want the useless "10 0009 lines of code of which 5 000" is comments rubbish. I want a tool that actually provides me with valuable info.


Here is my idea for a new development tool extensions, plug-in or add-in. Whatever your lingo, a tool that provides real understanding of the project code. A tool helpful to both developer and manager.

Objective

To provide the Developer, Lead and Manager tools they need to evaluate performance of their current project and previous projects. Towards this purpose, the background tasks of the visual studio environment shall be monitored, for the purpose of presenting value to the team.

Graphs

- The following data captured and presented over a time period graph.
- Classes Created/Removed (methods, properties, fields, events and all the rest)
- Project Assets Created/Removed (Projects, Configuration files)
- Refactoring (when code is moved around, refactoring menus clicked etc)
- How fine grained is the project? A formula using the code stats

graph

Events as MetaData (The attachment icon above represents it)

Two kinds of Events, manual and automatic. Both configurable.

Manual Events
A developer has a small toolbar, with a Create Event button. The developer can press the button, and write a comment at any time, creating a piece of attaching MetaData. So when a server goes down, or when the team system server goes down for some reason leaving people stranded for 2 hours. It is a marker of that event occurring.

Automatic Events
When a certain amount of code lines are reached, without refactoring, raise event.
When a certain amount of classes, functions, methods are created, raise event.


One important aspect, is to be able to compare project to project. So the data should be exportable or comparable to another set of data.

Tags: , , , ,

Feb 23 2009

Software Development Until Done

Category: .NET | c# | Design | MethodologyJonathan @ 06:56

I am touching some code at the moment from a past employee. I cannot say the code is bad, nor that he is at fault. But, the result of half cooked code, is that it takes longer to understand, longer to set up on a new machine, longer to debug, longer to find and fix errors.

I have some brains, but still after 4 hours of delving into a project that utilizes a web service, DotNetNuke and some other projects, could not find the database, then source was checked out, code was duplicated in places (not sure which section was to blame), configuration files named, "development.config", "web.config", "test.config", "x.config", "y.config" made it impossible to find out which things was expected. I have yet to find a single paragraph on what was intended by certain portions of the code.


This is still on going, driving me crazy. I will probably be busy with it for a few days now. More...

Tags: , ,

Feb 19 2009

Ammerse Design Principles Overview

Category: Design | MethodologyJonathan @ 03:16

Well, you heard a bit of conversation about it in the Uncle Bob interview.

I would like to introduce the idea and what it is and what its intention is.

Ammerse is simply a "way of thinking" of "design oriented" things "written down". At the moment the way in which it is written is rough, and can be thought of as a draft. However, I felt that after 8 years or more of having this "method", it was time to write some of it down quickly, before I chicken out or come up with reasons why its bad, and not worth pursuing and other negative thoughts that plague my head.

If you are anything like me, you procrastinate, and with really strong counter arguments, you eventually end all pursuit of it. I am trying to overcome this self concentrated mind game, by simply "doing", simply making it happen and taking whatever comes my way.

Ammerse is this. You are faced with a project, and you need to get started. What is immediately involved with the decisions you need to make? What are the most important aspects? How do patterns and methods fit in. Ammerse points you to Patterns, more suitable (not exact matches, as you have to decide), but towards the ones that matter for that Principle. (I am still working through the list). The main aim of Ammerse is to provide an umbrella for the process, design, and implementation aspects of a project. It is an Index to Agile Methods and Patterns.

You can read about Ammerse, and tell me what you think so far.
I have still tons of things to add, and tons of clarification to make in the copy, but please send you comments. I will do my best to think about each one and filter it into the set of principles.

Tags: ,

Feb 17 2009

TalkWare Episode 3 with Robert C Martin

Category: Design | Design Patterns | Methodology | TalkWareJonathan @ 12:43

This is also available in iTunes, along with my interview with Kent Beck.

Interview with Robert C. Martin

Uncle Bob
Programmer since 1970. Published dozens of articles, is a regular speaker, author of: Designing Object Oriented C++ Applications using the Booch Method, Agile Software Development: Principles, Patterns, and Practices, UML for Java Progammers, Clean Code.

Editor-in-chief of the C++ Report. First chairman of the Agile Alliance.

Robert is also President and Chief Executive Officer at Object Mentor





Download mp3 - [54mb]

In this episode:

Rudolph, the Red Nosed Reindeer
Drum Memory
Good software in any language
Why should we care?
'Selfish' vs 'Giving' People
Extended Theory
Agile Manifesto
Technical Craftmanship
SCRUM Certification
Extreme Programming
The IT Industry
The Martial Arts Programming Art
Sounds like Exercise
semi SOLID
Ammerse Principles

Tags: , , ,

Feb 13 2009

What I want from a modelling tool


Case tools, Modelling, UML, you name it, we have had the dream. We have built the tools. We have designed and bashed heads on semantics and special interests. Now the compromise is still not good enough. When a team of people begin to compromise design and philosophies you get a ViewPointMixture. A ViewPointMixture: a mixture of good ideas from various people for various reasons = Bad design (most of the time).

Not all good ideas work well together, albeit a good idea in itself. Most tools then become technical. UML is a technical specification, therefore the tool reflects a 1 to 1 mapping. I don't necessarily want that to always be the case. More...

Tags: , ,

Feb 12 2009

A Tale of Two Types

Category: .NET | c# | Design Patterns | New IdeasJonathan @ 08:11

Something to think about

I would really like to see Design Patterns merge and disappear into our frameworks and runtimes.

For example, A Singleton could easily become a keyword and managed by the runtime.

But specifically here are two scenarios for merging a wrapper, or form of adaptor pattern.

Mapping Types
If you reference an Assembly (A) from your application that contains a Type that you want to use. Then you discover another Assembly (B), which references (A) you can. However, if the Assembly (B) and the Assembly (A) both reference the same Type from let's say a webservice, the code generated, thinks of these as two different Types. Although they come from the same WCF, or web service, they are treated as different. So creating an AssemblyA.Type and passing it to AssemblyB.Method wont work, as the Types are different. (no they are not). What if I could reference both Assemblies and interchange the two Types as if they were the same. Mark it as the same, and the CLR creates an adaptor/proxy for you.

Now if you have a system, and I have a system, both with a Person object, and happily coincidence it looks exactly the same. Albeit different assemblies, differently signed, it effectively could be the same thing, if only our tools allowed it. So what about being able to explicitly mark the two types so that it can be treated the same. A Wrapper within the CLR

yes we can code this manually
But it is not magically done, and that would save a lots of time. Take how .NET generates COM wrappers. Would you want to write it yourself?

In fact, add Duck Typing to this, method mapping, as explicit choices, a developer can make.
Mark the fact, declare that "treat these two classes as the same". Is this not in effect dynamic partial classes vs the traditional static partial class syntax we have now?

Tags: , , ,

Feb 10 2009

Visual Studio Fonts And Colours Export

Category: .NET | c# | New IdeasJonathan @ 08:52
Here is mine

FontsAndColours.vssettings (9.49 kb)


In gaming we usually share our configs. Wanna start a VS.NET config share?

I would like to export my code formatting and have it applied when I open a source file. BUT, it must not actually change the layout in file. Distinctly different. Just like fonts and colours are not stored in the code.

Just go to Visual Studio 2008, Tools | Import and Export Settings

Tags: ,

Feb 10 2009

Documenting is more Dynamic than you think

Category: .NET | c# | Code Generation | New IdeasJonathan @ 03:36
When we create objects and use config settings to ascertain context and things of that nature, it makes it harder to know what settings there are later on.

This is a significant fact across all things within software. Don't be scared to create small utilities and tools to aid your development. (As long as it does not affect your timelines).
Have you never got to a point in a project when you are wondering why something is not working and it ends up being a config setting?

Here is a simple solution for simple key/value settings More...

Tags:

Feb 9 2009

Limiting the Scope and Abilities of Objects

Category: Design | Design Patterns | FrameworksJonathan @ 05:14

with Framework Contraints

As part of my quest to define and create the smallest Framework, I have come across a feature that is sorely lacking in the Framework space. A Framework should have its own rules, succinct and distinct from standard development and by that I mean that sometimes the functions we need for Frameworks are over and above, under or below everyday development.

Declare a component, library, objects or Assemblies, "As a Framework"
I would like to declare with Java Annotations, c# Attributes, that a defined set of code is a Framework, is part of a Framework. This would give it distinction. Behaviour can then be tailored for a Framework.

in c#,
[assembly:FrameworkAssembly()],
[class:FrameworkExtensionClass],
[interfaces/members:FrameworkExtensionPoint]

Declaring Limitations
Take for example configuration. Currently there is no limitation on any class consuming any configuration it wants. This is because closing it off in the real world, makes no sense.

However, If I have a plug-in, which the Framework instantiates and invokes, it may want to to pass it configuration options. The fact that the plug-in writer has no idea that the Framework wants to do so, unless they are very familiar with the system, and it is clearly marked on an Interface. However, being marked on an Interface is still no guarantee.

So I think there needs to be a way to limit the plug-in. By limiting its capabilities, I am giving the plug-in developer direct communication of the intent.

So if the intent is for plug-ins to utilize the configuration framework, all components implementing IPlugIn, would be stopped from using any other configuration.

In .NET, perhaps its a simple Attribute we mark on the IPlugIn interface,
[FrameworkLimitedTo("Configuration", typeof(Framework.IConfiguration))]

Perhaps it could be more namespace driven as in.
[FrameworkConstraint("System.Configuration", Refuse | Deny | Allow | Limit)]

Now any usage of the System.Configuration would cause a Warning or Compiler Error depending on the Constraint.

Also, please feel free to read my yet unfinished listings of Quest to define A Framework

Consider Status
A small example. Take a simple Command Pattern. We call execute and during Execute we would like to mark a status. A status of the actual Execute method executing. So when Execute is called the first line is Status = Busy, and the last line is Status = Ready. How do you enforce that the Execute method of the object you are about to call, actually implements it?
You won't, unless you mark it with yet another Interface, perhaps IImplementsStatus, but even then you have no guarantee that the object is actually setting the Status flag properly.

So towards a fix, a [FrameworkConstraint:VariableStatus(mustBeSet=True)] can be placed on the Execute method.

Tags: ,

Feb 7 2009

Next on CodeGenWeek

Category: Code Generation | CodeGenWeek | TalkWareJonathan @ 04:33

Coming soon on TalkWare, it is another CodeGenWeek.

Now you may be aware, that TalkWare is the name of the PodCast show that I have started and you may also be aware of the Kent Beck interview. This is my first time doing podcasting and with all first time things, it is a learning experience. So I am starting out with a range of formats and interests and need your input to tell me what you want to hear on the show. Thank you, to a few of you who have sent me very supported emails already. It is much appreciated.

What is coming up on TalkWare?

CodeGenWeek II
This time, we are going to have 3 guests, coming to share their thoughts on Code Generation.
Once again if you have any questions, you wish me to pose to any or all of my guests, please send me an email and/or record and send me an mp3 of you asking the question.

We are going to be discussing Code Generation in today's current climate. Where will it go to next? What is the next generation going to look like?

Cyril Jandia lives in France, has a B.S. in Language Science and is a software developer interested in DSL's and OSLO.

Omer van Kloeten will be joining us from Israel. He has multiple projects on CodePlex, including Code Snippet Repository and CodeDom Patterns.

Oleg Sych, from Tampa Bay, Florida, is the creator of T4 Toolbox on CodePlex.

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: , , , ,

Feb 1 2009

TalkWare

Category: .NET | CodeGenWeek | Design | TalkWareJonathan @ 06:40

I have decided to create a podcast show, already available in iTunes, called TalkWare.

My very first guest is Kent Beck, so it should be a good start.




Coming Up on TalkWare , hosted by Jonathan Crossland.

Estimated Time: 6th February 2009

Extreme Programming with

Kent Beck

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


Estimated Time: 13th February 2009

Code Generation with:

Omer van Kloeten, Oleg Synch and Cyril Jandia



Tags:

Feb 1 2009

CodeGenWeek

Category: Jonathan @ 05:41
So CodeGenWeek I has come to an end.
But we will be having CodeGenWeek II, from Monday 9th - Sunday 15th February. So if you are interested in CodeGen, we will have even more content for you.

First let's look back on CodeGenWeek I, and thereafter, I will introduce what is lined up for the CodeGen II.

CodeGenWeek I Highlights

For CodeGenWeek I, I presented a few ideas regarding how code generation could work within our tools, to make it more a part of our everyday development. I spoke about how Code generation seems to be predominantly a customized code dump, rather than code that understood itself, and with reverse engineering or round trip engineering, it could offer a better solution.

Here are all the links from this weeks CodeGenWeek.


CodeGeneration Network

I received a few comments regarding codegen but not very many, however I still maintain that CodeGen will be huge, so starting the 9th February, I will be holding CodeGenWeek II, with more substance.

CodeGenWeek II


I have 3 interesting guests lined up, for CodeGenWeek II, which will be presented in two Parts.



This will be a .NET centric look at Code Generation, from templates and patterns, to Oslo.

If you have any questions, you would like to pose to our guests, send them to me, I would be happy to pose them for you. Please make sure I have your full name, what you do and where you are from as well, so I can present your question properly.

Tags: