-
Do you understand the value of consistency?
If you need to do something more than once, then there should be a standard for
it. At the heart of our philosophy on creating rules and standards is the idea of
consistency.
Say we are creating a windows forms application. We can expect to:
- Improve productivity - because there are less decisions to make, and you build
on existing work.
For example, we don't need to discuss the pros and cons of MDI versus SDI because
there is already a standard.
- Improve quality - because you are following best practices.
For example, which logging library is better out of
Microsoft Application Block or
Log4NET.
- Improve communications - because people know what to expect.
For example, when we complete a task we are clear and educate the customer by including
a screenshot, the code and the time taken. We are consistent on whether we call
it a bug or a feature because we define what's a bug.
- Get straight to the meat of the customer's problem.
For example, our developers don't need to decide whether to implement baseforms
or user controls. They already know because it's covered in
Rules to Better Windows Forms Applications.
At SSW we create standards for all manner of processes: from coding practices to
project proposals and how to lock the office up at night. From the developer's perspective,
consistency means that we understand each other's code, and if we don't know something,
a standard will often save us asking someone. No more Chinese whispers, and less
time wasted. From the customer's perspective, consistency leads to a reliable and
repeatable experience.
The following story illustrates these values:
The Barber (excerpt from "The E Myth" page 105)
I went to a barber who, in our first meeting, gave me one of the best haircuts I
had ever had. He was a master with the scissors and used them exclusively, never
resorting to electric shears as so many others do. Before cutting my hair, he insisted
on washing it, explaining that the washing made cutting easier. During the haircut,
one of his assistants kept my cup of coffee fresh. In all, the experience was delightful,
so I made an appointment to return.
When I returned, however, everything had changed. Instead of using the scissors
exclusively, he used the shears about 50 percent of the time. He not only didn't
wash my hair but never even mentioned it. The assistant did bring me a cup of coffee,
but only once, never to return. Nonetheless, the haircut was again excellent.
Several weeks later, I returned for a third appointment. This time, the barber did
wash my hair, but after cutting it, preliminary to a final trim. This time he again
used the scissors exclusively, but, unlike the first two times, no coffee was served,
although he did ask if I would like a glass of wine. At first I thought it might
be the assistant's day off, but she soon appeared, busily working with the inventory
near the front of the shop.
As I left, something in me decided not to go back. It certainly wasn't the haircut-he
did an excellent job. It wasn't the barber. He was pleasant, affable, seemed to
know his business. It was something more essential than that.
There was absolutely no consistency to the experience.
The expectations created at the first meeting were violated at each subsequent visit.
I wasn't sure what to expect. And something in me wanted to be sure. I wanted an
experience I could repeat by making the choice to return.
The unpredictability said nothing about the barber, other than that he was constantly
- and arbitrarily - changing my experience for me. He was in control of my experience,
not I. And he demonstrated little sensitivity to the impact of his behaviour on
me. He was running the business for him, not for me. And by doing so, he was depriving
me of the experience of making a decision to patronize his business for my own reasons,
whatever they might have been.
It didn't matter what I wanted.
It didn't matter that I enjoyed the sound of scissors and somehow equated them with
a professional haircut.
It didn't matter that I enjoyed being waited on by his assistant.
It didn't matter that I enjoyed the experience of having my hair washed before he
set to work and that I actually believed it would improve the quality of the haircut.
I would have been embarrassed to ask for these things, let alone to give my reasons
for wanting them. They were all so totally emotional, so illogical. How could I
have explained them, or justified them, without appearing to be a boob?
What the barber did was to give me a delightful experience and then take it away.
What you do in your model is not nearly as important as doing what you do the same
way, each and every time.
-
Figure: The Barber, Excerpt from "The E Myth" p 10
Standards don't need to come at the expense of creativity. Following standards means
less time doing the administrative stuff and more time for the creative. Of course
standards are works in progress, and so we are always on the look out for improvements.
That's why standards should be shared with everyone.
-
Do you manage clients expectations?
Software development can be painful and costly. Hang on, that should say "Software
development IS painful and costly." Well, not always, but it has been observed
that in 1999 "75% of all development projects missed their target release date
or never ship at all." Projects often fail because clients think suppliers
under-deliver and over-charge. The client and the supplier have different expectations
about the goals of the project. This difference of opinion often leads to a projects
absolute failure.
Don't give ranges! Let's say a prospect asks me "how much to do this
Release?" I could say - "somewhere between $15k - $20k". I hear 20,
the prospect hears 15. I'm pleased we got it done for $25k with a whole bunch of
changes, the client is annoyed we didn't get it done in 12. So I never give a range
to a client. I tell them that the first Release, along with its spec is likely to
take $20k. That's two guys working full time for two weeks.
Be upfront about bugs I don't believe there is such a
thing as bugless software. It's important to admit that bugs will happen. Bugs will
get through testing, and bugs will cause a headache in production. In a fixed price
agreement we cover bugs, because the goal posts are stuck in the ground, but in
hourly-rate work, bugs are covered by the client. See
what is covered in fixed price contracts for more information in relation
to what is and what is not a bug.
Fixed prices don't solve anything: A big fixed-price contract can also be
dangerous in managing expectations because it removes flexibility. If you deliver
exactly what the spec says, the client can quite easily be unhappy, because the
hundred and one things they thought of during development weren't included. I recommend
fixed-prices in Releases of no more than 3 weeks development which helps alleviate
this problem. It will often occur that in the middle of a fixed price contract a
client will ask you to add extra functionality. You should not do any such items
straight away, but turn this request into a task for future development. At SSW
we convert the task into an email, then use
SSW eXtreme Emails! to generate a release plan for all the extra items once
the fixed price contract has been signed off. It is important that the customer
is always clear on what is part of a fixed price contract and what is not, that
is why you should always finish a fixed price contract and have it signed off before
starting extra work.
Talk dollars at the first meeting: Talking dollars with the client is often
something consultants don't like doing after the initial meeting. I've heard of
consultants refraining from sending invoices when a project is suffering a few delays,
or the client is unhappy with the application state. What makes this consultant
think that if the client is unhappy to receive an invoice now, they'll be happy
to receive it in two months? We send invoices for time and material projects every
week, this way the client is informed of costs every week, and if a hassle arises,
it's trapped straight away.
-
Do you pursue short or long-term relationships with clients?
I have been told that it's good to treat clients the same way you would treat a prospective partner - that is, with lots of TLC.
The first kind of approach is where you try and seal the whole deal in one go: "I think we would work well together,
would you like to get married and have two children?"
The usual response is "Get lost you loser."
The second and more appropriate approach is asking something like "Would you like to have coffee together?".
You have a greater chance the prospective partner will say "yes"...
Unless you are a great salesperson, who has constant exposure to new clients, then I suggest you use the 2nd approach.
Clients are likely to be frightened off with huge quotations, so by segmenting the project into smaller projects it waives
some uncertainties.
For example:
The initial meeting concludes with us telling the clients that we will prepare a
proposal (for free), which will have a series of release plans costing $100K.
-
Figure: Any new prospect should not be handled in this way, as it is too big of
a figure for a first taste of your work
To conclude the initial meeting, we tell the clients there are two options to consider.
The next step is the Specification Review, which will take 2 days with 3 developers.
-
Figure: Clients are more likely to appreciate this approach, as they are given the
option of proceeding with a small project with prospects of continuing to work with
you based on how well the previous project went
-
Is your client clear on how you manage projects?
Software must help a business become more efficient and build better relationships with their clients. This means
that software must also be cost-effective and quick to market. Traditionally, software has been slow to build and
difficult to change.
SSW's Rules to Better Project Management, built on eXtreme Programming, allows businesses to address their most
important challenges first, and respond quickly to a changing commercial environment. We prefer to work on-site,
in close consultation with you and your business users, becoming an integrated part of your team. We believe these
rules deliver functional, value-adding software - faster.
-
Do you enforce deadlines, have a project release plan, a debrief,
a mark /10 and a status meeting?
Developers love doing things in their own time, investigating interesting things
they find on the web and generally they're easily distracted. If they don't have
a project plan constantly in front of them they'll never deliver on time! For every
project you must have 3 essential things:
- A status update
if the release is not yet complete
- Every 2 weeks the developer has a meeting with the client to discuss status of project.
If you can't have a meeting, a phone call is fine. If the release is finished then
it will be a release debrief; if not it will be a status update.
Often when things are going right, the tendency is to let things be. A better idea
is to figure out why things are going right, and work out how you can repeat it.
For example, if your client calls and says, "We think Dan has shown very professional
conduct and has delivered a high-quality solution", you should look at how
the project was run. Was the solution high-quality because your developer followed
your coding standards? Was his professional conduct due to lots of customer interaction
and polite and clear communication?
Of course, if in your release debriefing you find that the client is unhappy due
to bad conduct, scope creep, or poor quality code, you need to check that your standards
are being followed to ensure a positive experience in the next debriefing.
-
Management - Do you only work from an approved release plan?
Unless you are working under an ad-hoc basis you should always be working from
a signed release plan.
At the start of each release put together a release plan which is then sent to the client for approval.
Arrange an appointment (subject "Debrief: Project Name") for your project manager to come in and do a review in
2 weeks. This doesn't set unrealistic schedules, but puts pressure on the developer to have something done by then.
Management - Do you have a Release Debrief?
At the conclusion of the internal and external "test please", but before deployment, you should meet with the client to discuss
the release. The purpose of the meeting is to:
- Compare estimates costs against actuals costs for that release
- Check the status of all original scheduled tasks (e.g. have some tasks been pushed to a later release)
- Review any additional items
- Monitor any known metrics of the project
- Ask for a mark out of 10 for how well the release went
- Discover any other issues to do with time, scope, cost or quality
- Decide to proceed to deployment
You can send a release debrief email with eXtreme Emails
A release debrief should be held by default even if an external "test please" hasn't been passed. It should be scheduled for
no later than 1 week after the initial estimated completion date.
-
Is your client clear on the definition of a bug?
The answer to this question can make or break contracts. We think that it's such
a fundamental issue it has to be captured clearly. This is how we strictly define
it:
"A reproducible coding error that causes an unexpected defect, fault, flaw,
or imperfection in a computer program." In other words, if any of the
developed software does not perform as the developers intended, it is most likely
a bug.
You can tell it is a bug when:
- It is able to be reproduced
- The application crashes to code (runtime
errors should be handled or avoided). This does not include bugs in third party
products (e.g. Blue screen of death, or crashing in a third party data grid that
we cannot control)
- The application displays incorrect values
-
The application is missing specified functionality that was agreed in the
Mock-ups or specification
Examples of what is a Bug:
Examples of what IS included in a fixed price contract (i.e. bugs). These
are primarily technical (rather than business logic) errors made by the developer.
Technical workarounds because of unforeseen limitations of technology are covered
by a fixed price contract.
- A sum total is negative instead of positive because the developer used the wrong
operator (plus instead of minus) to calculate the running balance. (This is a bug
because it crashes to code)
- The application crashes because it doesn't check that a connection is valid before
running a stored procedure. (This is a bug because it crashes to code)
- The output HTML in the application is not correctly formatted, and does not display
in the specified browser (e.g. Internet Explorer 5). (This is a bug because it displays
incorrect values and crashes to code)
- The fixed price contract says that the converted VB.NET Windows Forms application
has "comparable" or the same functionality as Access. The original
application uses Docmd.SendObject (i.e. uses Outlook), which has the brokers "from"
address. The converted application uses reporting services (as recommended by the
developer). However, this always has the same "from" address - and functionality
has been lost. The modifications to use a web service for the "from" address
are covered by the fixed contract. (This is a bug because it is missing specified
functionality)
- Defaults are in the UI mock-ups, but they are not
in the final application (this is a bug because it displays incorrect values)
Examples of what is NOT a Bug:
- Any problem caused by software or an application not written by SSW.
- The
customer requirement was not included in the user interfacemock-ups/specifications.
-
The client decides that they don't like the look of the current form even though
it is the same as shown in the specification and wants the buttons at the bottom
of the form instead of at the top.
- The original specification states that the
total price excludes GST, but it really should have included GST. This is a change
to the specification, and is not included in the contract.
More specifically, when using SSW eXtreme
Emails! during a fixed price contract, any new features or modifications
(non-bug items) not in the original Pre-Release plan are additional work and are
outside the scope of the contract. Any Incidents which are bugs should be
marked as additional items and be completed in the current release if possible.
Most importantly, after the Pre-Release plan has been sent, an Incident should NOT
be entered as an item (additional or otherwise) in ANY releases if they are not
a bug. Instead, move all non-bug items to the zsUnallocated folder for future
review after the warranty period for the fixed price contract has passed.
If you see a bug in an SSW software product, please report the issue following the
steps outlined the SSW
Bug or Enhancement Reporting Standard.
|
Note: The above is our definition. Others have different definitions that we do
not subscribe to:
|
What is the warranty period?
The warranty period is a period of time when reported bugs will be covered by the
fixed price contract. The warranty period is 30 days if not extended. If a bug is
found during the 30 days, the warranty period is extended to 30 days from the date
the bug was reported. For example, the developer introduces a new bug on the final
day of warranty as part of a bug fix, but this repair work/fix introduces a new
issue or bug - reported on the next day. In this case, the newly introduced bug
will be covered by the fixed price contract.
When using SSW eXtreme Emails!, the
warranty period would begin when you send the "Test Please" email, directing
the client to the current version of the application.
-
Do you maintain verbal contact with your client?
With the convenience and cost-effectiveness of e-mail, it is tempting to resort
to emails for client contact. We sometimes forget that our clients are people just
like us who need human interaction to ensure everything is OK. This is why it is
essential that you maintain verbal contact before, during and after a project. What
does this mean?
- Let the client know what to expect in terms of communication, i.e. :
- "The first step is, we send you a release plan to approve. Once approved we can
begin work"
- "Every morning expect a 'Morning Goals' email with a list of tasks
the developers will be working on that day"
- "Every time a task is done, you
will get an email with information about the task such as time taken, screen shots
and code snippets"
- "If you need to change the priority of a task, just let us
know and we will consider it for inclusion either in this or the next release depending
on its importance"
- Avoid going more than 3 days without a phone call
- If you are put onto an
existing project, it is good practice to call the client and introduce yourself.
For example, "Hi, I'm Andrew. I'll be taking over from Mark on your project. Mark
has filled me in on the specifics and I'm keen to get involved."
If you maintain an open channel of verbal communication with your client, it helps
to break down communication barriers, lets the client know that you are friendly
and involved, and makes them feel comfortable with you and SSW.
-
Do you know who has authority?
Figure: Sample Change Request Confirmation email
|
To: Angelo;
Cc: John, Sophie
Subject: Changes Requested by Sophie
As per our conversation, Sophie has requested the following changes to your application:
modifying rptContractRenewal to include the "MaidenName" field from the
ClientContact Table, and positioning right next to the Surname field.
Please let us know ASAP if you don't want this problem fixed.
Thanks,
John
www.ssw.com.au
|
Ok, once a project gets going, you can end up dealing with many people on the client
side. From the Boss to the Business Decision Maker (we call them the "Company Champion")
through to Mary the receptionist (aka "users"), everyone has something to say about
the software as it is being developed. However, when you are working on a Time &
Materials basis in a rapid development environment with continually changing specs,
you have to be certain that the work you are doing is authorised by the person who
signs the cheques.
So, say Alan from Accounts would like the Username and Password authentication to
have a "remember me" checkbox for the Accounts module. This sounds reasonable, but
it doesn't mean that you should charge right in and start coding.
As an example, this is how we govern this process:
- At the beginning of the project one of the client staff is assigned as Company Champion.
This person has full authority from the Business Decision Maker of the client as
to what work is IN or OUT. Every new item of work must be authorised by this Company
Champion.
- Whenever someone who ISN'T the Company Champion makes a request for work, the Company
Champion must be CC'd. If Mary the receptionist has not done this, the developer
sends the email again to himself, and CC's the Company Champion (CC'ing other relevant
people - if they may give feedback on the task) to let them know about the request.
- We make the assumption that the task is good to go, so it is the Company Champion's
job to make sure that they reply ASAP if they don't want the problem fixed.
-
Do you spec in bite-sized pieces?
The first problem with specs is that nobody writes them. Joel Spolsky says
"Writing specs is like flossing: everyone agrees that it's a good thing, but nobody does it". We know developers like
writing code more than specs, but the rule is developers don't code without a spec (including a release plan).
The second problem is that when people do write them, they try and spec the whole project, spending months detailing
every Use Case, Business Rule and Process Flow Diagram. The client spends lots of money and sees no real progress, and the
requirements change and the process begins again.
For example, if your client wants an application that manages Customers and Customer Projects, get the whole Customer
phase up and running before you get Customer Projects running. This way you have two 1 month deadlines, instead of 1
two month deadline.
At SSW we spec in two phases, the first to get an overview of the project, the second, to focus on the
detail of first few releases only:
-
Do you conduct specification analysis by creating mock-ups?
Complex documentation can waste time. Many user requirements can be best encapsulated in screen mock-ups.
Spend more time on mockups over time on word documents, because they identify basic functionality and minimizing refactoring.
And more amazingly they identify small but important requirements that often lead to more requirements. Eg. a message to a user, where the customer wants the URL to be clickable (meaning the standard MessageBox will not be appropriate..
Here are some hot tips on mock-ups:
- Avoid the thought of a "throw away" prototype. An example of a throw away prototype is when you design screens in Access, but the application will be HTML. So design the screens you and the customer are happy with the technology you will be using, and then use them in the app.
- It is best to have a designer and developer and customer working together.
- Get the mock-ups physically initialed, especially if you are performing a fixed-price contract. Yes paperless is great - but not in this case.
- Mockups should cost the customer money
- A tip I picked up from Tom Howe was always add a client's branding into the mockup - it makes a big impression
- Mock-ups should follow standard interface rules
- Write the related business rules at the bottom of each screen - and turn into unit tests.
There are five primary types of mock-ups:
- Hand drawn Mockup;
- Wireframe Mockup;
- Developer HTML Mockup;
- Designer HTML Mockup;
- Designer Photoshop Mockup. (recommended)
More details on the different types of mockups/prototypes:
-
A 'Hand drawn Mockup' - A sketch:
Copy from A 'Hard drawn Mockup' example

- Figure: Hand drawn mockup example - recommended to do with customer, however doesn't deal with any styling/color issues, so Photoshop Mockups is still needed.
-
A 'Wireframe Mockup' - A layout of how controls would look in static form, no interaction in image format. e.g Visio or hand-drawn:
An example of Wireframe Mockup

- Figure: Wireframe mockup example - not recommended as it completely thrown out.
-
A 'Developer HTML Mockup' - These are mockups in a Web/Windows Forms/Access UI with limited functionality:
An example of an ugly Develop HTML Mockup

- Figure: Developer HTML Mockup example - not recommended as it is a bad starting point from a HTML view and refactoring later is harder (if even possible) + this reeks of Bodgy Brothers and doesn't do a very good sales job.
-
A 'Designer HTML Mockup' - These are also mockups in a Web/Windows Forms with full CSS Styling and graphic designer enhancements:
An example of an pretty Designer HTML Mockup

- Figure: Designer HTML Mockup - not recommend because it is time consuming to make changes (which is what you are doing at the beginning of a project)
-
A 'Designer Photoshop Mockup' - These are concept mockups in Photoshop providing a guidance of the final look with full styling.
Don't go down the track of giving a customer a few concepts - there becomes too much mixing and matching when they see them.
Once the images are approved, then the designers slice them up and turn them into HTML
Note: slicing is the exporting of each image:

- Figure: Designer Photoshop Mockup example - recommended as quick to change, when changes happen (especially in early stages of a project)
-
Do you conduct Market Research via the Web?
Why write code when you may not need to write any at all? In every industry Market
Research is conducted before a product is developed. Why is IT any different? Doing
Market Research focuses the product on the right set of people so you can satisfy
their needs. If you can't connect the dots between the work you do and how it helps
the customer, consider investing your time elsewhere. Market Research bridges the
gap between the techies and the users.
A great way we get feedback on upcoming projects is by putting
our specs of upcoming projects on the web and inviting user comments - not
forgetting to acknowledge their contribution. Often Surfers will tell you what is
needed to make the product great instead of just good, or you may be told that there
is already a program out there that does the job. You should also spend two days
looking for similar products and speaking to users about the features. Since the
specs are full of screen captures, this allows us to think of our end-users and
increases the likelihood of creating a great product which our users love.
Who comes first? The Technology or the User? I even wonder about Microsoft, they've
built this great .Net technology which works fine in Notepad but now we're waiting
for the Visual Studio interface. They are going to shoehorn a user interface and
experience onto the framework so the user experience is likely to be a compromise.
What great products are designed this way? Do tailors measure their clients after
the suit has been sewn together? I'm sure Microsoft spend heaps of time and money
discussing the specs amongst themselves, but I believe they should've put the interface/Images
on the web so that experienced users could voice their opinion and offer suggestions
early in the product cycle. Instead we wait for the beta versions - if you offer
a suggestion now, there is no time for it to be implemented as the shipping deadline
is too close. The only contribution we can make at this stage is finding bugs!
So balance engineering, business and usability, put your specs on the web, keep
them updated with changes, and listen to your users!
-
Searching: Know the three important sites for when you're
stuck
You've come across an error you can't fix. Do you:
- Start coding?
- Start thinking about how you should write the function before
coding?
- Put it off till later?
- How should I know? - I never really analyse
these things
- Investigate to see whether someone else has come across the same
problem?
If you think about the problem, you are brighter than the average programmer. In
software development it is highly possible that someone else has encountered the
same problem you are trying to solve. And if so they may have even made that solution
public, even better still, the developer may have compiled their solution in a very handy 3rd
party utility you can download.
This is the way in which we investigate issues:
- Newsgroups http://groups.google.com

- Search
Engines (http://www.google.com
is by far the best but try other search engines as well) - Microsoft Knowledge
Base - http://support.microsoft.com/support
(Great for issues/bugs in your programs)
This applies whenever you are writing specifications or dealing with support issues
and Bugs in your programs.
-
Searching: Do you know how to be a great Googler?
The best developers are also extremely good at finding a solution to a problem they
don't know.
I am pretty good at Googling. When I can't find something, I ask my friend Scotty
on IM. Scott Hanselman is the best Googler I know. He can find anything in 2 minutes...
Tips:
- Think of a piece of the code that will be in the answer
- Include the company
name if possible
- Use the advanced searching functionality
- Use quotation
marks when you're searching for an exact string
- Include the technology used
if appropriate
If someone asks you for help searching, always tell them the keywords - that will
help them learn to search better.
For example, take www.smh.com.au
,
a leading Australian news website. If you search on the key words 'Australia' and
'news' you wont find it on the first page, but if you add 'Sydney' (a word from
the company name) then you're number 1...
-
Searching: Can you instantly find any file on your
computer or network?
Often you will want to quickly find a file on your computer or local network. On
the web, with the advances in search engines this seems so easy. New enterprise
search tools are now making this same feat possible for your desktop. Your tool
should index all your local files and emails, and also allow you to search your
entire network.
Using either Google Desktop
Search
or MSN Desktop Search
will allow you to instantly search for a name and find all correspondence with that
person. Even if there has been no contact for 6 months, you can resume the discussion
as if it were yesterday.
Follow our standard on
setting up Enterprise Search
-
Do you always inform your client how long a
task took?
Put 'Actual Time Taken' into your email. It's all about education and accountability
- a customer that understands how long things take is better than one who doesn't.
During the course of a Time and Materials projects, a client will often ask for
an estimate on a particular piece of work. Of course we duly go about investigating
the work to deliver to the client the required estimate.
Sometimes, due to the nature of the work, the time taken to investigate is completely
out of proportion to the time taken to complete the work. As an example, if you
are working on a legacy ASP application with loads of spaghetti code, and the client
wants a particular bug fixed, it can take 2 hours to locate the bug, and then only
15 minutes to fix it. When you report to the client the estimate for 'how long'
- ensure you include the 2 hours investigation, not just the time to fix it. Thus,
you need to put 'Actual Time Taken: 2:15'
|
We have a program called SSW eXtreme Emails!
that allows you to use Email as a task tracking, estimating and reporting tool.
|
-
Do you use XP wisely?
Figure: You need to check up on your developers every 2 weeks. Then you'll never
be fooled!
|
eXtreme Programming is a big concept which we try to use here. I don't adhere to
every idea, but there are some very practical rules I follow which improves the
way we develop on large projects:
- Releases - Never set a deadline more than 3 weeks from the previous deadline. Deliverables
become a lot easier to manage and meet when they're small.
- Unit Tests - Write tests before you write code. Unit Tests become a way of life
and although they're expensive at the beginning, they pay off during the course
of the project. To find out more about Unit Tests see
Rules To Better Unit Tests and for unit tests in the GUI of SSW Code Auditor
please go to Rules to
Better Code
- Validation Tests - To find out more about Validation Tests see
Rules To Better Website Development
Here are the rules we don't agree with:
- Metaphors - the client description
- Physical Cards - emails are much better
- we use SSW eXtreme Emails
- Pair
Programming:
- XP says 2 people at one PC - we have two developers on their own PC's sitting next
to each other.
- We fix production code in pairs. 'Too Expensive' some say. Yes
it's pricey, but it's better quality.
-
Management - Do you have daily stand-up meetings (Scrums)?
A tight project team should have a daily 'scrum' stand-up meeting every morning. It's held standing-up so it's short
and to the point. No-one wants to stand around waffling. Three essential questions must be asked:
- What did you do yesterday?
- What are you going to do today?
- Do you have any roadblocks?
Asking these questions of every project member means no-one can hide and must contribute. Further, if there is a disconnect
between what was promised and what was performed the Project Manager discovers issues quickly. , the team becomes aware of progress
and members are accountable for the promises they make and break. The team's successes
and failures are shared, and anyone who knows the answer to someone else's problem
can help with a solution after the meeting.
The client is required at the stand up meeting if the project is managed by the client (ie Ad Hoc work).
Another few questions you might be interesting in asking are:
- Who were you working with?
- How long before the next 'debrief Meeting'?
- Do you think the client is happy?
-

- Figure:
Schedule a daily recurring scrum meeting in Outlook
-
Do you send Morning Goals?
-
 - Figure: Sample
Morning Goals Email
|
|
|
At SSW we email the tasks we plan to achieve that day (only!) to our client (CCing
our manager) within 10 minutes of sitting at the desk, before we make any phone
calls or write any emails. This ensures our clients are fully aware of the work
taking place - and gives them a chance to change the priorities. It also allows
us to get better at estimating what we will achieve in a day. These updates are
particularly useful for off-site work and most on-site work - unless a client chooses
to manage the project down to the task level, and performs daily status checks.
We:
- Forward the previous morning goal from yesterday, striking out completed items
-
Comment (in a different colour) and give the reason whether any items were not completed
- Copy outstanding items to today's morning goals, appending any new information
-
If we are working on-site we always send our morning goals from our SSW mail account,
not an internal account the client may choose to give us. This enables us to keep
a record of the email, and also keeps the branding consistent. If this is not possible,
we always CC our SSW account (and then move the emails into your "Saved
Items" when you get back to the office)
- If something more important
arises during the day, we note it down on the next days morning goals.
- If a
task is huge (e.g. clean up my email inbox) and we only aim to do a portion of it,
we say so in the morning goals as well.
-

- Figure: Morning
Goal Item with a mini goal (140 emails)
Morning goals should be sent to the client, CCing the people you are working with.
If working internally, the client is your boss or product manager.
-
Do you allow users to check for a new version easily?
It is important to give users the ability to check for a new version of the application
they are using. And once located it should be easily downloaded and installed. We
place:
- A tick or a cross on the main menu
- and a "Check for Updates" option
in our Help menu.
Remember:
- This is mainly for Windows Forms, but you can do the same for new versions of Web
Applications - e.g. a knowledge base package or Reporting Services Application.
-
You can do a complete check of your PC at the click of a button using
SSW Diagnostics
- Since this check occurs over the web, you should use threading to avoid slowing
down the forms responsiveness. This is a generic component that is available in
the SSW .NET Toolkit.
- If the UI is
a Windows Service, be aware that they don't open up the UI very often. Therefore
you can't rely on this method. In a coming release Diagnostics will ask for your
email and let you know when updates are available for you PC.
-

- Figure: BAD UI - a nagging
message box that forces the User to click OK
-

- Figure: Show a Tick when the application
is up to date
-

- Figure: Show a Cross when the application
is out of date
To keep the consistent look and consistent code, we have implemented our version
checker as a user control.
-

- Figure: SSW.Framework.WindowsUI.VersionStatus
As it is a user control, we can easily implement this in all our applications. We
just need to place the user control on the winform, and have the ProductDownloadID
and ProductLatestVersionURL entered with the correct values.
-

- Figure:
Enter the ProductDownloadID and ProductLatestVersionURL
-

- Figure: Include
'Check for Updates' in your applications
-
Do you keep the best possible bug database?
There are 101 bug databases on the market at the moment and of course many companies
make up their own in-house system. Historically these have been Access or VB apps,
but the latest fashion is to use Web-based apps. Because you will use it all day
long, it should be rich-client. But as your clients will need to report bugs as
well, web-access is also important.
This is a common scenario: Your tester/client finds a bug, they log on to your on-line
bug database, and enter the data, they save the error message as a gif and upload
the image. As Project Manager, you get notified by email of the bug, you log on
to the application, view the image, review the status, assign a priority, and assign
it to a developer. The developer receives the email, logs on and sets about fixing
the bug. When completed, he logs back on to the application, enters a completed
date, and an email is sent to the tester/client. The tester/client logs on, and
is told what to test, reviews the work, enters a checked by date, and the final
email is sent to the manager who closes the bug.
Phew! That sounds like a lot of steps which is why most people resort to just sending
an email. I believe most people send requests for tasks via email, if this is the
case, why should developers have a separate "to-do" list, in the form
of a bug-database in which they re-enter data?
Exchange Server and Public Folders (made available on the Internet) are the best
solution. The benefits are:
- Developers are working solely from their email which they are familiar with, and
don't have to switch applications when working on their "to-do"list
-
They don't have to re-enter data
- Managers can see important information like
Tasks Completed and Tasks Assigned. The reports are ASPX pages that read from Exchange
Server via OLEDB
- Clients can see what developers are working on via a URL to
the Public Folder
-
Do you log every error?
-
 - Figure: Log every error!
|
When you walk into a clothes store to exchange a pair of jeans, you expect to be
treated with respect. The sales person should talk to you at your level, deal with
your issues, and in a polite and fair way handle your problem. Why do Developers
think they can treat their users so poorly?
Every error message you put into your products is an opportunity for good service.
Users don't want to see "Run-time error. Can't save record with zero length
string" The User should receive messages that help them through the situation.
Not to say though that there is any ideal error message - a great error is one that
has been eliminated! We believe that every unhandled error is our fault - not a
user error. We weren't smart enough to ensure that the user would never encounter
this problem. It could be we failed to create the right interface, we wrote sloppy
code or that we didn't test well enough.
In the old days we used to store unhandled errors in a local Access db, but in the
connected world, to ensure that all unhandled errors are dealt with as quickly as
possible, SSW applications now automatically email unhandled errors to our Exchange
Server. This is a proactive and polite approach of dealing with unhandled errors.
If it's serious we will contact the client to resolve the situation - they get a
bit of a surprise and think we have ESP!
Remember what it is like to have good service in a restaurant. A good waiter knows
when to interrupt you, when to leave you alone and how to do it all in a courteous
and respectful way.
At SSW all errors are caught and emailed to support@s*w.com.au. (Note: Please change "*" in "s*w" to a "s") They then go into
a public folder 'Support' where a web service logs the error into a database.
-
Do you provide your users with Diagnostics (aka refactor
tools?)
We recommend adding these menus to your Tools Menu:
-
Do you fix bugs first?
This rule has been important to me for a long time. Fix bugs before adding functionality.
There are a number of reasons the most important is that bugs get more expensive
as they get older. This is important because, in general, a bug will be more complex
to fix the longer you wait to fix it. And it's far better to get the developer who
created it to fix it while it's still fresh in their mind.
If there isn't a rule 'Bugs first' then too many developers have a tendency to focus
on the new 'interesting' functionality, than fixing that bug they left yesterday...
There are other pressures like the project plan is behind schedule or the client
is telling you that they want this feature added, and leave the "bug fixes"
in the existing code till later. This is a deadly mistake. At SSW we always fix
known bugs first.
-
Do you Re-factor?
What about bugs that aren't really "bugs"? An example could be an incorrect
naming convention, or a spelling mistake in a folder name. At some point in the
future this is going to cause a headache. Developers are going to have to factor
in this error meaning errors will be built on errors.
What do you do when you see a directory structure like this:
- SSW/Images
- PDI/Images
- ABC/Image
- Leave it, it is only a little inconsistency after all, and fixing it may cause some
bad links and why fix something that isn't broken?
- OR fix the inconsistency
straightaway?
For me the only answer is b). Tackle these problems head on, in line with the fourth
principle of eXtreme Programming - courage. Fix the problem now and save it from
becoming a bigger problem later.
The best way to keep consistency is to use 'Lint Testing tools'. When you find lint
on your jacket, your jacket doesn't stop working, but you fix it anyway because
you care about how you look and the impression you give. You should treat your code
the same way. The "lint testing" tools I use are
Code Auditor, SQL Auditor and
Link Auditor.
-
Do you 'zz' old files?
When you are regularly creating new releases of a cool .NET application or simply
producing new proposals in Microsoft Word, files will inevitably become outdated.
At SSW we are aggressive in killing any unused files. Rather than hit the DELETE
key we put a 'zz' at the front of the filename. The old versions should not be deleted
straight away - it is just an unnecessary risk!
-

- Figure: Include
'Check for Updates' in your applications
-

- Figure:
'ZZ' your files rather than deleting them!
Note: Other systems are used that are less aggressive than our 'zz' rule.
- In .NET, the keyword obselete
is used to mark types and members of types that should no longer be used - these
then turn up as a compiler warning. - In HTML, the keyword deprecated
is used.
Both allow for some backward compatibility. If you want to pussy foot around then
do this, then later 'zz' the files.
-
Do you know the best way of managing recurring tasks?
Recurring tasks are tasks that happen on a regular basis, but not necessarily every day (and
therefore potentially easy to forget!)They might be personal tasks, such as changing the oil in
your prized Datsun 120Y every six months, or booking a holiday for you and your partner a month
before your anniversary. They could be work related tasks, such as updating your profile on the
Microsoft Gold Partner website (every three months), running financial reports on a monthly
basis, or even watering the office plants every week.
Now managing those tasks can be difficult. "Just stick an appointment in Outlook" - yes I've heard
and tried that method. Outlook is perfect when you are the one performing the task. But it's
nowhere near perfect if you're managing people who are allocated to perform the task. In fact it's
a disaster, because when that person leaves, (or just changes job role) that scheduled
task/reminder disappears with them.
The other problem with Outlook is if you are an organisation that relies upon
email as a
to do/task list, Outlook doesn't send an automated email.
After reviewing a few different options, we decided
using Google Calendar to manage recurring tasks was the best option.
-
Do you always fix it - or at least report it?
Are your Quality Assurance standards clearly understood? In the course of development
and testing, programmers will often encounter bugs or problems. How do you deal
with these? You can either:
- Pretend you didn't see the problem
- Fix it on the spot
- Report it
so someone else can fix it
The best solution is to use a combination or 2 and 3. If it's a small problem (less
than 15 mins) you should fix it on the spot. If it will take more time, you should
email the issue so someone else can fix it. While this can cause unforeseen delays,
it's better to get 2 things done at 100% than get 4 things done at 75%! This way
of approaching problems ensures that errors are not forgotten.
The question is whether you use the 'Tree Approach' to problems or the 'Straight
through to Goal approach'. In the Tree Approach, you branch away from your main
task and do 2. and 3. when you see a problem. In the Straight to the Goal Approach
you do 1. and only work on your primary task. At SSW we try to balance short term
productivity with long term improvements to our website products and processes;
We use the Tree approach - although as a minimum you should at least report issues
that arise.
-
Do you conduct an internal "test please" prior to releasing a version to a client?
Does the Test Please principle apply to more than code?
Yes! a test please, aka peer review highlights unseen errors, proposes new ideas for consideration or confirms the existing
work as the best solution. A peer review can also effect cultural change amongst your development team as developers become
more open to critiques of their work and comfortable with a 'continuous learning' environment. A "Test Please" should also be
applied to:
- Brief proposals
- Release plans
- Estimates
- Anything else being sent to the customer
Test, test, test! Testing is the most critical part of any project. Before the delivery of any release the application must
pass an internal "test please". Clients quickly become disillusioned if you have delivered a bug-riddled application.
There are a number of different types of tests that you can perform:
- Unit Testing - the smallest testable part of an application that validate the individual units of source code are working
properly. Unit tests does not cover the UI layer and there is no industry standard 3rd party tool to perform this task.
- White Box Testing
- Black Box Testing
- Integration Testing
- User Acceptance Testing (UAT)
Lead developer testing responsibilities
- At the end of a release prepare a "Test Please" email. (You can use eXtreme Emails to do this)
- Select two developers who are not coders on the project
- Specify exactly what is required to be tested. Be specific e.g. run Timesheet report
- Triage emails as they come in for completion in this release, or a later release
- Keep a schedule of testers changing them only on a release by release basis - never change testers within a release
- Delay the build until the testers have replied DONE. It is possible to proceed with a build even with a test fail
if the bugs existed in the previous version and they are being worked on
- Randomly have the manager do a "Test Please" as well. He gives a pass or fail on the job the testers did. If the
testers didn't do a good job, they stay on the schedule and test next time
- When you receive a "Test Please Succeeded" from both developers (and never before) prepare a "Test Please" for the client. (If you are
forced to issue a non-tested release to a client state "Has not passed internal testing" in the email)
Tester responsibilities

