Thursday, December 15, 2011

3 states of work: scheduled, waiting, assigned to me

There are three "states" of work: scheduled, waiting, and  assigned to me.

'Scheduled' (GREEN) is stuff that has an almost 100% probability of occurring like meetings and scheduled appointments.  You SHOULDN'T have to act unless things don't go as planned.

'Waiting' (YELLOW) is stuff for which you are waiting for a response or answer from someone on something; you have requested something but there is no commitment or response yet.  You MIGHT need to follow up to make sure that action is taken.

'Assigned to me' (RED) are the tasks that you own, that you need to do, where you are/might be blocking; they are your queue or backlog.  You WILL need to act to make things go.

Wednesday, December 14, 2011

4 key things a project manager must do

According to my way of thinking, there are four key things that a good project manager must do:
  1. Clearly define work.  Defining what is owed by when.
  2. Assign work.  Defining who owes what.
  3. Manage risk in the supply chain.  Knowing what you'll do if you do/don't get what you're waiting for. 
  4. Lead.  Using your own time efficiently and effectively to unblock and dis-impede the project (lead).  
Clearly defining work is a key element of being a project manager.  What this means is that you are crystal clear on what needs to be done by when.  The project manager must know the "Definition of Done" and what is good enough from a quality perspective.  In order to do this, the project manager must speak with both the customers and the suppliers of any given work item and very clearly define what's needed.  Before the work is produced, there should be a commitment for each item on the statement of work.

Assigning work is a very important part of being a good manager as well.  Assigning the work is all about getting good commitments and trusting that the resources you have doing the things are quality and committed and for real.

Managing risk in the supply chain is a hard part of the project manager's job.  The project manager has to have mitigation plans for what they will / won't do if they do / don't get what they're expecting.  In this way, a big part of the job is to wait for things to happen but when they do or don't happen be very prepared to act upon the failure.

Leading is of course an overall critical skill that the PM must have.  This takes many forms but in this context I'm using it primarily to mean that you are a good professional and know how to use your time and others effectively.  You are efficient and effective at getting the things done that you have to do (the steps mentioned above) and making sure that the whole thing is tracking.

There's a lot to being a project manager, but maybe thinking about it in these four simple "competency areas" will help you figure out where you should focus your efforts at the moment!!

Sunday, December 11, 2011

Wishing for a real consulting firm

Hey, what's going on in there?!
Change is afoot.  I started a six-month contract at Microsoft in August as a Sr. Program Manager in Xbox LIVE business PMO.  It has been a ton of fun.  But now that the holiday season is upon us and our group is re-organizing, I'm starting to feel a bit uneasy.

Influence and delivery happens at very deep layers.  I'd like to distinguish between two things: project success and product / company / group / team success.  I *wish* that I could be responsible for team success and I feel that in a way that I am: if I don't have it then I won't have more work.  As far as project success goes, I feel like I am have definitely created that; but there has to be next steps!  I'm trying *my hardest* to help that team succeed but in many ways it is out of my control because there are so many players and stakeholders and such a big internal culture that is hard to tackly / comprehend on my own; it's complex!  If, on the other hand, I had more people on *my* team (from an outside perspective looking in as sales people, consultants, and business development people), I feel like I could have a much better impact and ability to influence sales and long-term strategies.  Someone (and for now it is me!) has to be making these relationships, looking in, and kicking tires.

Getting cut out as the consultant/outsider.  What's happening now that I have delivered the v1 product, is that the group internally is "getting organized" and many plans are happening, some without me.  I'd love to be involved in these discussions but I am frequently cut out and the conversations, which can be kept to the internal folks while they figure out what to do and how to spend their resources.  In the meanwhile, I hang in limbo and try to figure out to the best of my ability what I can do to have an impact, make a difference, make a change, and support this team / group for the long term ie make more money from this opportunity.

