Question for the class: Managing Notes app development...
Category What do you think?
Bookmark :
Ryan Jackson recently asked in this blog entry ( ../d6plinks/ROLR-5ZCKSM ) about any tips, tricks, etc. for managing Notes/Domino app development. He asks this way:
"Without giving away any of your trade secrets, can you tell me how you manage the development of the Lotus Notes Applications you build? I am starting to manage larger projects than I ever have before and thus having a harder time managing them. Any help from the famous infamous Lotus Geek would be greatly appreciated!"
Well, for me I would say that the important thing is that the team overcommunicate - about design, about division of labor, etc. You also need to pick a "team lead" to make decisions when consensus can't be reached.
To get a bit more tactical, it is important that you make sure you don't "stomp" each other's design. Make sure everyone knows what the other is working on (that "communication" thing again), etc. If you are in ND6, you should definitely turn on design locking - this will save you heartache.
Ambiguity is the enemy of the developer. Make sure that if you don't know the answer to a design question, you ask the client (or whomever should make the decision). Making a "best guess" is almost always going to be the wrong thing to do.
Keep a database of old design elements. As you move forward in development, if someone deletes a design element it should go in this empty "design cache" database. That way it is never completely lost. Also, you should make periodic "snapshots" of the development effort (basically a design copy) in case somebody screws something up, you can roll back to the earlier snapshot.
These are a few things off of the top of my head. Now I submit the question to the rest of the class - what other "pearls of wisdom" can you bestow upon Ryan to help him manage his development efforts?
Rock









Blog Roll