- Figure: Do you want users to have good first impressions?
- Confirm you are a tester - If the developer did not name you, make sure he corrects himself and resends the
'test please' email.
- Ensure you are working on a vanilla VPC running as non-administrator
- Use Team Viewer if you aren't available locally
- Test within the hour - testing is typically urgent
- Know what to test - The areas requiring testing should be specified in the email, test the whole application if not specified
- Be thorough - anything from a crash-to-code bug to a minor UI change should be reported (one email at a time)
- Classify issues accordingly to "this release" or "next release" following the report bug/enhancement
standard so the manager can triage requests correctly. Any crash to code bugs must be fixed in the current release. The project manager may
override your prioritisation.
- "Reply to all" for each bug or feature (to ensure no issue is reported twice)
- Specify how you replicated the bug through clear instructions and screenshots
- Use SSW eXtreme Emails to reply to the 'test please' email with "Test Please Succeeded (as no Critical bugs)" or "Test please
failed (as per critical bugs reported)"

- Figure: This is how to reply failed to a "test please" email
Note: View a sample Test Please Report that we use for all
development. This report gets automatically generated with our tool, SSW
eXtreme Emails!.
-
Do you know the 4 steps to do a "Test Please"?
The client agrees that prior to a version being submitted to the client, the SSW developers will:
- Perform automated testing with SSW Link Auditor (for Web Apps)
- Perform automated testing via Unit Tests
- Perform an internal "Test Please" (aka "Alpha Testing" eg. only that pages or forms load, not checking the business rules)
- Then send a "Test Please" to the client (aka "Acceptance Testing" to check the business rules)
Do you Reward your developers for completing a release on time and budget?
Conditions:
- Release has to be on time and on budget
- Scope ?no more than 10% cutout in items (this is measured in estimated hours vs release total estimate)
- Quality ?must pass test please, with no severity 1 or severity 2 issues
- Release debrief to the client to be completed
Authorisation:
- Account manager ?relevant account manager for the client project
Organisers:
- Individual can do this. Return receipt to New or Lei as appropriate
- Budget is $50 per person, this is not redeemable for cash. (Amount to be monitored and reviewed)
- Team member can use this for dinner/lunch/movie with partner as they desire
-
Do you have a Knowledge Base (KB)?
Do you know what the most useful thing on Microsoft web site is for me? It is their
knowledge base at
http://support.microsoft.com/support
When I have a problem it is my first port of call - it allows me to help myself.
So, if you answer questions on your products to customers, you are wasting time
if you don't have a knowledge base. Just think, you might not be answering Harry's
question if he could have looked it up himself.
Now of course there are many customers who don't look for a KB, but instead you fire
off the same old email that you already know is an MDAC related error, and your current
solution is to tell them to run SSW Diagnostics and get all the green ticks.
The basic rule is don't send back the answer in your email - instead send back the link.
More specifically:
|
|
Dear Harry,
Thank you for taking the time to report the issue for SSW Code Auditor. I'm happy
to let you know that this is a known issue and has been addressed in our knowledge
base. Please see http://www.ssw.com.au/ssw/KB/KB.asp?KBID=Q260000
for details.
Kind Regards,
|
|
|
-
Figure: Responding to a known issue with a KB article
|
- If you can answer a support email then reply to the support email
(using one of the 4 templates on the right)
- TO: the client
- CC: the developer and your manager with the KB link
- If you can’t answer the question then reply to the support email
- TO: the client and the developer
- CC: your manager
- Ask the customer if they can get diagnostics to all green ticks.
- Ask the developer to “Please action?"
Notice how by just giving them the URL, this email does the job of encouraging them
to use your knowledge base in the future. You need to make sure the support staff
know that there are really only 4 types of emails customers should be receiving
(see the 4 grey boxes). |
|
Dear Harry,
Thank you for taking the time to report the issue for SSW Code Auditor.
I am sorry to let you know that I cannot reproduce this.
Could you please provide me more details, or even better would I be able to connect
to your PC - it is simple and you can see everything I do. To do so, you can send
me an appointment for an appropriate time or add me your MSN Messenger, my address
is xxx@s*w.com.au
P.S. Don't forget to run SSW Diagnostics,
ensuring that you only get green ticks.
Kind Regards,
|
|