Friday, August 12, 2011

The business architect role

Being a CEO is the same as being a business architect in my opinion.  I had coffee with a guy yesterday and he and I were talking about the role of architect in a consulting engagement.  I realized that the consultant architect really isn't the business architect.  What are the roles and responsibilities of the business architect?  The Business architect is responsible for the:

Contracts and legal engagement.  The business architect must care about the contracts and legal agreements.  He must be sure that he's partnering with and delivering the right things to the customer without painting himself into too much of corner with the nature of the contract.  This includes the retention of intellectual property gained and an ability to re-use concepts or the actual product being delivered.

Cash-flow.  Cash is king and the CEO has to be all about it.  Don't bother doing things for free; you're better than that.  Figure out how to finance the operation and who will get paid, when.

Product.  The product itself is where the IT/enterprise architect comes in to help define the right thing/solution for the customer(s).  This is a very critical role and the CEO should be keen on the product's success rather than just that of the project/delivery/cash flow.  If the CEO focuses on long-term value of the product and continuously improves that which is delivered (while getting paid), he will be in a good position.

Partners/Suppliers.  The people with whom the CEO needs to engage in order to be successful are many: advisors, engineers, workers, etc.  It's not easy to own and operate a business...you're eyes have to be on many things and the people with whom you're working are the key and core asset!

Opportunity cost.  To do the project or take the risk/opportunity is the primary goal.  You don't want the risk to be an 'all-in' proposition where you are 100% invested in the thing...but that may be the case.  If it is, make sure you balance your work and life and do things fun.  Don't have a heart attack, for God's sake.

I hope this list gives you a good idea of what's required to run a solutions/software business.  A lot!!

Enterprise workflows and custom applications help us tackle the world's toughest challenges

EfficiTrends has two parts: enterprise workflows and custom apps.  The reason we separate these two things is severalfold: solutions for enterprises have their own specific challenges and require a specific skill-set.  Likewise, creating consumer-ready solution also take a separate skill-set and in particular requires more marketing folks and fewer "business analysts".

We have over 15 years of experience creating custom solutions for enterprises.  Yesterday, the platform of choice for the enterprise was the web; and it still is, but that's changing.  Let me explain.

The disruption of the mobile internet is huge.  SmartPhones literally change everything.  People now expect to get robust services--whatever they may be--on their mobile devices.  Many companies are creating strategies and have offerings to expose corporate data on the phone.  Extended Results (www.extendedresults.com) is an example.

The major difference between the web of yesterday and the mobile web of today is where the users are.  Users used to be--and still are--in browers, but there are new devices now, as we all know; primarily iPhone and Android devices...phones and tablets.  These new devices really do cause a great disruption in the solutions development ecosystem.

In order to combat these bifurcations between enterprise/consumer, phone/tablet, and browser/native, EfficiTrends offers to main services to customers of all sizes: enterprise solutions and consumer solutions.

EfficiTrends Enterprise Workflows use our business analysts, architects, technical project managers, and developers to define and create new solutions within enterprises.  The enterprise has its own challenges and is mainly centered around creating reasonable and useful workflows that allow information to flow from source to source with high data quality and final approval.  These solutions may connect to mobile devices but could also be kept inside the firewall or delivered through the browser.  Examples include ERP implementations, CRM implementations, and custom SharePoint apps to gather data.

EfficiTrends Custom Applications are designed with end users in mind.  These could be SmartPhone apps or browser apps and can also be delivered within the firewall or to employees.  These types of appealing user-interface projects typically require different skillsets: designers and marketing professionals, namely.  The enterprise workflows really are a subset of custom applications.

So there you have it.  In order to combat the complex world of technology and organizational change, EfficiTrends employs two main methods to accomplish the goals of making happy customers: enterprise workflows and custom applications.  Contact us today to learn more!

Monday, August 08, 2011

My GTD/Remember the Milk Lists

A friend asked me what mine are today.  They are:
  • Inbox - Comes out of the box, used for active and important things.
  • All Tasks - out of the box...rarely use
  • Anytime / comms - Emails for phone calls I can make "whenever"
  • At home - Things to do while at home
  • At the office - Things to do at the office
  • Blog Post Ideas - List of blog posts I could write/ideas
  • Computer - Tasks requiring a "real" (non SmartPhone computer)
  • Costco - Things to buy at Costco
  • Drink Ideas - Cocktails
  • Email comms - Emails I have to send
  • Errands - Errands I have to run
  • For Home - Items for the house
  • For Trip - Items for an upcoming trip
  • For Work - Items needing to bring to / for work
  • Fun ideas - Ideas for fun things/events
  • Gift ideas - self-explanatory
  • Groceries
  • Meals - Meal ideas
  • Movies - My movie queue that I haven't yet entered into Netflix or Movies app
  • Music - Music/bands I want to study/listen to more
  • Ongoing projects - Big projects that I keep working on as a reminder
  • Places to Visit - We use this as a restaurants list that we want to go to
  • Seattle - Things in Seattle
  • Shopping - I'm not a shopper, so gift cards I have and larger purchases I need
  • Video Games - Video games I'd like to play
  • Waiting for - Things that people owe me.  A real favorite!
  • Weekday errands - Things that I have to do during the week since the places are closed on the weekend.
  • Weekday phone calls - Phone calls I have to make during business hours
  • ...Other random and specific project folders
  • Sent - A default folder
I hope you can learn from how I use this tool...

Tuesday, July 26, 2011

Kick Major Booty: The 10 commandments of being a technology and business change agent/leader

Below is my Top 10 List of rules I've learned over the 15 years building, selling, and implementing web apps.  I hope you enjoy them and learn from the many mistakes and experiences I've been lucky to have!

  1. Be different.  Build the thing that's missing; that they don't have.  Don't bore people with products that are way to similar/the same as what's already out there.  Don't be boring, dare to be different!
  2. Be business-minded and results-oriented.  Make sure that the thing you build connects very directly to the business context and drivers.  Be serious about business and results.  Only work on the things that pay you and for which the business will get paid incrementally.  Know value.
  3. Seek to know the customer's experience.  Clearly understand the numbers and drivers behind the way that all users of the system think and make decisions.  Think about the system from their perspective.  Understand what they need and how they think. Get in their heads.  Watch them.  Interview them.  What makes things easy and exciting for them/better?  What makes them tick?  What would excite/wow them?
  4. Test all assumptions ASAP.  Never assume anything but because you will have to, always build toward the things that will rapidly test your assumptions.
  5. Never work for free; find a customer 'cause you're good enough.  Make sure that you get paid for what you do; don't spend too much time toiling on free projects or for a customer target who is not very well defined; find a customer and charge them for what you do.  Let them be your "seed" funding.
  6. Be a data and process geek.  Map the flow and understand the business and business processes from end-to-end, in gory detail.  Know the edges and the context.  Intimately know the steps, functions, and limitations/constraints/realities.  
  7. Lead it like you stole it.  Be a technology/process/business change agent by being that person who can get the right things done rapidly.  Don't feel like you have to do it all *by* yourself but do take ownership and feel like if you're not with me you're against me and I'm going to make this *f'ing* thing happen!  Delegate.
  8. Baby steps.  Stay agile and be flexible in changing what you're building if you learn something new.  Don't throw your hands up or get too distracted with shiny objects.  Finish what you're currently working on so it's SOLID, and then move onto the next thing and make sure it somehow connects.  Build bridges.
  9. Build strategically.  Make sure you build the feature or product that will get them excited and keep them engaged (have a sales/marketing/process/adoption angle in everything you build).  Have balls.  Don't be a wuss!  Be different!  Consult with the Kano Model to balance what you build and make sure that it's not ONLY bells and whistles!
  10. Worship the customer.  Allow yourself to take direction from and fear the customer.  They're always right.  They may not always KNOW, but they're definitely always right.  It's irrefutable.  Above all else, allow yourself to be directed *by* them.  Build for them.  Worship them.  Understand the path you need to put yourself on so that you're laying that path for them so they can walk.  

