Training the Young and Fluency July 28, 2010
Posted by ActiveEngine Sensei in ActiveEngine, Business Processes, Coaching, Fluent, Mythology, Personal Development.Tags: ActiveEngine, communication, focus, Coaching, Wolf Creedo
add a comment

Repeat with Sensei, if you will, the Wolf Creedo:
The Wolf Credo:
Respect the elders
Teach the young
Cooperate with the pack
Play when you can
Hunt when you must
Rest in between
Share you affections
Voice your feelings
Leave your mark.*
What have you done to nurture your team? Are you the resident Elvis, and if the newbies make the cut they’ll graduate from a Mort to be the next King, hand plucked by you from millions and millions of people? Can I get a little ka-ra-te with that?
What makes you an Elvis, and are you a bloated drunk Elvis at the end, or the bad-ass version 1970 version who can jump start anything? Elvis in 1970 practiced the Wolf Creedo. Watch the documentory Elvis the Way It Is 2001, just the first half hour. This short half hour will show you Elvis, after years of being away from touring, ready to return to touring again in attempts to re-start his career. The first half hour of the movie focuses on the few weeks of rehearsals before the debut concert. Elvis had a fluent, incredible means of communicating with his band members and back up singers. With a glance, a gesture, a wink, a new song would spring up. Maybe Elvis would say a quick word, hum a note, and suddenly a bass line would kick in, and not more than three beats later, the entire band and Elvis are playing a tune complete with improves. While playing Little Sister, Elvis nods, and issues “Get Back” and off the group goes playing Get back from the Beatles. Congruent would be best word to describe the synchronization that each member had.
Elvis nurtured that vibe. They all keyed off of him, for to the band he was Elvis, not the King. He lead by being a focal point, but not necessarily an ostentatious leader. When you watch the practice sessions where Elvis worked on the orchestrations of each song it is clear that he could communicate what he wanted, and worked with his band members to produce the product he envisioned.
But in order to function like this unit, each member has to practice. You, as pack leader, have to pick the scales, the arpeggios, the rudiments that you want to be second nature so that your team, the young ones and old warriors can produce what you want, fluently.
*Credit: Del Getz and Associates
April Fools On You Sensei From StackOverflow April 1, 2010
Posted by ActiveEngine Sensei in Uncategorized.add a comment
Jeff Atwood transformed me from an ugly duckling to a beautiful swan:
==>
Why couldn’t he have made me better looking and cooler like this dude:
Fail Often, Fail Fluently March 27, 2010
Posted by ActiveEngine Sensei in ActiveEngine, Agile, Fluent, Mythology, Problem Solving, software economics.add a comment
What do you when your Scenario or User story just sucks? You’ve haggled with your peers over how to implement, the user has changed tunes and come over to your side of things by realizing that they want two things at the same time, but now that you’ve listened to everybody and re-worked your logic, you’ve just spend 6 or 7 extra hours testing. Now, you doubt that anybody really knows what the original intent of your use case was because there are so many different variants and vagaries from all the meetings, emails, hallway tests.
Now succumb to the brain death of Sarbanes-Oxley. Where is the traceability in all the discussion threads? How do you prove that you have what you want and that transactions are preserved and yada-yada-yada it just works? Before the project you thought that your team was like these guys:
But in reality you are this crew:

Sensei won’t pretend that there is a cool Zen technique to avoid hard work or failure. Maybe this type of failure of communication is a test of your core skills and your “fluency”. Look at the Elvis’ team. They’re practicing. They’ve been over the material again and again and again. That’s three again’s for each of the yada’s. To get to that point where they can adjust to his direction they’ve done much on their own time acquiring skills. Years of practice and adjustment.