Comments
If your team needs a variable name flag to know that in..
While Not (cur is nothing)
'do something with cur
call cur.Save(false, false)
set cur = x.getNextDocument(cur)
Wend
..."cur" is a NotesDocument and "x" is a collection, I'd reconsider hiring practices.
I don't mean to sound like I'm trying to shoot down good ideas -- I just think that SO much effort is placed on essentially superficial factors in business software development. Naming standards are important for stored data, but for in-memory variables for procedures that are rarely more than 2 pages long? What's the point?
If you're writing Windows, or Notes itself, or Linux, these things are important. If you're writing a long-term product on the Domino platform, they *might* be important. But for the vast majority of business development, what's important is a) successfully meeting business needs and continually adapting to them (since they always change), and b) ensuring reasonable scalability across the enterprise in anticipation of future deployment. I've seen hundreds of applications developed with all the standards you can shake a stick at that still performed poorly and failed to adapt to changing business conditions.
The methodologies that made sense when you were conducting 2 year COBOL projects don't make sense when you're working with a cross-platform RAD system.
Posted by Nathan T. Freeman At 11:42:52 PM On 06/16/2004 | - Website - |
I think Christopher meant the usual audit habits: they look for quantity of documentation and the structure. They don't read code and don't understand it. I was subject to audits while working in a bank. It was always fun, because they never raised the true issues (e.g. do the developers have manager access to critical production data) but were crazy about a rigid documentation structure. I was regularily asked for a ER-Schema of our Notes databases.
Posted by Stephan H. Wissel At 10:07:44 PM On 06/08/2004 | - Website - |
Obviously, if you're looking to build a global CRM system, or an interdepartmental CMS application, you can't prototype the ENTIRE thing. In that case, create a loose plan that splits general objectives into digestable chunks, then prototype those.
Here's the problem with over-developed specifications: though they might describe exactly what you want, they rarely, if ever, describe how to get there. And when a large team under a tight deadline works off a complex spec, they'll right bad code to achieve goals inside the deadline. However, the same team allowed to iteratively develop a system will tend to write more maintainable and better performing code, because they know they're going to have to live through more QA/Production lifecycle updates. You get more solid code from multiple prototyping cycles than you do from monolithic development basically because the system you put into production is effectively a version 3.1 instead of a 1.0.
The basic problem with this strategy is really SELLING it. That is, when you lay out a project as requiring a team of 10 people who will do 6 months of user surveys to develop raw materials, then write a project specification for 3 months, then code for 9 months, then QA for 4 months, then install for 1 month, that SOUNDS like a strategic investment.
If instead, you propose a team of 3 people develop a shell system in 2 months, go through a user review iteration, modify according to feedback for another 2 months, go through another user iteration, modify and release for limited functionality a version 1.0, the plan subsequent cycles all the way through version 3 a year later... well, that sounds like craziness! How are you supposed to plan a budget for that? How are you supposed to tell customers when they'll be able to get online? How are you supposed to schedule training?
Never mind that it's cheaper, gets you a solution faster, generates more reliable code and allows for improved user participation. It sounds like absolute chaos, and since middle managers tend to think like communist planners, it doesn't fit in with their vision of a "well run strategic platform."
Sorry for the rant. It's just another reminder why I need out of this industry. :) Anyway, seriously, you can get great results if you can convince higher-ups to let you work this way. It also tends to keep your people more motivated, since you can get positive feedback on development results much sooner.
Posted by Nathan T. Freeman At 04:44:07 PM On 06/04/2004 | - Website - |
It may seem trite, but I've found that it works very well.
-Devin
Posted by Devin Olson At 02:09:46 PM On 06/16/2004 | - Website - |
Once I receive such a sample project, I would start with creating Word-templates for each type of document, as well as a draft project-plan (also hanging the documents as deliverables to milestone in project). That would become then the source of discussion with other developers.
Once there is more or less an agreement on the different steps involved (I think the following), we can start about thinking which tools to use to automate some of this erraneous work:
- Requirements Analysis (Document 1)
- Solution (Document 2)
- Development (Document 3)
- Testing (Document 4)
Document 1 (Requirements) :
Goal
Use Cases
Document 2 (Technical solution) :
Description forms
Description databases
Description interaction between different design-elements
Document 3 (Technical Documentation Application) :
based on document 2, since the application should be the implementation of the technical solution
Document 4 (Testing) :
Test Scenarios
Test Results ( also end-user testing)
Document 5 (Deployment) :
End-user help (or integrated in application)
So if anyone have some real documentation of a large project you once have done as a Lotus Notes specialist, which is not too confidential, please send it to me.
I would then distilise the necessary elements into a general action plan (with sample deliverables) for application development in Lotus Notes. This will be published on OpenNTF where I already defined a project , so other developers can discuss it, and we can further finetune it.
Here is the project "An IBM Lotus Domino Standard Way of Working database"
{ Link }
Posted by Stefaan Somers At 07:47:41 AM On 11/15/2006 | - Website - |
Yes there needs to be a balance, but that balance requires some level of consistency. When using RAD, this becomes even more important. One of the key components of RAD is re-use of code assets. Without a consistent standard, this can be impaired.
You also said:
.."cur" is a NotesDocument and "x" is a collection, I'd reconsider hiring practices.
and of course I will have to disagree here as well. The idea is not that the code makes immediate sense to the the 'team' but not necessarily to someone inheriting the code.
If instilled as a best practice, there is no burden, undue or otherwise, on developers but gives them a common syntax to communicate so one person's cur is not a document and the other person's cur a currency string, especially when putting together modules coded by different people on a team.
And the bottom line: these are not ideas, but standards put out as part of ISO Standards, and are essential for an organization to meet the 'Definition' maturity level of the Software Capability Maturity Model (CMM).
Posted by Christopher Byrne At 12:26:55 AM On 06/17/2004 | - Website - |
I will take Matthias' post and take it a step further. Coding standards should be the same for for all projects in an organization, not set on a case by case basis.
There is an excellent article on coding standards in the View:
The Whys and Hows of Notes/Domino Development Standards
http://www.eview.com/eview/viewr5.nsf/21059a128be01bd98525653600120bea/c441fbabe59d2de285256a55007c9555?OpenDocument
From an internal control standpoint, you standardize because:
"To enhance the quality of programming activities and future maintanance capabilities, program coding standards should be applied. Pogram coding standards are essential to reading and understanding code, simply and clearly, without having to refer back to design specifications...The programming standards applied are an essential control, since they serve as a method of communicating among members of the program team and users during system development. Program coding standards minimize system development setbacks resulting from personnel turnover..."
Source: Information Systems Audit and Control Association
You said:
I have seen this in code, I never understood why. If you want the type in the variable name why not use the postfix characters $ for string and % for integer, # is double etc.
That is all well and good if you are limiting to these items, but what about Documentcollections, views, viewentrycollections, doc, etc.
For this reason, I usuall follow the following syntax:
string str
variant var
double dbl
integer i
NotesDatabase db
NotesView view
NotesDocumentCollection col
NotesViewEntryCollection vCol
DotesDocument doc
NotesItem item
NotesRichTextItem rtItem
etc etc.
There are many ways to skin this cat, but the bottom line is that the cat should be skinned and done so consistently across an enterprise.
Posted by Christopher Byrne At 05:01:53 PM On 06/16/2004 | - Website - |
Maybe due to habit I use prefixes. Anyway, if I have to modify an application, it is very helpful for me if the programmer used standards (prefixes, option declare etc.).
Unfortunately, the templates provided with Notes/Domino do contain code where prefixes etc. have not been used. Only in some routines you can find str-prefixes etc.
Whenever I need to reuse a function or sub which someone else has coded without using standards, I use search&replace and set the appropriate prefixes.
In my opinion, it is a must have using prefixes, such as
str for String
i for Integer
doc for backend-doc (or docThis, docMail etc., if you process some other docs in the code)
item for Item
col for Notes Document Collection (or: ndc, collection)
view for view
uidoc for Frontend-Doc
etc.
Btw., constans should always be in capital letters.
Rocky also does not use standard prefixes in his book. Anyway, I think you should use 'em.
Just my opinion
Matthias
Posted by At 04:22:32 PM On 06/19/2004 | - Website - |
However, I have to apologize because I suppose I asked the wrong question or at least was not clear enough. As far as managing the development of the code and design, I've got that part handled fine. The part that has become a little overwhelming for me is the project management side of things. Meeting with users and turning their business problems into good solutions. So I guess what my real question should be is... What goes into to a good design specification and what is the best way to organize it? Are there an applications out there designed specifically for organizing desing specs for Lotus Notes Applications?
Thanks again,
Ryan
Posted by Ryan Jackson At 10:06:04 AM On 06/04/2004 | - Website - |
Posted by Nathan T. Freeman At 01:35:15 PM On 06/10/2004 | - Website - |
It can also be extremely helpful to structure your NSFs into logical groups. For instance, you might have a production application which is set to inherit design from "TEST VERSION." Then your test version is set to inherit from "DEV VERSION". If your working on a server where the Design task doesn't run automatically (or you've got your versions on unique servers,) you can control when these updates take place by running the refresh manually.
Posted by Nathan T. Freeman At 12:22:19 PM On 06/03/2004 | - Website - |
Posted by Debbie At 02:49:00 PM On 06/02/2004 | - Website - |
If you find you have an old design element (Page, view, form, agent, etc etc) that you want to keep but are not using and you are getting sick and tired of it sitting in the middle of all your design elements, rename it with a small "x" in front of the name and the alias, that way it will always show up at the bottom and be out of the way.
Posted by Christopher Byrne At 11:47:16 AM On 06/17/2004 | - Website - |
Posted by Christopher Byrne At 05:57:27 PM On 06/04/2004 | - Website - |
I'm confused by this statement. What do you mean?
Posted by Nathan T. Freeman At 01:51:22 PM On 06/06/2004 | - Website - |
Prototyping is an excellent tool to accelerate development as long as the risks associated with it are recognized and accounted for. And honestly, how many of us are really disciplined enough to go back in after the fact and document?
I would go into more here, but it would take up too much time and space. Look for the White Paper I am working on for a July release.
Posted by Christopher Byrne At 04:59:21 PM On 06/15/2004 | - Website - |
Rock
Posted by Rock At 08:23:55 AM On 06/03/2004 | - Website - |
I've been told that my predecessor has been making design changes directly in the production environment.
Is there any way to properly resynch the databases and templates without loosing any design changes?
Posted by Gregg Watkins At 09:15:52 AM On 06/04/2004 | - Website - |
2. Make sure there is ONE AND ONLY ONE Project Sponsor/Application Owner. Otherwise you will be floundering in conflicting requirements.
3. Identify, classify and prioritize the vulnerabilities and threats to develop an overall inherent and control risk assessment for the project. Use this assessment to build in application controls up front as it becomes more expensive to introduce controls after the fact. This should be done at the requirements definition phase.
4. Make sure a change management process and quality assurance process is in place. This will reduce scope creep.
5. As Rocky said: Communicate, Communicate and communicate. AND in case you forgot, Communicate again. AND do it in writing!
6. DOCUMENT EVERYTHING IN YOUR CODE!
7. Reuse standard code and assets. Take Karen's words above to heart. This falls under the need to segregate responsibilities to maintain effective internal controls.
and so on and so on...
Posted by Christopher Byrne At 02:05:11 PM On 06/04/2004 | - Website - |
b) define standard prefixes for variables (e.g. strStuff for String, iStuff for Integer etc.) when starting a new project.
I have seen this in code, I never understood why. If you want the type in the variable name why not use the postfix characters $ for string and % for integer, # is double etc. this way the interpreter understands what you are talking about too and won't make them variants hence has a chance to give you an error on saving rather than a runtime error. Personally I tend to declare stuff explicitly and call a spade a spade, if a variable contains the cost of production of an item then I will call it CostOfProduction.
Posted by Alan Bell At 08:44:00 AM On 06/16/2004 | - Website - |
As more and more corporations hire auditing companies the days of gathering requirements on a napkin, bantering design ideas around the break room, and commenting code as you go just aren't cutting it anymore. We are now being held to a standard that requires every turn of the SDLC to be documented like a mainframe application. This is a practice abhorred by most of us RAD minded Notes jockeys, but something we are having to learn to live with.
I've been able to semi-effectively use the "generic" auditor friendly documents for requirements and testing. The requirements document format favored by auditors seems like Greek to most customers, but generally proves useful to design teams. The test documents are just painful to enumerate, but again generally somewhat useful in the end.
What has bothered me however is Iâve never found an auditor friendly design document template that works for Notes. Using an academic design template effectively removes all of the ingenious "lotus notes" concepts from your plan and leaves you with a bunch of over-normalized crap. What you get is something that serves to befuddle your Notes developers more than it servers to enlighten them. The cost is days of project resources on a tight deadline to write a bunch of useless @#% to pacify your SAS 70 auditor and pointy haired boss.
Has anyone come up with a design methodology to document Notes projects in a way that is useful to both developers and auditors???
Posted by Brian Vincent At 02:48:44 PM On 09/29/2006 | - Website - |
With bigger projects, it is usually a good thing to have a "common design"-database, with elements that are used throughout the server. That way, I only need to update the element i one place, and update the design of the databases. But that should be the first thing a Notes/Domino developer learns
Posted by Johan Känngård At 06:17:45 AM On 06/03/2004 | - Website - |
I think the best way to handle this is to figure out the best solution, and then run it by the client. It's never a good idea to give a client open ended questions. My technique is usually, "I wasn't clear about this, but I propose we do XYZ. Does that sound good?"
Posted by Trent At 07:50:57 AM On 06/03/2004 | - Website - |
Anyway - what IMHO is important in developing a N/D app: divide the development expediently.
Let e.g. modify programmer A scriptlib A, programmer B scriptlib B+C, programmer C all the forms etc.
Surely we have to backup everything. Who cares? In DVD era disc space costs are negligible (although we would never reach the DVD-disc space limits with simple N/D - development).
My suggestions for a app dev. project:
a) specification is required. Without a detail specification you should not start to develop.
b) define standard prefixes for variables (e.g. strStuff for String, iStuff for Integer etc.) when starting a new project.
c) Option Declare must be used
d) use/create ScriptLibs and classes whenever it makes sence (reusable code etc.)
e) comment the code (!)
f) communicate: have daily meetings with the developing-team. Exchange all necessary informations.
h) backup everything every time
i) Make sure your development team has the skill to develop applications
j) show the customer the results regularly. This prevents realizing things the customer does not want to have.
Just my humble experiences so far..
Posted by Matthias TMC At 05:13:11 PM On 06/12/2004 | - Website - |
Posted by Dennis Lowe At 03:33:16 PM On 06/02/2004 | - Website - |
One nice thing CIAO does is force you to consider your development environment. Not only have I built development servers that will be used for testing, but I've built template servers that hold all the template versions. This makes versioning, securing and managing templates a lot easier. My developers can pick up builds/versions of templates from one place and my production servers inherit from the template server when I make the new versions available to them. Since it's a dedicated server I can strictly control the server access and prevent "rogue" developers from updating code that's already been versioned (you think it would never happen to you, but it does). All of this ensures that everyone is working with the same code base.
Another thing CIAO does is force you to consider different peoples roles in the development, versioning and template management process. I find that I end up with team leaders (build managers) and team doers (developers). This organization really helps with internal communication.
Posted by Karen Hobert At 01:06:47 PM On 06/03/2004 | - Website - |