Sunday, July 24, 2011

Clearly Separate the Selling and Delivering Functions

Part of being in the professional services field is selling.  Selling is huge/big/everything.  If it weren't for selling and business development there would be *nothing*.  Okay, maybe that's a bit harsh / too strong.  What I should really be saying it that product and service QUALITY are the number on things that matter.  But when there's trust involved and "strategic partnerships" involved, quality *can* play second fiddle to the relationship.  In fact it should be your preference to have these relationships *so that* quality isn't the only thing.

Contracting is a difficult business.  Contracts will get created and the more clear they are the better the chances are of delivering the right product.  I'm not making an argument here for no documentation, quite the contrary.  What I am trying to do is parse the distinction between two things: SELLING, and DELIVERY QUALITY.

By separating these two things in business we can create great solutions.  By having a sales and selling/relationships context, we can be all about the PEOPLE and RELATIONSHIPS and by having a delivery/quality context we can care all about the PRODUCT and CUSTOMER SATISFACTION.

The responsibilities of the Selling/External Relationships function:

  • Meet new people
  • Qualify people as good-fit customers
  • Maintain relationships and remain "friends" even when things are wacky (but try to be on the side of the delivery organization...this can be a very hard balance)
  • Sell new solutions and understand what's being delivered
  • Understand "drivers" in the client-organization business
  • Lead and manage
The responsibilities of the Delivery/Product organization:
  • Exhibit engineering excellent
  • Make quality/cutting edge products
  • Build for the future
  • Be great with your estimates
  • Communicate well
  • Deliver, deliver, deliver (demo, chunk, and milestone)
In your organizations make sure that you clearly separate and spell these two functions out!

Use companies as incubation hosts - deliver software through professional services projects

There are a million GREAT software ideas.  There are also millions of companies out there who could *greatly* benefit by applying these software applications to their businesses/operations.  But how do these ideas get built/realized and how to companies adopt them?  Professional services organizations like those I want to create.  In this article I'll talk about how things go from "great idea" to "applied prototype" to "service business".  I'll discuss each of these phases and then recommend things you can do to create and sell these types of businesses/organizations.

Great Idea.  In the beginning there's a good idea.  Let's say that our good idea is to provide a restaurant's customers with a "mobile app they can use to order, replacing the wait-person".  The restaurant patrons use their SmartPhones or Tablets to order from the restaurant menu while there.  The patrons launch the restaurant app, pick their location, identify their table, and then start requesting services from the kitchen.  The app would talk to a service that the wait-persons/kitchen staff use to fulfill orders and requests.  They, too, COULD have a mobile app that allows them to see the requests and mark them complete.

Applied Prototype.  The applied prototype phase is when this technology actually works for *a location*.  The basic service has been proved and the value of such a service has been documented as a case study.  For example, the benefits/drivers for this applied service are: order-taking time reduced, improved customer satisfaction with restaurant, and service flexibility.  The case study would measure and promote these items for example:

  • 50% reduction in order-taking time (via observation/data study)
  • 50% increase in customer satisfaction (via customer survey)
  • 50% increase in ease of organizational change (via management survey)

Service Business.  Now that the service exists once and there is a customer who will speak out for its value (and there's a software architecture to support expansion) this can be turned into a business product that is sold repeatedly.  The idea of it can be sold and it can also be marketed through sales channels and propoganda describing the service, it's value and customers.  During this phase, new customers can choose to get the service themselves and the service provider business can offer pricing to integrate and measure the system for that new business.  If they do it well, they will continue to improve the business and value driver effectiveness for the cost.  They will make money.

So...what does all this mean?  How do you go through these cycles?  Some recommendations:

  1. Have good ideas and be creative.  Think of things differently and as mobile, connected software services.  Talk to your friends, network, brainstorm.
  2. Understand the relationship of the new service to the existing business.
  3. Find early-stage businesses who are willing to share in the risk of developing and applying innovative service solutions and helping prove the value of these types of businesses.  (Sell!)
  4. Use these organizations to (co-?)finance your operations.  
  5. Deliver.
  6. Consider sharing in *some* of the future profits with the financier.
  7. Gain more customers and traction.
  8. Be the entrepreneur, driver, and owner.  Make it happen!

Friday, July 22, 2011

Sell two things: CRM and (Mobile) Apps

I was talking to a friend today about how the main business drivers for people are reducing delivery risk (through project management) and reducing cost, through better efficiency and project management.  I disagreed with him that these were *the* things that mattered to managers.  I posited to him that the following two things matter to people in today's market and economy: CRM systems (sell more, more efficiently) and (Mobile) application development.  I'll discuss these two things in details and then summarize.

CRM systems are very critical to businesses for the following reasons 1) things get messed up when your sales/selling process is messed up 2) if you can clean up your sales/selling process then you are headed in the right direction 3) there are some good systems and processes out there that can help people clean up things.  There are big ROI opportunities here.

(Mobile) App development is huge.  This is a *major* market disruptor right now and will be a major disruptor for business processes in years to come.  People with their smart phones are powerful. They can do a lot.  Building services and apps for these phones is very big business.  Companies want to capture these opportunities and they need help in doing so, thinking about it.  People with experience selling web-based solutions will have a leg up in selling mobile solutions...this is the new wave.

Using either of these two "sales tools" will help organizations have the right conversations with companies about things that matter.  Yes, Sam, we can help companies cut costs and manage their existing operations better, but so what?  Won't it be too late by the time we know?

Thursday, July 21, 2011

3 Elements of Delivery

Three
Delivering solutions is complicated because there are three elements that have to work together and these elements can be seen from two perspectives, so really, there are about six things going on in describing this.  But I'll keep it simple.  The major *technology* parts of delivery are:

  1. The content management system.
  2. The API
  3. The App
The two perspectives from which they can be seen are:
  1. The user as the company's customers
  2. The user as the company's employees
Depending on how we look at the parts, we get different results.  But in general, these are how the parts work and work together. 

The content management system is the part of the solution that the customer interacts with to control the content. This may be company employees and this can be end users (in other words, in one context, this could act as the app itself).  What's happening here is that INPUT is being received and stored in the database for presentation in the app, be that a business intelligence dashboard, or in a customer-facing app for the people (intranet, mobile, intranet, extranet, whatever).

The API is the thing that connects to the database/data store and "gives" the data to the app.  The API also "takes" information from the app and can persist that data as necessary in the data store.  The API's job is to provide a SERVICE that the app can use to get and put information.  The APIs job is to obfuscate the complexity of the database and business rules from the user/developer and give a simple way to interact with business objects / data.

The app is the thing that is awesome and pretty.  It is the main UI/UX that the user interacts with.  It is THE THING.  It is THE BIG THING.  It is the thing that people want to buy, use, and sell.  It is the sexy object of interaction, etc.  Somehow we want this.