Contemplating strategies.  What I need / want is for sustainable income and I see this group as a place to get that but I have to figure out how to better sell and influence; I feel like I need more resources (and probably do).  So I think about it and I wonder: I try to surround myself with other sales people and Sr. Project Manager consultant people who can help me figure out what does *my* strategy need to be to infiltrate this complicated group / company and sell business / win influence.

Wishing I had a team with whom I could strategize / deliver.
On the outside looking in, wondering.  I think that I've been very influential thus far in this project/program and now--based on a lot of my input and contribution--the company is trying to figure out how to use its resources and me, if I'm necessary or not.  It's really interesting to be on the outside looking in but it makes me nervous and makes me want a larger personal team that can help me sell and influence.  I think if I worked for a *real* consulting firm this would come for free...

Tuesday, December 06, 2011

The stuff of technology consulting

As a technical PM, you need to produce several things: the business rules (policies), the communication and sales pitch to the dev team, and the delivery schedule.  Bridging the gap between the business and technology folks is a constant battle.  They don't speak the same languages and they need to.  As the Tech PM or Business Analyst, you have to bridge this gap.  Your tools are Test-Driven Development, Risk Based Testing, Business Process Engineering, Process Modeling, Data Development, and Model Driven Architecture.

Bridge the gap and get paid doing it!

Friday, December 02, 2011

Entrepreneurs, don't forget to have a job

The two things.  There's two things required to be an entrepreneur.  One is to acquire an ability to survive and keep food and jobs on the table (to be practical and focused on the long-term and short-term and your basic needs).  This is probably the fundamental "skill" that is hard for the typical entrepreneur (that they have to cover their bases and can't just go 100% crazy on their ideas).  Beyond skill one is the fun part of skill two, where the sky is the absolute limit for an entrepreneur.  This is the second skill: focus.

The basics.  Survival, as we obviously know, is absolutely key for us all.  Not everyone gets out of here alive!  We can't spend all of our time focusing on our passions, dreams, and ideas if we aren't caring for ourselves, putting food on the table, and doing the basic things that matter to survive, like having a job and some sustainable income source.  Maslow's Hierarchy of Needs tells us that we can't self-actualize if our basic needs (food, cash) aren't met.  This means that the entrepreneur must first be self-aware and focus on meeting these basic needs: get a job, pay the bills, be responsible, etc.  Don't be a bum and don't overly focus on just your passions if you haven't done these basic things.  Learn how to keep jobs, report up to bosses and be a true professional.  Without this you'll never get anywhere and rolling the dice in entrepreneurship is a huge and crazy risk!

The passion.  The second part is the fun and interesting part of entrepreneurship: doing it.  The second part is everything else that has to to with being an entrepreneur: coming up with ideas, sharing with people, building teams, building things, companies, products, plans, etc.  This is seriously the fun and exciting part.  It's all about passion.

So remember entrepreneurs, as my dad always told me, "Don't quit your day job".  Do the basics of having sustainable income and cash and figure out how to integrate total creativity and passion into your life.

Tuesday, November 29, 2011

The project manager is the surgeon of an organization

The PM's in the middle.  The person at the middle of all things (related to their specific initiative(s)) in an organization is the project manager.  Whether it's engineering work, communications, planning, or whatever, the PM is in the middle of it all (related to their objectives).  There are other stakeholders in the project team or organization that have more sway or power than the PM but the good PM always drives, and hopefully does so gracefully and in a relationship- and team-building way given this context of initiative and performance.  The PM knows how to operate on the body that is the organization supporting their initiative.  In this way they are both graceful, powerful, and dangerous; like a surgeon is.

Surgery and PM operations defined.  Google defines surgery as, "The branch of medicine concerned with treatment of injuries or disorders of the body by incision or manipulation, esp. with instruments."  To me, this is metaphorically similar to the actions of a PM (in my words), "The branch of business concerned with the identification and resolution of problems of an organization by direct involvement, action, esp. with tools and frameworks."

Similarities abound.  We can see the many similarities between the surgeon and the PM in that the PM is an operator and a skilled technician, operating on something (the organization and team and instruments to produce a desired outcome).