Your project is like that path to acquiring a skill set, gaining mastery, being fluent. You have to build for flexibility, for
change. You CAN NOT give in to YAGNI just because this week you think you know all the answers. You won’t create a fan base that way. And just because something is written down does not mean that it’s set in stone. Remember Moses and the stone tablets? Even though he could part the waters he still had to go up the hill twice. Things will go wrong, but if you put in the time your adjustments, while painful after a long haul, won’t be that bad. 6 hours could have been 6 days. Be thankful you have good partners.
ClearSpring Dumps Widgets for Ad Revenue March 5, 2010
Posted by ActiveEngine Sensei in ActiveEngine.2 comments
If you’ve frequented this blog you’ll have noted that Sensei likes to pick a theme song to add to the bombast of his message. The cool little boxes that you can click and play a tune are widgets made by ClearSpring, and GrooveShark – the free music service – and you used to be able to include them in your posts directly with WordPress.
Well nothing lasts forever and ClearSpring is dumping their widget platform entirely in order to focus on Ad Revenue. ”Deprecate” is the polite term. Oh, and its replacement will only be visible in WordPress’s side bar.
This will not turn into a rant, as other developers are screaming about this. Rather, Sensei thinks he’ll have a neat work around that he’ll tell you about real soon. It promises to be cool, easy to use with WordPress, and employ some really good technology that Sensei has talked about in previous posts. Yep. It will be forged in the ActiveEngine and hopefully be of use to WordPress.com bloggers.
With a bit of nostalgia, here’s a widget. Play it and rock.
Getting to 11 February 13, 2010
Posted by ActiveEngine Sensei in ActiveEngine, Fluent, New Techniques, Problem Solving, software economics.Tags: new thinking, ActiveEngine, Problem Solving, concentration, focus, humility, Bushido, survival
add a comment
In the past Sensei has written insane tomes regarding time travel and how your best intentions really
get you no where. The story today is about getting to 11, which as Nigel says is one more than ten, putting you over the top. Consider for a moment the times that you really think you’re like this guy to the right. Yep, you think you have a Martin Fowler sized audience when you are coding. The scientists of the future will study my code and say “Here, this is the start of the great insight. How interesting.” In reality
you are like Spinal Tap, unaware of how absurd you can be. Code too complex, but it goes to 11! Most blokes keep it at 10, but then you need to put it over the top take it up a notch. That extra notch. That’s 11.
Here’s a thought – what about 6? Is it viable? Can you be flexible by doing a 6, just good enough to not paint yourself into a corner? ”Perfection is a process, viable is an end state.” As a developer you may not be able to judge what 6 is. If you’re in tune with your fan base you’ll know but that can only come from wisdom born out of great mistakes. For those of you who study Budo you may recall the concept of short and long and how relative scale can shift your advantage. Your opponent may have a sword and you only a dagger. Short and long makes a big difference, but you can alter that equation with small maneuver. Once you’re inside and beyond the sword’s curring range you have the advantage, as your dagger is now long enough to finish the skirmish. Change the scale.
Years back Sensei was given the task of reducing shelf space utilized by paper by 25%. The CFO arrived at this goal via scientific method. It was scientific since at Sensei’s company if you don’t do what the CFO said it is axiomatic that you were in deep doo-doo. Laws of hierarchy and all. Now imagine rooms filled with documents related to contractors, account-receiveables, human resources, legal contracts, project management etc. Yah, DISPARATE is the word. Not meta data, just a meta-mess.
Now in the best of all worlds where you need to get to 11, you would have time to survey all document types and refine each attribute set before you design your system for document categorization. This foundation becomes your data model in a database and many would claim that you should a create data table per document type to house the varying number of attributes. But you have 2 million sheets of paper to scan and in 12 months re-construction at your offices begin so you need to be able to walk into a room and quickly categorize all documents, throw them into boxes, scan them, and automatically assign the meta data to the document and store the thing. Oh, and if you miss a document type or need more attributes you don’t want to go back to your database, add or modify a table, re-gen your data access layer, add the attribute to your screen all before your adjust your categorization. And remember, you need to ship out 80 to 100 boxes every 2 weeks so you need to keep the data entry flowing. Finally, you are told that some projects can have up to 50 different types of documents, but no one is sure to what degree the project documentation is complete so the number of document types per project is not known and NOBODY HAS THE TIME TO GO THROUGH THE SHELVES AND CREATE DOCUMENT TYPES BEFORE ANY DATA ENTRY IS POSSIBLE!
Play the song, ’cause it adds to the excitement!!
Several key decisions solved this mess, and the solution was simple enough that temps could walk into a room categorize and pack documents into boxes for scanning. The error rate ranged between 1 – 5% per department. These were not solutions cranked up to 11, they were 6′s:
- No change to database schema or screens will be made, ever. A document was modeled with four tables with a base Document table, Document- Type table, Document-Attribute table that contained all attributes per Document-Type and finally a Document-Attribute-Value table where the meta data was stored. This way each Document-Type could be be created with simple data entry. One data entry screen that could create data controls on the fly per attribute type developed.
- Each document shall have a bar-coded coversheet. Nothing gets scanned without meta data. EVV-ARR.
- Import data from existing systems. The meta data for your documents resides in many of your accounting, job cost, and budget systems. Once document types are known, dumping data from accounts receivable and / or accounts payable allows your to assemble thousands of cover-sheets for all invoices. Quite literally you create a stack of paper for all possible types of invoices for all accounts, walk into a room, pull documents of the shelf, attach coversheets, and keep the sheets you didn’t use. Now, since the unused sheets have a bar-code, run these through you bar-code reader and create delete records for what you didn’t use. Now you have a complete accurate manifest of what was on the shelf and what was packed away. When the scanned images come back you can inspect them against the manifest.
- People can work better with paper. As stated in the last bullet point, creating all possible types of document coversheets per account or project and printing them allows you to quickly categorize all documents. With minimal or no data entry and a stack of coversheets, anyone now can go through shelves and associate the coversheets with the appropriate documents. In other words, the subject matter experts have a tangible, traceable system that they can hand off and supervise someone who can do the grunt work. Not sure where you finished with your categorization? Just look at your stack of coversheets. Want to inspect accuracy, grab a document and compare it to the categories printed on the coversheet.
What? Process management with paper ? That sucks! No it really doesn’t. You see, a 6 to you really is an eleventy-one for your user community who is really busy. Yep, you have to be smart with your database design by focusing on one key area and that’s it. The rest of the effort is imports with SSIS packages, CSV files, and printed coversheets. But it’s easy for the users to use paper, and that keeps a flow going. 2 million sheets of paper scanned in a year. Maybe a 6 isn’t all that bad after all.
Chang-chang-a-ching-changa-langa-langa: Why Your User Community is Fluent in English and You Are Not the King February 6, 2010
Posted by ActiveEngine Sensei in .Net, ActiveEngine, Business Processes, Coaching, Fluent, Problem Solving, software economics.Tags: new thinking, balance, ActiveEngine, communication, Problem Solving, bad software, ActiveEngine Sensei
1 comment so far
Get ready for the sound of one hand clapping, but first, fire off the song as it get’s your head straight.
Some of you want to be Elvis too much. Sensei’s going to tell you a story so you know what he’s talking about. You see, users of your apps are waaaay smarter than you, and spend more time in their fields than you ever hope to do. You need a little love. It’s called fluent interaction. Fluent. Interaction. Lord have mercy.
Process mapping helps, but in the end that takes you to overly scientific abstractions, and while user stories help some they, too, stray with you as the sole author. You in the chair, just the important details from the user, but mostly you. Should you consider yourself not Mort but an Elvis, you may want to ask yourself what Elvis you want to be:
Kick-ass Karate Elvis![]() |
Drug Ridden Elvis Wanna Be![]() |
Back to the story. Last episode, in a spate of productivity and a dose of SQL-NoSQL fever, Sensei created a slim document management solution that can be quickly applied to an existing framework with minimal impact to database schema and code base. Sitting around the conference room table the comment arose from Annie, the project lead from the Sales group:
“Why do I have to save a commission record first before I can attach a document? That interrupts my flow. I want to put in everything that I want and save, period. No dialog box thingy prompting to save first, come back and do something else. Why can’t we just do it”
Long silence. The sound of one hand clapping.
One of Sensei’s report-to’s jumped in: ”Because in order to associate the document to the commission you have to save that commission first in the database, then take the id from the record and associate it document. This allows you to retrieve it later on.”
Annie: So. Can’t that just happen behind the scenes? If it’s two steps the sales gal won’t do it. She’s got calls to make.
Ssensei drifted out in research land, or as normal people call it, he spaced out for a bit. NetFlix sprang to mind, iPhone too, where you delete, it does it, but you can bring it back. Take the confirmation response out of the equation. Give the user a chance to undo their mess, but don’t get in their way. It’s fun to pretend to be the King, but what a wake up slap. The technology was right, but the user was seeing the benefit because “putting the stuff in was too clunky”. Sensei went and did want Annie wanted. Annie thinks its great. Good technology made better by the user, not the King.
Fluent. Interaction. Lord have mercy. You see, Annie’s right and user stories, UML and other brain death would never capture the essense of her perspective, particularly after she used the software. Yeah, soft deletes are great theory, but you are not thinking like a user. In order to be a better King, you gotta give the concert they want to hear. You have to know that the fans have created you, have shaped your persona. You have to know your fans, almost be them.
Elvis had a come back concert in 1968 but it almost didn’t happen as there was a huge fight with NBC. The network insisted that the show would be like a Bing Crosby special given that the air date was during the Christmas holiday season. Elvis wanted an intimate environment where he could perform up close, live with his fans. He thrived off of close contact with his fans. Know your audience. Elvis was right, and it helped re-launch his singing career and revive his legend. It was one of his best performances. For the fans.
You need to listen to your users. Spend the time to hone your craft,
but work even harder to make them fans. What do they need? Is the concert for them or for you? Are you learning just to be smart or for their benefit? Fluent solutions require interaction with the fans. Thank you. Thank you very much.
More Inspiration January 30, 2010
Posted by ActiveEngine Sensei in ActiveEngine, Personal Development, Problem Solving.add a comment
New inspirational video is up on the Hope section. Enjoy.
Fluent Thinking – C# Plus SQL Equals CouchDB. Maybe. January 23, 2010
Posted by ActiveEngine Sensei in .Net, ActiveEngine, C#, New Techniques, Open Source, Problem Solving.Tags: new thinking, ActiveEngine, C#, new software, CouchDB, Document Management, Data Model, SQL Server
3 comments
I’ve gone too far to turn around
It’s hard to reach for you
When I’m lying face down
I can’t relieve my soul
I’m lost in a moment
Lying face downSaving Abel
There are moments when life brings too much possiblilty to your attention and your mind catapults into overload. Take the great potential that CouchDB has, as an example. Elegant, simple. Damien Katz has ignited a real fire storm with his work and may have single handedly given rise to the not-a-RDBMS movement. Sometimes developing under the gun, Sensei has to admit that the 3rd normal form restrictions can be a little inhibiting. Really, a collection of value pairs will do quite nicely, and XML, when it doesn’t run on for more that 1 page can be quite descriptive, it still is not quite the solution for quick configuration solutions. JSON is just about right, easy to manipulate, and this is why Damien chose this as the structure for a document in CouchDB.
“But Sensei, I have SQL Server. We aren’t allowed to say the L-word!”
“You mean Linux, right? Just checking.”
There may be constraints imposed by the environment you have at your disposal.
And if you have a current system in production you might have a hard justifying to the powers that be that you should download a LAMP server from JumpBox just so you can introduce doucment managment into your current production system. Or perhaps you have an extensive data model and are concerned that that the meta data would too complex to store with the documents.
Here’s a simple yet effective way to introduce a “CouchDB lite” version to a current database platform that is applicable to SQL Server, Oracle, MySql and provides a flexible way to store meta data for quick retrieval. It’s not badass like Sam Jackson, but it’s not ridiculous like the beast picture next to him either.
The goal stated succinctly:
- Provide the abilty to associate a document to a record in an existing DBMS
- Provide the abilty to store the meta data related to a specific record or a document type.
- Ensure that future meta data and document types will not a change in the cardinality of the database schema nor require the addition of additional database attributes.
- Provide a object oriented framework that adheres to the Open-Closed principal; that is, open to extension but closed to modification.
Previously Sensei has opined regarding fluency, and this solution adheres to those prinicipals. For existing RDBMS a single table can introduce the simplicity and clarity you seek. All document meta data can be stored in a table aptly named Document:
CREATE TABLE [dbo].[Document]( [DocumentId] [int] IDENTITY(1,1) NOT NULL, [UserId] [int] NOT NULL, [Name] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [PostedDate] [datetime] NOT NULL, [DocumentHash] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [Attributes] [varchar](8000) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, CONSTRAINT [PK_Document] PRIMARY KEY CLUSTERED ( [DocumentId] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO USE [REIMS_DEV] GO ALTER TABLE [dbo].[Document] WITH CHECK ADD CONSTRAINT [FK_Document_User] FOREIGN KEY([UserId]) REFERENCES [dbo].[User] ([UserId])
In brief, this table stores an identity key for each document, the name of the document, a foreign key that represents the user / person who saved the document, and the date when the document was posted. The attribute DocumentHash is a hashkey comprised of the DocumentId, the UserId, the Name of the document, and the PostedDate. The DocumentHash value is prepended to the document name to create a unique document. Consider it a way to associate the document with a specific record in the database. In other words, you should be able to re-create a haskey from the data attributes that matches the value pre-pended to the file name of the document. Another nice by-product is that you can version documents quite easily.
Focus next on the column named Attributes, as this is where the magic happens. The meta data for each document is stored here as JSON. This takes the following form:
[{"Key":"Owners","Value":"79,2,4,79"},
{"Key":"BonusId","Value":"95"}
{"Key":"BonusTypeId","Value":"3"},
{"Key":"DealId","Value":"1035"}]
This JSON serilization of an array of Key/Value pairs is a format that allows you store whatever meta data you wish. Notice the first line named “Owners”. This allows you to store the user id’s of all users who have the ability to delete or edit the document. You can set security based on this attribute, and implement a document centric security framework that can exist in addition to security place on the share where the document is stored.
As stated earlier, any type of data can be stored in the Attributes column. If you notice line 2 that reads “BonusId” you see that keys to other tables in your database schema that can saved with the document record. This feature allows you to maintain the relationship of a document back to a particular record or set or records.
You may be asking yourself why the Key Value nomenclature in the JSON string. The attributes can be deserialized to an object of type List<KVPair> where KVPair has the following structure:
namespace BusObj
{
[Serializable]
public class KVPair<TKey, TValue>
{
public TKey Key { get; set; }
public TValue Value { get; set; }
public KVPair(TKey k, TValue v)
{
Key = k;
Value = v;
}
public KVPair() { }
}
}
The Key Value pair lends itself to simple querying. Since the attributes can vary from document to document, the meta data can include identity keys to records in your existing database schema, information regarding folder structure where the documents can be stored, and what ever other piece of important information of you need to retain. Once the JSON is deserialized to List<KVPair> you can use lambdas to query your documents. Consider the following code that is used to determine document ownership where the owners are represented as
{"Key":"Owners","Value":"79,2,4,79"}:
public bool IsDocumentOwner(int userId)
{
Enforce.ArgumentGreaterThanZero<int>(userId,
"Document.IsDocumentOwner - parameter userId can not be null");
// No attributes?
if(this.DocumentAttributes.Count == 0)
{
return false;
}
return DocumentAttributes.Find(x => x.Key == "Owners")
.Value.Split(',')
.Select(s => int.Parse(s)).ToList()
.Contains(userId);
}
As you can see, multiple users can be designated as an owner of a document. Any operation that is to be performed on a document can be quickly validated against the owner list, so actions such as deleting or displaying document can be quickly validated. Since the attributes are stored as JSON, you can easily augment existing documents.
The possiblities here are quite exciting. Perhaps you are looking for a quick an easy way to store configuration of objects but XML would prove to be too complicated to maintain. You could create an entry in the Document table with the attributes you wished to store and retrieve quite easily. Or, you can easily create a categorization system for documents that sit out on shares and you need to correlate these documents to records in a accounting package. There are numerous things you could do to make your life easier.
Full source code will be posted soon where an in depth discussion of the implementation will continue.
The Economics of Authority – Windows Workflow and Why You Should Cash In Before Rolling the Dice January 18, 2010
Posted by ActiveEngine Sensei in ActiveEngine.Tags: new thinking, ActiveEngine, C#, Windows Workflow, Stateless
2 comments
Although many measure their success by their salaries, bonuses and bank accounts, this report card can be a limiting factor when starting a new endeavor. If you follow this train of thought too closely your creative muscles will atrophy and very likely you will be unable to capitalize on opportunities as they arise. Or worse yet, you will be unable to recognize the need for you to break out of mold.

Sometimes you can obtain a payment of a different kind from struggling with a new idea: authority, recognition, reputation, knowledge, and maybe skill. For those of you who are feeling limited by your development environments , flexing your creative muscles can be an even greater challenge. There is also a danger for a great many of those who are too comfortable, as they are so accustomed to their current development frameworks they don’t know that they are “out of shape”.
It is too easy to become a subject matter expert, drink the cool aid and parrot every podcast that you hear that technology X is the leading edge solution. Going to the next client offers a new opportunity to build a solution based on the gibberish that was misconstrued as leading edge. If it’s new enough then there is a chance that few others will be able to actually challenge the new silver bullet’s validity as a viable solution. In software we do this all the time. It is a form of lying. While in the short term it may appear that you are enhancing your authority by bringing new solutions to a client, in reality you are diminishing your authority.
Getting out the big guns for a fight, Sensei is taking a stand as he recently repudiated the recommendation to use Windows Workflow Foundation.
The Quest for Fluency – An Introduction December 29, 2009
Posted by ActiveEngine Sensei in ActiveEngine.3 comments
In a different post I’ve discussed how chess master Josh Waitzkin mastered the field of chess and a martial art, winning world championships in both fields numerous times. In true Budo fashion, by learning to focus Josh was able to achieve an elevated ability to evaluate multiple
contingencies and make innumerable judgments rapidly. In his quest, Josh discussed how certain mental patterns enabled him to make logical connections and solve thorny problems as if by reflex. So deeply ingrained were these mental heuristics that the imagery that they projected onto his thoughts actions “seep” into his martial arts training. Josh possessed the capabilities of rapid recall, projection and judgement. All in an instant. A turbo ActiveEngine.
The meme of “10 years to master a subject” is passing again in the software development circles. Mary Popendieck gave an excellent presentation that discusses the deliberate practice of performance and how you must make measures in order to improve. 10 years alone is not enough as you need to make objective judgments to gauge the effectiveness of your efforts. What is at issue is whether you can achieve this during your work day.
Not all organizations are concerned with developing your fluency; rather, they want efficiency but may not be able to judge when GTD leads to too much context switching and re-work. Your job as a practitioner of ActiveEngine-do is to prepare yourself and solve the short term problems of business with your steady practice, enduring devotion to mastery. It’s tough to do. Customers see screens, they don’t get it that the ice berg goes on forever beneath the surface of the ocean. Management’s objective is to get along with the current regime and hope that resources and budgets won’t be further reduced by silly decisions such as “Hey, database administrator over there! We never have any issues, what are you really doing? You’re fired”. Or worse, “let’s outsource our core development to a foreign country that is 8 hours ahead of us. Oh, you’ll be tired from talking on the phone at night, but that’s ok, as you’ll won’t be doing the real work. Gotta go – next meeting to attend!”
Creating a working model of your software solution becomes the most important item on your agenda. Without one you will be enslaved by capricious, vacuous wishes of the business units. You need to create an environment where the business team can join you, the developer, in a shared heuristic. That is, you need to be able to summon their creativity and guide it every time you meet. Two minutes of warm up, then go. Discipline them, and you will be better able to concentrate.
“Scenarios”, “persona’s”, “Spec’s” and other dev-speak nomenclature are now forbidden. Replace those words with “story”, “description” and “model”. Be prepared to demo alot, so HTML, JSON and Javascript are your friends. it is assumed you know your way around the server and database, but set these strengths aside as they are not needed yet. Be prepared to spend time on the aesthetics up front, as you need to fluency of communication, and colors will hang people up. It is unfortunate, but that is a law. In the martial arts, certain small details are focused on as their mastery opens up your performance. Presentation of the working model is one of those details. Get it right and you’ll find yourself riding a huge wave of good synergy with very little surprises in store for all parties.
You also need to eliminate, if you can, customer / developer impedance mis-match when translating the working model to functioning code. The simpler the code is, the less you have to summon up into your skull and retain in order to work. Think of it as working with an unfettered mind. It would be nice if your model of the problem domain could just become working code, instead of you switching gears and creating a map of business requirements to packages. Over the course of the next few months Sensei will introduce some tools to help you along the way.





Subscribe to this Blog!