My company offers APPS (and these other supporting elements of delivery) on mobile and any other relevant platform: PC, console, intranet, extranet, whatever you want.

Tuesday, July 19, 2011

Analyst analyzes, doesn't judge

As a developer doing analysis, you have to remember that the goal is to write down what the customer wants.  You are NOT to judge or think about what they're requesting from the frame of mind of the developer.  If they ask for something that you don't know how to do, looks complicated, and that kind of thing, simply write it down and go talk to your team about it and get back to them with an estimate later.  This data-collection phase of "what's requested" should NEVER be a discussion of what's possible/easy/pragmatic.  Separate yourself in this role as the data collector rather than the implementer/judger/decider.  Be a better sales person and never tell them no, or "that's too hard".

Monday, July 18, 2011

Target your job search with multiple versions of your resume

Getting a job in technology isn't easy.  In my opinion this is caused by the complicated and dynamic nature of the industry: very few people know which way's up and how to find the right candidates.  But there's many jobs out there, so how do you get one?  If you ask me, the secret's in creating several targeted versions of your resume; one for each major facet of technology:
  • Technical/developer resume.  This resume highlights all of the technical stuff you have done, all of the technologies you have used, and all of the results you've gotten from creating custom solutions for people. Make sure you call out all the technical details and make yourself really sound like a developer.  Speak to your skills from database to middle-tier to front-end and talk about your experiences on teams, developing and being creative.
  • Manager resume.  This resume should talk about all of the "business" and management / leadership roles you have done.  Tailor it to only refer to positions where you were a manager.  Remove titles that looked like developer titles.
  • Consultant resume.  This is your "all up" resume that points you as a leader and Jack of All Trades.  Tell people how you can work with customers, sell and implement solutions.
Be specific and choose the right resume to tailor when applying for the job.  Your overall positioning will help you feel grounded in what you do best: sell!

Sunday, July 10, 2011

Unified Delivery System

Unified delivery approach
Systems suck today at supporting the process of delivering professional services.  I define professional services as services provided to organizations for contract.  This typically includes:

  1. Legal contracts
  2. Payment
  3. The delivered work
In order to create this simple type of transaction, several systems are required to support the process (but I can't find one system that does it all for some reason):
  1. Track leads, accounts and opportunities - CRM (SalesForce, Sugar CRM, Sales Force)
  2. Estimate and track work - Project Management (MS Project)
  3. Invoice and track accounts receivable - Accounting (QuickBooks)
It shouldn't sound to this point that professional services delivery is complicated but for some reason it is.  I have not yet found an integrated system that supports the basic functions highlighted above.  This means that  managers are left to procure many of these systems individually and then *somehow* integrate them.  

It's the integration part that's the hard part, I think.  There's some interesting thinking out there like in Master Data Management (MDM) and the like for doing this in an automated way...but this might be the bleeding/cutting edge.

I'm going to start putting together the pieces -- for myself, my companies, and for resale--the systems required to support and automate the process of delivering professional services.  

Please let me know if you know of good-working, all up system integration.  

Saturday, July 09, 2011

The Genius Session

A genius session is a meeting between a customer and the "geniuses" from a consulting company.  In mobile application development, typical types of geniuses are: designers, Android developers, iOS developers, database types, and project/program/product managers.  In general, the sky is the limit in thinking of relevant experts you would want to bring to the table to think out your product or service.

AppsJack offers low cost and high value genius sessions to people looking to get a mobile app or improve the one they have.

Contact AppsJack today to explain your situation and help us think of relevant geniuses for you!

Custom, Generated, Configured

In the mobile application development space there are three main ways to build apps: custom, generated, and configured.  In this post I'll describe each and then discuss their relative merits and pitfalls.

Custom application development is when an app is built for the specific customer needs and the engineering shop makes the app basically "by hand".  They may re-use some components, but in general they are building the thing from scratch.

Generated apps are those built from frameworks like Sencha, Phone Gap, and Canappi.  At AppsJack we like Canappi for its ease of use and comprehensive treatment of functionality from the database to middle tier to front end, be it iOS, Android, or HTML/CSS.

Configured apps are a category of apps like those from Mobile Roadie that are configured.  They basically offer a template that you can use and plug things into.

For customers who are not very price conscious and want the best possible solution, they're going to want to choose a custom application and probably have it generated from a library like Canappi where possible.  For customers who are price conscious and want to plug into a basic app to get in the game, they may think of configured apps like Mobile Roadie.

Whichever type of customer you are, consider using AppsJack to get you the app you want.  We'll work with you to understand your needs and give you the best bang for the buck.

Sunday, June 26, 2011

A call for the Pre-Market

In Agile development, if the customer has sufficient funding, creating the product should be very rapid.  When the customer is not ready for the product, necessarily, there has to be a lot of hand-holding to prepare them for the change and to train them and their customers on the innovation that is being produced.

Much time is spent talking about agile development and how important it is.  Arguments are made for light documentation but I've found that this really isn't all of the story.

Test-driven development is critical.  But what about test-driven marketing?  Shouldn't most projects be for marketing/sales purposes anyways?  Why would we authorize our software developers to be the ones that approve whether or not the software is complete?

This is my argument for what I call the "pre-market" as in the market before the App Store, the Android Market, the production release, etc.

Agile supports this idea by distinguishing between iterations and releases.  We need to make many iterations on our software before we are prepared to release it.  But what is the framework into which the iterations are released/delivered and what are the tools that we have available to provide feedback on the iterations?  I would suggest that these tools are currently quite limited and I will argue that that the pre-market concept is a next "major wave".

Let me suggest a few features of the pre-market to help us get our heads around it:
  • Secure Portal The prototype is shared with the customer(s) in a portal
  • In-App Feedback The prototype is instrumented so that feedback can be easily given
  • Meta Data Centric The features and screens of the prototype become things on which feedback can hang, so the feedback can roll up
  • Central Database All feedback goes to the same central database
  • Invitation-Based The users of the portal can (optionally) invite other people to use / view the prototype
  • Filtering of Feedback  Product manager can flag what's important for next iteration(s)
  • Serves as Backlog The feedback can be filtered and aggregated into future iterations
  • Connected Many other features like sourcing of cash and resources could be added to this system
I'm passionate about this type of system and would love to see it come about.  Let's do it!

Wednesday, June 22, 2011

The value of mobile

The phone: it's in your pocket.  The web, it's in the phone.  
People ask why mobile is different than the web in general and I have several answers to that:

  • The web is cold and impersonal.  Although there are portals and accounts and you can log on and such, it's generally "detached" from you.
  • The phone is "in your pocket".  It is yours.  You possess it.  The phone is indistinguishable from the software it runs. 
  • The phone adds new data dimensions such as notifications, calling, and GPS.  It is attached to the user and ABOUT the user.
People looking to understand their customers need look no further than the phone or mobile device.

Thursday, June 02, 2011

3 Ways to Sell Technology

There are three main ways that I can think of to sell technology: 1) via your business analyst / sales team 2) via your designer team and 3) through your developer team.

In trying to attract customers and show them what you can do or start the wheels in motion on the relationship between you two, any of these ways is an option. I'll describe all three and then comment at the end about my opinion.

