Survive and thrive in our competitive, connected business and technology world.
Friday, August 12, 2011
The business architect role
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
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
- 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
Tuesday, July 26, 2011
Kick Major Booty: The 10 commandments of being a technology and business change agent/leader
- 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!
- 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.
- 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?
- Test all assumptions ASAP. Never assume anything but because you will have to, always build toward the things that will rapidly test your assumptions.
- 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.
- 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.
- 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.
- 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.
- 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!
- 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
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
- 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)
Use companies as incubation hosts - deliver software through professional services projects
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:
- Have good ideas and be creative. Think of things differently and as mobile, connected software services. Talk to your friends, network, brainstorm.
- Understand the relationship of the new service to the existing business.
- 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!)
- Use these organizations to (co-?)finance your operations.
- Deliver.
- Consider sharing in *some* of the future profits with the financier.
- Gain more customers and traction.
- Be the entrepreneur, driver, and owner. Make it happen!
Friday, July 22, 2011
Sell two things: CRM and (Mobile) Apps
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 |
- The content management system.
- The API
- The App
- The user as the company's customers
- The user as the company's employees
Tuesday, July 19, 2011
Analyst analyzes, doesn't judge
Monday, July 18, 2011
Target your job search with multiple versions of your resume
- 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.
Sunday, July 10, 2011
Unified Delivery System
![]() |
Unified delivery approach |
- Legal contracts
- Payment
- The delivered work
- Track leads, accounts and opportunities - CRM (SalesForce, Sugar CRM, Sales Force)
- Estimate and track work - Project Management (MS Project)
- Invoice and track accounts receivable - Accounting (QuickBooks)
Saturday, July 09, 2011
The Genius Session
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
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
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
Wednesday, June 22, 2011
The value of mobile
![]() |
The phone: it's in your pocket. The web, it's in the phone. |
- 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.
Thursday, June 02, 2011
3 Ways to Sell Technology
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.
> | + 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
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:
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.
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:
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.
Friday, January 14, 2011
Scrummerfall
Do 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.
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.
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
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
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.
- Technology - SharePoint, XML, ASP.NET MVC, Azure, etc.
- Language - C#, T-SQL, jQuery, etc.
- Business Need - Custom
- Tag - Custom
- Framework - Six Sigma, ITIL, COSO, etc.
- Industry – Automotive, IT, Energy, etc.
- Technique/Method/Pattern - MVC, MVVM, etc.
- Platform - Windows, Unix, Cloud, etc.
- Corporate Offices of Team - Seattle, Boise, India
- Person - Who worked on it
- Role/Function - Project Manager, Product Owner, Business Analyst, Functional Analyst, Developer, Tester, Writer, Designer, etc.
- APQC Business Process - see this page, Develop and Manage Products and Services, Manage Customer Server, Manage IT, etc.
- KPI - Sales, Customer Satisfaction, Employee Retention
- Client Company / Brand - Nordstrom, Sears, Ford, Shell Oil, etc.
- Consulting Organization(s) Involved - Accenture, Deloitte, etc.
The projects should also list:
- A Description of the project
- List of outcomes / benefits
- Rough Size of the project in dollars or people
- URL Links for information produced
- Case Study
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?
- 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:
- The work product itself and
- 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.