A balanced and skilled operator.  The PM is not held up on roles or titles, they have a specific mission to deliver a specific result, product, or service, and they are going to do it, by hook or by crook (but gracefully through the team).  The PM's goal is to figure out what work needs to be done from the various stakeholders.  The PM must know when to push and when to pull, when to cut and when to sew.  They lead very stealthily but when they push they push really hard and it's obvious; they can make a very deep impact.  Many people may resist the role of the PM but it is an important one:  The organization would not change as rapidly as is required for it to deliver the desired outcome if it weren't for the PM operator.

Not a tracker.  I'm not referring here to a PM who is a "task tracker" or anything of that nature.  I'm referring to a driving, smart, analytical, senior PM who is all about getting the best results possible on time given his resources and communicating effectively at all levels in between.

Concluding thoughts.  As you can see, there are many similarities to a PM operating on an organization to create a result and a real surgeon operating on a body.  They're deep in the weeds of the operation but can come up to a bird's eye view to understand the context and next courses of action.

Monday, November 28, 2011

Delivering a project as organizational development

Managing projects in enterprises isn't easy.  Someone has to have focus and sometimes focus is very hard to find.  Defining goals and objectives can be easy but getting buy-in from the people that are required to implement the plan is again not always easy or possible.  The project manager is left, then, in a position where he/she must continue to 'plod along' and lead that thing until that thing is real; or give that thing up, or give that thing, successively, to others.

Making forward motion.  In this article I argue that the basic job of the project manager is to delegate and create forward motion.  The project manager needs to promote their project and tweak it as necessary to finish according to the people involved, gracefully.  One goal of a project, therefore, is to do it in such a way that you have a good core team at the end of it, meaning you have freed up resources for your general use and that they support you and you support them (symbiosis).

Deliver to the performance context.  In total, it is my opinion that the project manager must create the project that the stakeholders will accept and will allow him and the team to see another day or another project (move to program-level status).  This means creating a performance context and set of expectations that are beneficial to the performance of the team and business (there is a shared vision).


An example.  I recently did a project for Microsoft Xbox where we enabled a key account management function (AutoRenewal management) on xbox.com for the 15 million users worldwide.  There were a LOT of stakeholders involved with the project and many pieces of leadership (technical, communication, and business measurement) were required to deliver.  We have all now bonded together and have a core team that is 'high functioning', I believe.  What this means to me is that we:

  1. Did it.  (Delivered what we said we would)
  2. Are in control in operation.  (Have a way of measuring and tracking what we did (Business Intelligence dashboard)), and 
  3. Are still together and respect each other.  (Have a high functioning, high communicating team that can communicate effectively and grow as required.)

A simple process for creating high-performing teams.  Creating high functioning teams like this may follow a simple pattern.  That pattern is:

  1. Choose.  Pick a project, any old project
  2. Deliver.  Do a project together with the people who will participate
  3. Finish.  Finish that project and deliver to some larger audience
  4. Improve and Adjust.  Figure out what worked and what didn't in the team and project and how to react.
Concluding thoughts.  Managing projects is fun when they're good.  It's hard and it's fun and it's an adventure.  Choose your's wisely and keep improving.  Get to that place where you have a growing team--both inside the organization and out--that continues to deliver great results into a variety of contexts!



Tuesday, August 30, 2011

Basic schema for tracking a project

I’m managing a project/program right now and am using the following basic structure for communications to the team:

  • Deliverable Name.  What’s the body of work/thing.
  • Sub-Team members.  Who all is working on it.  Be semi-descriptive, “Jim and Mary with Joe”
  • Status color.  Red, yellow, green, N/A.
  • Status notes.  Be clear about the current status of the thing.
  • Active assignments.  The things that people need to do with respect to this item in the near-term.  This should include risk mitigations, escalations and everything.  Everything needs to be work / an action.

In the meeting, we review last week’s list, and update it for this week.  It’s a simple process that seems pretty effective.  As new Deliverables appear, I add them.

You can still be an entrepreneur while working with someone else’s idea