The first way is to have your sales / business development people do this. These people will not produce working code, prototypes, or designs. They *may* create wireframes to help solidify the design but only that. They will definitely have to record the user needs and objectives. They will have to serve as the product manager and make sure they understand what will fly for the product being produced.

The second way is to have your UI/UX people make some sample screens. They probably should do this from the wireframes produced, but you could have them go work directly with the customer and have them produce from a UI/UX experience. I'll argue that this is not the best way to lead.

The third way you could sell IT work is by having your developer team create working (prototype) software to show the customer what is possible and or some options. I think this makes some sense so that they can better visualize and understand things beyond just wireframes. A step in this direction but not the whole way would be to demonstrate *transitions and flow* between wireframes.

Overall, any of these methods is possible, but I would say that there MUST be a good business analyst / product manager in the beginning to work with the customer on what he/she specifically needs. Once the product concept is clear and understood, then the UI/UX person can come in and make the mockups really good. (You should charge for this). And once the wireframes and product are solid and perhaps the UI/UX person has had a chance to start, then the developer can start producing production code.

There's no one *right* way to do this but there are definitely wrong and wasteful ways. What are your opinions?

Wednesday, May 25, 2011

Using design-first to build the backlog


It is great (necessary is a better word) in application development projects--especially when the customer is concerned about the app looking good--to have a graphic artist / designer involved.

Right now, we're working on a project for state lotteries and we need a prototype. There's no customer but we want it to look good (have some sizzle) so it can sell.

To make it look good, we had a designer mock up some screens and UI/UX stuff for us. The mockups look great!!! ...BUT... (And I this is a very big BUT)...the designs have proven very hard to IMPLEMENT...so we've had to punt and backlog some...and I'm okay with this.

For me, in software, the goal is a functional prototype. An idealized prototype or mockups is not functional. Being too wrapped up in what the software should/could be is great but it's definitely not the goal for the project. For the project, what the product *can* be is the goal.

I think there's a balance between ideal and practical and here's my current thinking on it: if the customer is asking for a good-looking design, then get a designer to mock stuff up. Have a BA/PM-type-of-person parse out the observable behaviors in the screens and share those two things (mocks and use case descriptions) with the developer. Have the developer dive in. Most likely, there will be things that the developer thinks are too hard or are impossible to implement; the project manager will likely agree they are too hard. Proceed! Backlog the items that are hard/impossible and as fast as possible, get to the minimum thing that the developers can produce that most nearly complies with the screens and spirit of the designs and use cases / user needs. (imperfection is tolerated and encouraged...the speed to completion and "done" is the goal)

In my opinion software development is a process and can't all be done/solved in a single iteration. Get to "done" as fast as possible and let the developer decide what done is (he's the furthest down the chain and has the hardest/most stressful job in my opinion). Over time, as a team, the software can more closely comply with the ideals of the designers and users...over time...and it will never be done...never...

Friday, April 22, 2011

Writing Leads from your corporate web site to on-premise Microsoft Dynamics CRM 2011 using XRM, LINQ to CRM, C#, and Web Services

Scenario

I was asked by our sales team to modify their web form so it wouldn’t just send emails but also write a new Lead to our Dynamics CRM 2011 system.

l4fpv030

>

aocqtheo
Email

+

yzjjyw0f

CRM

Solution

LINQ to CRM Generation

I used Hosk’s method to generate and use the LINQ to CRM classes for our specific server.

 

C# Function to Write Lead to CRM
public void AddLead(string subject, string contactFullName,
string companyName, Guid ownerId, LeadSourceWebSiteName leadSourceWebSiteName,
Uri organizationUri, string runAsUser, string runAsPassword, string runAsDomain, string emailAddress,
string phone, string message)
{
try
{
var credentials = new ClientCredentials();
credentials.Windows.ClientCredential = new System.Net.NetworkCredential(runAsUser, runAsPassword, runAsDomain); ;
var serviceProxy = new OrganizationServiceProxy(organizationUri, null, credentials, null);
serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
var oc = new ErServiceContext(serviceProxy);
var newLead = new Lead()
{
Subject = subject,
LastName = contactFullName,
CompanyName = companyName,
OwnerId = new EntityReference(SystemUser.EntityLogicalName, ownerId),
LeadSourceCode = new OptionSetValue(8),
new_LeadSourceWebSiteName = leadSourceWebSiteName.ToString(),
EMailAddress1 = emailAddress,
Telephone1 = phone,
Description = string.Format("Message from web lead on {0}: {1}", DateTime.Now, message)
};
//serviceProxy.Create(newLead);
oc.AddObject(newLead);
oc.SaveChanges();
}
catch (Exception ex)
{
throw ex;
}
}

Calling it from the Web Form
protected void SendLeadToCrm(string subject, string name, string company, string email, string phone, string message)
{
try
{
//Colyer
var ownerId = new Guid("AB56EF33-4913-DE11-9EE8-00156D0A7301"); //You have to get this from the server
var serviceUrl = new Uri("http://server/company/xrmservices/2011/Organization.svc");
var serviceAccountUser = "serviceAccount";
var serviceAccountPassword = "password";
var crm = new CrmServiceClient();
crm.AddLead("Web Lead", name, company, ownerId, LeadSourceWebSiteName.extendedresults,
serviceUrl, serviceAccountUser, serviceAccountPassword, "yourdomain", email, phone, message);
}
catch (Exception ex)
{
//
}
}

Conclusions


This was a fun but long and drawn out project.  I got to learn a lot about CRM 2011 and how it works with C#.  It is way better than CRM 4.0 and the LINQ to CRM stuff is pretty slick.


I hope you find the above useful.  There are a lot of “hidden tricks” in the code above but I think it’ll get you pointed in the right direction if you dissect it.


Happy programming!

Wednesday, April 06, 2011

Query String Parameters as a Table for Debugging in Fiddler

cwcyjycs

I frequently run into this problem of wanting to know what’s in the query string for debugging web apps.  Here’s where to get it in Fiddler.  Pretty handy!!!

Inspectors > WebForms > QueryString

Monday, March 21, 2011

Updating Read-Only Dynamics CRM 2011 Fields (Pipeline Phase and Probability) from a Sales Stage Dropdown

We’re setting up Dynamics CRM 2011 at my workplace and I had to figure out how to set up our pipeline. Here’s my solution:

fffcpplt

I created a Sales Stage field that updates the Pipeline Phase and Probability fields on change. I followed Ayaz Ahmad’s solution for hooking up a javascript function to my Opportunity form and then wrote the following function (after some iteration).

function new_SalesStage_OnChange()
{
var new_salesstageAttr = Xrm.Page.getAttribute("new_salesstage");
var stepnameAttr = Xrm.Page.getAttribute("stepname");
var closeprobabilityAttr = Xrm.Page.getAttribute("closeprobability");

closeprobabilityAttr.setSubmitMode("always");
stepnameAttr.setSubmitMode("always");

if (new_salesstageAttr.getSelectedOption() == null)
{
stepnameAttr.setValue("");
closeprobabilityAttr.setValue(null);
}
else
{
var ssVal = new_salesstageAttr.getSelectedOption().text;
var pl = ssVal.lastIndexOf('%');
var probability = parseInt(ssVal.substring(pl-2, pl));

stepnameAttr.setValue(ssVal);
closeprobabilityAttr.setValue(probability);
}
}

The biggest tricks were:



  • Using LOWER CASE names for my field names.  This breaks if I use getAttribute(“new_SalesStage”), which is it’s real name.  Booo, Microsoft!!!
  • Handling the null value.
  • Using the setSubmitMode(“always”) call to make sure the readonly fields were beiing saved.

This solution should have been quicker but I learned a lot on it.

  

Friday, March 04, 2011

This means war! Forcing collaboration

Whether you’re trying to convince Moammar Gadhafi to stand down or trying to work with coworkers, you are at war.  I don’t mean this in a bad/negative way, I mean it in a real(istic) way.  People are competitive and out for their own.  They may be your coworkers and friends but in my experience, it’s still competitive; it’s still a battle and a daily challenge.

To me, the elements of collaboration are as follows: the people, roles, relationships, events, actions, and artifacts/documents/messages have to be defined and shared effectively for a given relationship to be successful and beneficial. 

Sure we can operate under other pretenses: avoidance, control, dictatorship, and subversion but our goal should always be collaboration and partnership.  We may grow tired and give up on certain objectives, but we have to keep going on, keep forming the relationship and agreement.

In work and business I think this is far easier (and more necessary) than in personal relationships.  But you have to define these things. 

I’m dealing with one of our senior executives at work no, trying to form a clear and beneficial relationship between the sales/account management/business development functions and the project management/planning/delivery function.  This distinction/division is relatively new (probably better stated as IMMATURE) within our company, so there is a lot to do.  First we have to figure out each others’ incentives and interests and then we can figure out a working relationship / process / protocol that works and benefits the organization.

These things take time but if you stay after it you (and the other party) will win.

Thursday, March 03, 2011

Identify those who you will let manage and influence you wisely

This should be simple.  You should choose your boss and your bosses.  They should all be allowed to manage you.  Don’t fight it.  Some may be clueless idiots, but others may be extremely talented and really able to help you out.

When it comes to finding the right people for you to work with daily and repeatedly (your best friends within a project or organization), choose wisely.  Know your criteria.  Do you want them to be your friend?  Do you want them to be smarter than you?  Dumber?  Superior?  More junior?  More senior?

Whichever way you go, choose your work-friends and partners wisely.  Getting this wrong will really suck.  You can choose who these followers are and do it wisely.

Wednesday, March 02, 2011

Fluent API Navigation–What’s the member returning?

Getting up and down an object map isn’t easy, especially when you don’t understand the API.  Some APIs allow “chaining” where I can write something like Coffee.MakeCup().CupSize(‘Large’). 

What this example implies is that each child member/method call returns itself or the base.  Determining if something is returning itself or the base is a pretty big distinction / way of thinking.

This can be applied to people: does this guy really believe what he’s saying or is he just a talking head?  People that “return the base” are not representing themselves.  People who return themselves are real and authentic. 

I’m not saying that one is better than the other but there are situations and needs for both.  This is a fundamental design decision.

Friday, January 28, 2011

Rely on others and remove impediments

I’ve written before about the Theory of Wringable Necks.  Some people want to put things on people and delegate and not have to care about things.  This is perhaps good management but probably not good leadership.  Leaders are aware that they are the ones who are ultimately responsible and accountable for everything even when things have been delegated.  Life is a team and they’re a key member.1aynqlh0

I have a project manager who asked me to do something and I’m doing it..but slowly.  It’s taking me a long time to learn a new set of technologies and the result is tricky.  If I get it wrong, I break something.  The project manager has not provided me any input or guidance and is expecting me to get the job done.  He just stopped by to ask if I was done and the answer was, “I’m still trying to work out that one last kink.”  He offered no suggestions and simply looked disappointed. 

If you’re going to delegate a task, be prepared to involve others to get the job done.  Never assume that the person that you chose is the right person for the job or that you have the right to wring their neck if things don’t go so well.  Remove impediments for people, find support, and recognize that you (as the PM) are the one responsible for the speed and quality by which something is delivered.

Wednesday, January 26, 2011

The beauty of Inversion of Control

public CoeController() : this(IoC.Resolve<IRepository<Coe>>(), IoC.Resolve<IAuthenticationService>()) 
{ }

A controller that can look up what its dependencies are.


Seems neat.  Still thinking about it.

Inversion of Control, Dependency Injection. Awesome!

This stuff seems so cool and important for being able to test your code.  I just watched this very excellent video from James Kovaks on IoC and DI in C#.  He makes it very simple to use and understand the concepts of why and how to do this.  Great job on this.

Tuesday, January 18, 2011

Knowledge “streams” vs. knowledge as a globe, query, function, service

I think these are two pretty big distinctions in how we think about knowledge and information. 

When knowledge is a “stream” (a book, a web page that you read from beginning to end, a blog post with comments), we consume it in a specific form and have certain expectations.  For example, we don’t think that we can “query” a book unless we have read it.  If the book has a Table of Contents or good Index, then we can access its information.

 

These “query methods” / shortcuts like Indices, Tables of Contents, and Search Engines are short-hand forms of accessing knowledge.  Since humans generally want to “move forward”, they store knowledge in (sometimes disconnected) streams rather than taking the time to update the index.  We build computer systems, search engines and other technologies to “mine” our knowledge, but we’ll probably never be able to keep up with the steams of information that are being produced (both on- and off-paper).

Monday, January 17, 2011

Looking for a UI control that will allow me to do bulk adding with edit and delete

I’m working on a couple of projects now that have the need for quick-edit lists.  (Lists of free-form things like Actions, Reasons, etc.).  I want the user to be able to quickly add a lot of these items, almost in a brainstorming type way.  Editing and deleting the items should also be easy. 

Here’s a quick mock-up of what I’m trying to accomplish:

eejn0snh

I see an article and video on the web from Elijah Manor (a .NET MVP) about hooking up a control called jqGrid (download page is here) that works with .NET MVC.

It looks like it could be a lot of work to use that.  I may roll my own method but I’m not yet sure.  TBD tomorrow…

Sunday, January 16, 2011

CTP5 [DataAnnotations]

DataAnnotations are sweet! 

The MSDN announcement to CTP5 has a listing of the Data Annotations provided.  Here they are formatted for your enjoyment:

  • Key
  • StringLength
  • MaxLength
  • ConcurrencyCheck
  • Required
  • Timestamp
  • ComplexType
  • Column    - Placed on a property to specify the column name, ordinal & data type
  • Table - Placed on a class to specify the table name and schema
  • InverseProperty - Placed on a navigation property to specify the property that represents the other end of a relationship
  • ForeignKey - Placed on a navigation property to specify the property that represents the foreign key of the relationship
  • DatabaseGenerated - Placed on a property to specify how the database generates a value for the property (Identity, Computed or None)
  • NotMapped - Placed on a property or class to exclude it from the database

Many-to-Many table mapping in EF CTP5

Was just reading that the method of many-to-many mapping is different in CTP5.  Here’s the method:

public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Store> SoldAt { get; set; }
}

public class Store
{
public int Id { get; set; }
public string StoreName { get; set; }
public ICollection<Product> Products { get; set; }
}