j5gkbspdStarting your own business is really hard.  I should know, I’ve started a few and failed (and still feel like I’m failing on the other ones I’ve started and am working on!):

  • 1994: Tortizza
    • Why started: Dad suggested it was a good idea.  I was 17.
    • Mission: Make pizzas from tortillas, patent the name.
    • Successes: Made some tasty treats, met lawyers
    • Failed because: not interested, didn’t know how to patent.
    • What I learned: That patenting something isn’t a process I want to do.  Expensive, bureaucratic.  I hate bureaucracies (but want to create them!)
  • 1996: The Computer Dude
    • Why started: I wanted to make money during the summer and had computer and marketing skills to offer.
    • Mission: Help people use computers.
    • Successes: Made money, met many interesting people and learned about their computing needs/interests, and environments
    • Failed because: Lost interest.  People are crazy.
    • What I learned: Good customer service and marketing skills.
  • 1999: TheWesternChannel/CollegeUnderground/Bottlefed
    • Why started: Wanted to have an internet business with friends.  The thing we knew most about was our college and we had a strategy of getting a ton of content and expanding.
    • Mission: Make web sites for things we’re passionate about.
    • Successes: Very popular WWU website in 1999-2001, featured in campus and city newspapers.
    • Failed because: Had no real business model.  Geeked out on technology to much.  Wasn’t mature enough.  Got bored of college topics after college.  Needed real income after graduating from school.
    • What I learned: How to make very cool web products and communities.  Databases, systems.
  • 2002: eServices
    • Why started:  Wanted to be able to do work for companies around the area via 1099.
    • Mission: Provide professional services to area firms for high wages (work 1099).
    • Successes: Worked for a former employer for the highest wage to date.
    • Failed because: Didn’t do any marketing.  Got wrapped up in a day-job and went back to school.
    • What I learned: Not much, never really pursued this much.

The following businesses I’ve started and am still (semi-actively) working on:

  • 2006: Visualize Everything/PhatLibs
    • Why started: I love words and word games and technology and this to me is like the perfect blend.
    • Mission: Create an online word game that results in the worlds largest and most relevant database of phrases.
    • Successes: Created product.
    • What I’m learning: Launching requires money and time and energy.
  • 2007: EfficiTrends LLC
    • Why started: Saw many opportunities in the “green” space.  Really liked the idea of doing green things and being in business but socially responsible/saving the planet.
    • Mission: Provide professional services, sell the value of ‘green’ and social responsibility.
    • Successes: Built brand, created web site, did a little marketing.  Have a framework about which I can speak.
    • What I’m learning: Don’t be idealistic, be realistic.  Sell your basic values, not ideals.
  • 2011: AppsJack
    • Why started: Many opportunities in the mobile application development space.  Wanted to create a brand and market position in the space.  Know someone with a great product / process for building apps.
    • Mission: To create custom (mobile) apps for people.  Modern software development.  (And other services via EfficiTrends if necessary).
    • Successes: Created brand, met sales and technology partners, went on sales calls, built paperwork, systems, and legal framework.
    • What I’m learning: Pick the right partners.  Make sure you focus on the overall process and delivery.  Don’t be idealistic (again!).

I guess I have traction from these angles: I’ve done cool things for companies, I’ve been an employee, I’ve driven my salary up to a pretty good level, I’ve gotten grad degrees and a PMP certificate, I’ve joined companies, I’ve volunteered, I’ve built my resume and background, network.

It’d be ideal to me to have my own idea that I’m pursuing but sometimes that’s not in the cards.  Finding partners works both ways.

In order to get some traction given my current situation (employed), I’m going to try to support OTHERS in THEIR businesses.  I already do this as my day job as an employee and consultant, so why not do it also as an entrepreneur?  I don’t have to be the inventor!!! 

By doing so, the benefits are that I get to go further up the food chain (closer to owners), get good experience, have large scope, influence, and responsibility!

Create platforms to get long-term technology adoption