public class MyContext : DbContext
{
public DbSet<Product> Products { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{

modelBuilder.Entity<Product>()
.HasMany(p => p.SoldAt)
.WithMany(s => s.Products)
.Map(mc => {
mc.ToTable("ProductsAtStores");
mc.MapLeftKey(p => p.Id, "ProductId");
mc.MapRightKey(s => s.Id, "StoreId");
});
}

Saturday, January 15, 2011

My volunteer experience today

I had a fun day at Seattle GiveCamp today.  I worked with a couple of guys from MokaSocial to create a mobile app for a conference.  It’s going to be available on iPhone, Android, Blackberry, and Windows Phone.  It is a “skin” for a WordPress site and detects the user’s phone.

4q0prk4e

Friday, January 14, 2011

Scrummerfall

rzliwivdDo blended / hybrid models work?  For some.

You can be a waterfall project manager and set commitments with the customer that way.  You can get commitments from developers that they’ll hit targets but they might not.  By doing Agile, you handle risk on a daily scale and can track things in real time.

They’re not mutually exclusive, I think they support each other.  One helps plan long-term and set expectations with the customer and the other helps get work done in the short term and manage risk and communications.

They work together and together they can make you successful.

s1xynzrd

I can paste code to my blog now!

Probably not exciting for you, but it is for me!  Check it out:

C# block:

namespace TestProject1
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void SystemTracksWorkflow()
{
var c = new CoeController();
c.Create(4);

c.DoAction(c.CoeId, ActionName.OpenCoeSystem.ToString(), "system", "marla", "stuff");
//Assert.AreEqual("Open", coe.Status);

c.DoAction(c.CoeId, ActionName.AssignCoe.ToString(), "marla", "eric", "Please look at this, it looks really messed up.");
//Assert.AreEqual("Assigned", coe.Status);

SQL block:

CREATE TABLE [dbo].[Coe](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ClassId] [int] NOT NULL,
[Created] [datetime] NOT NULL,
[StatusId] [int] NOT NULL,
CONSTRAINT [PK_Coe] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

XML block:

<configuration>
<connectionStrings>
<add name="COEConnectionString" connectionString="Data Source=.;Initial Catalog=COE;Integrated Security=True;Pooling=False"
providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>

I spent a very long time yesterday trying to make this work.  I have a Blogger (BlogSpot) account and I want to use Live Write.r  I gave up yesterday after many trials but had to make it happen today.  I did.


Here are the instructions from MLA Wire about getting this working in Blogger and the instructions from Yordan Pavlov about getting SyntaxHighlighter marked up within LiveWriter.  I know Scott Handselman had a post about this a long time ago and I remember reading it and being excited but I never got it going.  But I have it going now! 


At least my posts will be more colorful and interesting now.  I’m still looking for a good Live Writer plug-in for pasting images.


  lckq1dqk


I pasted this one in with the Clipboard Live plug-in…not sure if it did anything good.

Thursday, December 23, 2010

One many, many one

As a project manager on a single project, I will not go as far as writing the code. It is too much to manage the project and to be on the hook for producing the product, you have to separate these concerns! I must manage the project only and employ others to do the main work.

When someone else is the project manager on a project, I am happy to plug in and write code / do work / take direction. Great.

In my opinion, in organizations, people need to own things and they cannot own both the project/business side AND the code/delivery side AT THE SAME TIME (for a single project/account).

I do think it is possible, however, to be both a project manager/owner on one project while simultaneously developing code on ANOTHER project as a team-member (non-manager). I think this is an ideal situation to me, where I can do both. I get to play with technology and be a developer/producer, and also be a manager. I can improve skills at both at once. No need to pick, it's not one-sided!

How low will you go?

In project management—I think—you can go all the way down to the level where you're doing all the work and writing all the code. But can you really "manage" the project if you're in it? Probably not.

A coworker is making me think about how low I will go on this. Will I write code? Will I talk to the dev team about the solution? Will I design the solution? Maybe as long as I REFUSE to write code, I'll be fine. That is high enough level and I can insure that others and not me write the code and produce the project. I have to stay high-level and be a manager, not a doer.

The sexy parts of project management


It's not the work, it's the people, results, client, technologies, and knowledge.

Much project management today is focused on the BORING (and hard) part of project management: the work. The work is fine, it's hard, it's there, it's complicated, but it really doesn't matter if you can't market your WORK PRODUCT. Your work product is your results; what you accomplished, what you produced, what you changed, learned, did. It's the end and the journey.

My proposal is for a new view of project management that is MARKETING focused. I want to think about and share the SEXY parts of project management like the people and how smart they are, the client and how cool it is, the industry and how interesting it is, the technologies and how cutting-edge/cool they are, and the results and how awesome and game-changing they are.

There's a way to do this and I want to start the wheels in motion on it ASAP.

Make the budget last

Many things in business are fixed-bid, not time- and materials-based. Sure, it's lovely when you're in a situation that you can charge the client for all reasonable time, but this isn't usually the case.

Right now, I'm working on a fixed 80-hour budget that will have to carry me into Jan 7. I've spent almost all of the hours so far, as this is my only project and I'm pretty much full time on it. But what's reasonable to bill?

I have to think about what I have to complete (a statement of work and technical spec and a couple of days of meetings with the client) and how much time that will take (~20 hours). So I think I'm only going to bill for 20 hours this week so I can bill for 20 the following week to fill the budget. This makes sense to me but is kind of "weird math".

Wednesday, December 15, 2010

Plan, Present, Collect, Transform

I'm starting to see a pattern emerge in data collection and information systems: plan, present, collect, transform. Let me explain.

Planning is the stuff you have to do NOW or before you get started.

Presenting is showing the users data.

Collecting is getting data, either from the users or other data sources.

Transforming is using the data you have to manipulate it. This may result in a new presentation or a change to your model (and views).

Extract from database or from users? There’s really no difference…

Whether your're writing a package to pull data from a database, or a web form to collect data from users, you're doing the same thing: getting the data. This is all part of the "E" in ETL (extract, transform, load).

I wrote last week about the similarities between SSIS and Windows Workflow Foundation; they're really similar in my opinion.

When I'm working now, I'm starting to "bucket" data collection tasks (be they user-facing forms or databases) into the same category. I think this is helping things out, architecturally.

What are your experiences with this?

Friday, December 10, 2010

Workflow foundation: new capture. SSIS: existing capture

Per my previous post on the two faces of business intelligence, I'd like to further my point by describing two "core" technologies from Microsoft: Windows Workflow Foundation (WF) and SharePoint Integration Services (SSIS).  These two technologies in my opinion are "big" in the sense that that "orchestrate workflow".  Let me explain.

Windows Workflow Foundation is a technology that allows a developer to "map out" a business process and wire in the user scenarios to capture--and then store--the data.  The important part here is that we are going from nothing (the user's mind) to something (the database).

SQL Server Integration Services (SSIS) is a technology that allows a developer to "map out" an in-memory data transformation process.  The important part here is that we are going from the database *back* to the user's mind (typically in the form of reports or other data visualizations).

I think the interesting thing to note here is that these two technologies are *so* similar.  They depend on tasks, create flows, etc., but are not really integrated in any real way.  Is one a sub-set of the other?  How do we think about these two different--yet very similar--technologies.  Do they fit within the same developer toolkit or what?

As a solution architect you have to be aware of these things.

Interesting related reading and reference:
http://www.developer.com/db/article.php/3780676/Building-a-Windows-Workflow-SQL-Server-Integration-Services-Activity.htm

The two faces of business intelligence

I'm most interested in capturing net new data sets, things that have never been captured before.  It's my claim that most of the world is this way: not captured, free.  But there are many examples, of course, of data and systems that we have been able to capture and visualize: banking, weather, etc.

Business intelligence solutions typically concern themselves with the consolidation and mining of *existing* data sets.  Analyzing and viewing existing data in new and interesting ways is really interesting but it is not--by any means--the end of the business intelligence story!!!

I believe that business intelligence is actually two disciplines: 1) data capture (instrumentation) and 2) reporting.  The reporting side of things is the traditional view of BI but I am certain that *no* BI firm can compete or survive without understanding the data capture side of things.  I wonder how many realize this!

Instrumenting and wiring up business processes, tools and "new things" *for the first time* is tricky business.  It requires a special skill set and a creative way of viewing the world: as incomplete.

How much do you care about how the product LOOKS?

This varies—I think significantly—between people. I'm more of a pragmatic / practical person when it comes to computer technology; just make it work…but when it comes to cars, snowboards, stereos, etc…things that are about *me* then I also want them to look cool. But I think software is different. Don't you?

Tuesday, December 07, 2010

The project database that you want

I wrote yesterday about Project Metadata. There should be more of it. I had a conversation with a friend last night about the need for a tool that supports the "quoting" process for projects. I agree. But there are *so many* other examples of tools that projects need. It's endless, really. From the perspective of MARKETING projects, though, there really are a finite set of things that have to be called out. Many companies have different approaches to this and I would argue they do a completely incomplete job of this and leave customers wondering, waiting, confused.

Let's move past this and get to the age of MATURE project management practices. I would argue that we can't do this without leadership in marketing (it can't be grass-roots / bottom up. Or can it?).

I propose the following schema to be created and supported so we can have an analyzable cube / database of projects for our industries, people, technologies, etc. Having clear insight into these aspects of projects is *the thing* we need in my opinion. LinkedIn just isn't doing it.

The projects should also list:

The applications for such a database are many-fold: marketing, recruiting, business intelligence, process improvement, knowledge sharing, community.

Let's get this started today.

Monday, December 06, 2010

Store and share more project metadata

Many professional services companies list their clients and projects on their website for marketing purposes. For example:

  • Painless Programming: http://www.painlessprogramming.com/samples . Ben does a good job with classifying projects by Languages, Frameworks, Techniques, Servers, and Operating Systems. This is a very IT/technology-centered view and doesn't really get at business problems, objectives or similar.
  • Extended Results: http://www.extendedresults.com/portfolio/default.aspx. They classify their projects by category (SharePoint, Scorecard, Reporting, Custom Dev, Data Warehousing) but not by business process / need either.
  • Cap Gemini: http://www.capgemini.com/. Classified by Industry and Business Need…now we're getting somewhere.

What about bridging the gap between the worlds of business and technology. Let's be somewhere in between. I'd classify projects by:

  • Geo Locations – Show where you did the work and/or what regions were impacted. Display this on a navigable map.
  • Links – Tie your marketing site into Delicious.com, SharePoint or similar and list links that the project team used as references. This is useful for the community and for knowledge management.
  • People - Who worked on the project? Keep resumes…
  • APQC Processes – See the APQC Process Classification Framework. Use this to describe what type of work you did. Describe which APQC business processes were impacted by the change from the project. Show what you did by highlighting parts of this graphic.
    • KPIs – Which Key Performance Indicators did you impact / affect?
  • Technologies - Which technologies (and versions) were used on the project? Use this to keep track of what technology experience you have specifically.
  • Resource Types / Roles - Which roles were critical to achieving the outcomes? BAs, PMs, Developers, Testers? Also provide a general description of the roles that you typically use for each project.

Give your customers a new language


One of the biggest parts of being a consultant is getting your assumptions out there, in front of your customers. This could be in the form of a conversation, presentation, or the product itself.

You want your customers driving your development and telling you what they need and want. A big part of this is what I call "exposing the language" to them.

As a developer or product owner, you need tell the market what you are doing (and maybe why). Ie you want to be as *transparent* as you can possibly be.

On one of my current projects I am making a pricing model for the customer and making sure that *he* (and not me) owns the language and improving it. I am just doing my job as a "lowly developer". Know your role. The language is not mine, I am just implementing it.

The more you can engage your audience and push back the assumptions you have so *they* control the outcome, the more free you are to create in an open space.

Tuesday, November 30, 2010

Clearly know the distinction between what the business process will do and what the software will do

In the work that I do I have to clearly define the difference between what the business process will do (customers, workers, users, etc.) and what the software itself will do. In addition, I have to know what each of the "tiers" (database, server, front end, etc.) of software will do. In all, my job is to clearly define an "activity system" and what all of the actors in that activity system are going to do (and why).

A good tool in this that I learned for Agile Coach Rod Claar is to write your use cases / scenarios / stories in the following format:

<Actor> can <Function> so that <Business Value>.

This is an important pattern for people at all levels of the organization to understand.

The Actor is the person or system or entity that is doing something; your system will have a finite amount of these; the business analyst will have to determine what roles the system tiers will play and what the business people and users will play, it's a big undertaking.

The Function is the thing that the role is going to do. It should be written as an activity.

The Business Value is the *reason / justification* for the actor to do the function. It is the thing that *should* allow people to assign priority and determine what's next. It is the context and is very important.

Aside from these three process characteristics of actor, function, and business value, there are other parameters such as:

  • Inputs
  • Outputs
  • Time
  • Success criteria
  • Failure modes

There are many parts and aspects of the system that we have to take into account when designing one.

Saturday, November 27, 2010

My current projects

I've been staying really busy lately with quite a few side projects. Right now I have three side projects: my consulting company brand/web site/ strategy, my Visualize Everything idea, and a project I'm doing with some guys called SnoVision.

My consulting company, EfficiTrends' web site is www.efficitrends.com. I worked with a writer and a web designer about two years ago to put the site up. It was built with old (classic ASP) technology and the way the guy built the CSS structure confused me; it's way too complicated and not very reusable. But it served its basic purpose of being something I could point people to. What I've been doing on that site now is building a SQL Server back end and porting the site over to ASP.NET MVC v3.0 and I am using the Razor View Engine. I have been really happy with the progress and like what I've done. I'm using Scott Hanselman's "BIN deploy" method to get my site published to my host, Re-Invent.com. My goal for the site is to make it more dynamic and to list my past and current projects within it. I would like the site to be a comprehensive view of my capabilities as a web developer and I would also like to use it as the hub of my consulting work. There's a lot of work to do here and I'm having fun with it.

My second big project right now is VisualizeEverything.com, my online printing/t-shirt creation web site that is based on popular or community-contributed phrases. I've been working with an intern, Raheleh, on the site and she has been a great help. The one trick with that is I have to get the domain name bound to my home server and I also want to hook up web security.

My third project is helping a team of guys with their Feral Motion project. Feral Motion and their project SnoVision is a technology to automatically record and upload video of action sports athletes as they use "features" (jumps, etc. in a skate park or mountain terrain park). The technology is really cool. I've written some good code that uploads videos to Viddler and stores metadata in a MySQL database.

So I've been quite busy, FYI!

Monday, November 15, 2010

Make and break the model

A key part of being an entrepreneur, software engineer, or scientist is to make and break "models".

Models are belief systems or hypotheses or lenses or ways by which we see / view the world. They're almost always wrong but we have to operate under them.

Making models is what we do when you define a problem, explain a context or situation and define a plan to test it.

Breaking (or proving) models is the goal. We do this when we finally get to test our assumptions and theories. By testing models we learn if we are right or wrong.


 

Tuesday, November 09, 2010

Six Sigma “Define > Measure” is “Instrument > Collect” in business intelligence (BI) and software

In order for systems to measure anything or "throw off data", they must be instrumented to do so. This is true for cars, business processes, humans, anything.

There can be external measurement devices that observe the object but this is not the best. It is better for things to be instrumented and throw off their own data to the observer so the observation step can happen as part of the analysis.

Next time you build a system think about the needs for instrumentation, then you'll be more prepared to Collect, Analyze, Improve, and Control the system.

Wednesday, November 03, 2010

The customer is the person with whom you must be Agile

I learned this in pretty major spades on my current project. I was so *focused and busy* on producing the thing that I thought the customer wanted, that I stopped listening to her.

I never came up for air; I never had time to!

I was so sure that what I was producing was the RIGHT thing, that I ended up being WRONG.

I adopted a very "waterfall" mentality on this project because I was under the gun, behind, etc. But from the beginning. This is no way to run a project.

Never start a project without a signed SOW.

The ½ Project, ½ Consulting Rule

Don't plan a project that's only dev work or only consulting and no product.

In project work, there are two primary ways to derive value and succeed:

  1. The work product itself and
  2. The relationship

Both matter a great deal, and perhaps equally so…

Always make sure that you balance these two things: save time in the project for consulting and managing the customer's changes, expectations, requests, and questions. In this way, be Agile.

In other words, projects are neither Agile, nor waterfall, they have to be both.

Monday, November 01, 2010

Sculpting the model

Software development of any kind is like creating a clay sculpture:

We start with our understanding of the problem and solution domain (the clay and base) and then we start making stuff. We add, update, and remove until we're happy. Working with 3D forms is much the same as coding.

There are two models at any given time: the ideal mental model in the developer's head and the physical model that has been coded into the software product.

The developer identifies solvable differences between these two models and either A) modifies the code structure so it more closely resembles his ideal mental model or B) changes his mental model (expectations) about how closely the product must conform to his standards.

In other words, software development is subjective, but the judgment of the end product (art) is in the eye of the beholder.

Analyze the process or the data?

I always start with the process because that's what's most apparent and important to me. Things are broken, things are wrong, A isn't talking to B…stuff like that…

All of this context in my opinion matters a great deal and it's what business is all about! We need to change and improve this stuff, I think!! If we understand this part well, then we can create good, high-functioning supply chains, which I think is the goal.

Analyzing and improving data sucks.

Create a common language between the business and the doers – A call for Agile Scrum

Agile-Scrum tries to do this by breaking down work into stories and then further down into tasks. Each task has an estimated time and the aggregate (SUM) of the tasks is the time for the overall story.

So if someone asks you, "Can you do this by tomorrow?" you should figure out what the stories are and then the tasks. If the work is greater than 24 hours then there's no way.

If the business person can get bought into what the tasks are, or if you have a good scrum master that tracks what the tasks are and the estimated time for each and keeps that data up to date, then communications will be good.

If none of these things are true, you're going to be under water.

Sunday, October 31, 2010

Sometimes you gotta call for support

I got over my technical head on a work problem today. I need to make this (what I think to be) really hard report for the customer. It uses SQL processes and whatnot that I've never encountered, so I'm basically quitting until I can get a second set of eyes.

I'm not going to keep billing for work on something that's beyond me, so I stopped.

I emailed my boss and told her that I was doing this and listed about four or five others in the company who could help me with and/or do the task.

I think this is a good thing for me to do.

Separate the concerns

It's critical to understand how to do this in our lives. We should never "pool" our concerns, we should *separate* them. We should not panic. We should parse our problems out and make them clear, tangible, and distinct.

Good, sustainable solutions come from this mental process.

You're lucky if you have a knack for this, you're probably cursed if you don't.

When a five minute phone call saves our butt

This is the reason that good consultants and a healthy personal social network are essential.

Without our advisors and experts, we're nowhere. We can read and dig in and shoot in the dark, but sometimes we need consultants and experts to *help us solve our problems*; we have to escalate.

The reason I emphasized the "help us solve our problems" text above is that this is absolutely critical. We have to know that we have problems. We have to know that we have to solve them and we need to know that others can help us do this and that when the answer is given that we are able to apply the answer ourselves!

You don’t have to code it but you do have to pseudo-code it

You're nowhere unless you understand how the software either works or needs to work. This is the gap, generally speaking.

If you don't understand how the software works now, you won't be able to bridge the gap between the software devs and the business.

If you don't know how the business works now, you don't know what you're doing or why. You're about to get fired; you're dead weight.

Somewhere between these two worlds are people with the skills to bridge that gap; to bring needs into reality and to bring technical opportunities and problems into the light of day.

These people are the real leaders in our organizations; not people who take one side or the other but get both intimately.

The “Business Intelligence Analyst” role

Let's create and train more people to do this!!!!!!

This role understands "the process" of interviewing business customers and creating software.

They can analyze people, data, and processes and create workflows that work, be they on the business or data/software side.

They are high-level thinkers that are senior software architects and analysts that get down to the details of how to make the end solution, yet they get the info from the business (and from their consultant team). They are the glue in the middle.

They know the steps that will have to be made to get to the end of the engagement successfully.

The cost of not having the right consultants is the highest cost of all

Bringing a new resource into a project is expense but sometimes necessary. You might be stuck, you might think your solution will not be good unless you get the proper advice.

The value of a good consultant is very high.

My consulting skill is in Microsoft technologies and enterprise workflow. I can design complex, end-to-end systems that make big differences to businesses. But I, too, need my own consultants. I am not a one-man-band. I need help. I get stuck. I don't know certain things and need experts.

Building your team of experts and consultants is critical. The more challenging your work and scope, the more you'll need good consultants. You might want to hire these people, but you definitely need them. And they're going to be expensive. The good ones will win you REAL BUSINESS VALUE NOW and their cost is worth it in spades.

Saturday, October 30, 2010

Just complete the f**ing scenario, already!!

The goal in most projects is to get feedback as soon as possible, meaning time is of the essence. People don't have time to sit around and wait for you; they'll get bored.

So, when you're faced with this reality, working by yourself, don't get mired in detail and "crap" that takes a long time to complete making something perfect. Rather, just finish the scenario, dammit!!

If you're not prepared to do "awesome" work, that's okay. Do your best.These customers will understand, support you and you'll be able to make another (better) product next time.

Don't worry about your demos sucking, their just demos and chances to meet people where you're at.

Friday, October 29, 2010

Are you pair-programming or double-billing?

Hopefully you're doing both and everyone knows about it.

Everyone should know that your output is going to be of higher quality when there are a second set of eyes.

Everyone should know that devs can "hang out" and help each other while also multi-tasking and doing other things.

If everyone knows about these things, then you have a good company and a good customer and all is good. If people question any part of this, all is hell.

Scrum doesn’t fully work without the Scrum Master

You can be an agile team, follow the processes and practices, but if there isn't someone *other than* the dev lead to do the planning and communicating, your project will fail.

One person cannot do everything. They cannot be both the developer, team lead, project manager, business analyst, and scrum master. It just doesn't work. There are too many hats, too many roles, conflicting priorities.

The Scrum Master (or someone other than the people on the hook for deliver and estimates) has to watch the budget and hours and estimates, etc.

Without this person the project and team will fail.