ypy22dzyProducts are nice but as business owners we can’t hyper-focus on single products.  Products have a shelf life.  People get bored and leave.  We should prepare ourselves for this reality.

Designing our products for migration onto a future product is important.  We need to make roadmaps! 

Making things sticky in one context and fluid in another is key. The product designer must be aware how they are going to:

  1. Get the users ON the product and
  2. Get the users OFF of the product and onto the next one

By having this two-sided focus, we can start building successful platforms.

Monday, August 29, 2011

Zucchini pie

To try tomorrow:

Zucchini Pie

2 cups zucchini, unpeeled and sliced thinly into half-moon slices
1 small onion, chopped
1 medium tomato, seeded and chopped
2 large eggs, beaten
1/2 cup biscuit mix
1/4 cup freshly grated Parmesan cheese
Couple tablespoons of fresh chopped parsley
Salt & freshly gound pepper to taste

Prehat oven to 350°
Mix everything together in the above order. Pour mixture into a 9-inch buttered pie pan (I use a Pyrex pan) and bake 30 - 40 minutes until slightly brown. Serve warm.

Friday, August 26, 2011

The method and the methodology

50znbreuA method is nice.  You want it.  It’s an answer to a problem or opportunity.  But it’s not enough.

People seeking to establish *the* method; being the expert/boss/authority in an area must also continuously improve their method at scale and for that reason must think of and create the methodology; the business behind the method.

Merriam Webster defines methodology as “a body of methods, rules, and postulates employed by a discipline”.  And they define a discipline as “a field of study”.

Gaining focus in your field of study is critical, and difficult.  Finding your niche, essential.  But once you’ve done this and you’re really great at something, you have to figure out how to sell and market that thing.  This is the methodology part.

Going from one method of excellence to a set of excellent methods (methodology) requires other personalities and skills.  The entrepreneur or artist must bring to bear others into the context of the business.  Customer inputs are also required.

Going from method to methodology is a lifelong process.

Wednesday, August 24, 2011

Massage the data and the audience

tku3myscPart of many people’s jobs is to work with data.  For some they have to work with a lot of data frequently.  I am one of those people:  I frequently have to get, clean, and shape data to convince people of things.  It’s a big task but it can be really fun and rewarding!

While normalizing data is important, so is preparing the audience for the change and/or presentation that you are about to make.  Make sure that you think an equal amount about the presentation, points, and people as you do about the beaut of the data!

Tuesday, August 23, 2011

Distinguishing between work and risks can be difficult

Risk is a context in which we all live.  It is a reality.  Things we don’t want to have happen could happen, and sometimes do.  We have to plan around these things and work to avoid them.  Much of project work and management is to avoid risks from occurring in fact.

Escalating risks to management is frequently required.  The managers need to be prepared for the things that could possibly occur (the impacts).  People don’t like surprises and by sharing what could happen if risks do happen, you are doing well to cover your butt and prepare people.  (I told you so!!)

As the PM, you need to guide change and make things happen.  You are working your butt off to make the good stuff happen and prevent the bad stuff.  But some risks may be occur and by engaging a steering committee to help you avoid risks or prepare for them if they do occur, you’re doing well. 

It’s impossible to do everything as the PM and by including others—and not necessarily asking for help—but telling them that help *could* be needed, you’re doing the best you can.  At least they were informed and prepared for possible realities.  I told you so!!!

Wednesday, August 17, 2011

Linking to TFS 2010 queries through http://

Sometimes you’ll want to point to a collection of TFS items in the browser.  Here’s how:

  1. Locate the query, right click on it and Send to Outlook:

uozsljeg

2.  Copy the link in Outlook and party on!

tbhlxemf

Linking to the ‘new’ form for Work Items in TFS 2010

A customer asked me to create a link from his web site to allow users to create new TFS work items.  Here’s how:

  1. Find your TFS web client.
  2. Create a new item.

gmoxez1i

3.  Fill out the form as you’d like it.

image

4.  Click the ‘Copy Template URL’ button.

image

5.  Have fun!

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