Wednesday, October 27, 2010

Life moving

Today I had experience I haven’t felt in a long time; a life soundtrack.

I recently started a new job in downtown Seattle and I am commuting on the 33 bus from the Magnolia neighborhood.  I am on my third week at this job and this commute and for all intensive  purposes both have been uneventful, which I guess is a good thing.

Today I queued up “Those Who Tell the Truth Shall Die, Those Who Tell the Truth Shall Live Forever” on the iPod touch for the commute.  Turns out uneventful events can be brought to life.

It is amazing what an album like that can do to your emotions and thoughts.  I felt connected to people and the city in a way I haven’t felt yet.  Somehow today I noticed things I had obviously overlooked for weeks.  Somehow today I was more reflective than most mornings.

I noticed that a regular rider didn’t get on this morning.  Where was she?  Is she sick?  Did she miss her bus?  Is she taking the day off.  Whatever the reason today she is not following her normal routine.  It’s nice to break the routine.

I noticed a few new folks on the bus.  They looked every bit as uncomfortable as I felt my first few rides.  The trek down the bus aisle searching for the optimal place to sit.  I felt like I should say something, help direct them.  I had an advantage after all.  I had been on the bus for several stops by now and knew the layout.  I felt like a voyeur watching them experience a mini panic attack in the few seconds it took them to find their place.

As we crossed over the Magnolia bridge into the city I saw a new perspective of the city and neighborhood that I live in.  I don’t know all the history but I could feel the intermingling of classes and industry all bottled up in the area.  I read yesterday that this is one of the proposed locations for a tent-city for the city’s homeless.  What does that mean for the area?  How many life phases has this area gone through?  How do they feel about this?  How do I feel about it? 

Track 4 (“Have You Passed Through This Night?”) kicked in as we made our way past the Seattle Center, through Belltown and eventually downtown.  I noticed people’s faces and expressions as they flowed in and out of my commute.  The smiles from the mass of folks entering once we hit the free zone, still wearing them as they exited before my exit.  Where are they going?  What does today or any day have in store for them?  I feel the smile mask life’s pain and drudgery.  It’s amazing how similar yet different our worlds can seem.

There was a shooting in downtown Seattle yesterday.  How is that going to affect this area, this city?  In the end are we all just trying to live another day and avoid the evil? 

I love that I felt connected to this world today.  It felt lonely, scared, evil, connected and hopeful all in one commute and half of an amazing EP.  I can choose to be a passenger or participant in this world.  I wonder what tomorrow will bring.

This great evil – where’s it come from?
How’d it steal into the world?
What seed, what root did it grow from?
Who’s doing this?
Who’s killing us, robbing us of life and light?
Mocking us with the sight of what we might of known?
Does our ruin benefit the earth, aid the crass to grow and the sun to shine?
Is this darkness in you, too?
Have you passed through this night?

- Explosions in the sky

Friday, July 9, 2010

Thoughts on SalesForce.com’s agile adoption

Here is a great article and presentation on how SalesForce.com adopted agile development practices COMPANY WIDE.

Based on my experience with Agile, after reading the article, SalesForce.com “gets it.”  It is a mind-set change of massive proportions.  They point out that the key is to understand and remain true to CORE VALUES.

I like that from their presentation, they talk a lot about scrum, but the text on slide 52 show that they understand core agile principles… don’t be a slave to a single process and methodology.  Do more of what works and less of what doesn’t… FOR YOUR ORGANIZATION:

ADM is a modified Scrum/XP style of product development that is specific to Salesforce.  It employs Scrum project management framework, adopts certain XP practices and is based on lean principles.

I also like the fact that their executive management team understood the importance and predicament they were in: (From Steve Green)

They had the choice at that time to intensify their project management practices or to go a completely different way.  They decided to go an entirely different way.

With that they understood that in order to be successful it was going to take change and it was going to take a big investment in their PEOPLE:

Distributed Ken Schwaber’s Agile book

Developed 2-hour Agile overview

Sent 30 ScrumMasters to ScrumMaster Certification

Sent 35 Product Managers to Product Owner Certification

They also talk about the importance of bring in outside coaching to help.  It is a big change and will take investment, commitment… but if you notice their timeline for introducing the change was relatively short.  Think Big, Start Small and Go Fast.

They also talk about failing many times and taking risks and experimenting… in order to succeed.  Kind of reminded me of this:

 

 

 

 

 

 

 

 

If I were ORACLE, SAP or another big ERP vendor I would be scared.  If SalesForce.com continues down this track they will soon be talking about continuous delivery and will be (probably already are) light years ahead of the hosted ERP game.

Thursday, July 1, 2010

Thoughts on Solitude and Leadership – the article

First let me say, this is my first post in a long time.  I guess I just needed something to inspire me.

Here is a link to a must-read article: Solitude and Leadership by William Deresiewicz.  It is a long article so if you don’t have time to read it now wait.  I recommend setting aside 20 minutes and plan to read it without distraction.

First, not only did it inspire me to write this, it re-ignited a fire in me.  The way he weaves in the literature of “Heart of Darkness” is amazing.  I forgot what it was like to read beautiful literature for fun.  The last 10 or so books I have read have had a technology slant.  That ends tonight.  Inspiration for what I do can be found anywhere.

I’m not going to do the article justice by writing a review of it.  I simply want to share a few quotes and thoughts from the article that really stand out for me:

“I tell you this to forewarn you, because I promise you that you will meet these people and you will find yourself in environments where what is rewarded above all is conformity.  I tell you so you can decide to be a different kind of leader.”

- In this part of the article, he is describing a bureaucracy and that the way we, as a nation, have built leaders for bureaucracies is by following a routine plan.  I love his description of this persona.  I like his idea is that we have to learn to think. 

“Multitasking, in short, is not only not thinking, it impairs your ability to think.”

- This is the second part of the article where he talks about how to NOT be a thinker and therefore not be a leader.  I couldn’t agree more with the multitasking concept.  The more I try to fit into any given 15 minute slot, the less I get done… not only the less I get done, but the quality radically diminishes too.  I saw a lecture on “Queuing Theory” as applied to software developers and teams.  It was a very common sense way of looking at work load as a through-put and development.  The more you have queued and the more you try to push through beyond what an individual / team has capacity for, the more you slow things down.  People are not multi-taskers.  That is a farce.  They are context-switchers.  Want to see how that affects things first hand?  Fire up about 30 IE browser windows, 30 excel documents, 30 word documents, outlook, communicator, onenote and another 30 programs of your fancy and try to write an email in under 30 seconds.

The part that I would like to debate will have to be done at a later date.  He is pretty down on twitter, facebook and tools like that.  For his point on distracting, yes, I agree with him there that they “can” be distracting if used incorrectly.  What I want to point out is the value of those tools that he is missing.  These tools can provide you with an abundance of information that you otherwise had no way of receiving.  Granted, it’s just information.  It’s up to you to process it and turn that into knowledge.  Heck the only reason I saw this article was from a re-tweet and it is inspiring me to head out after work tonight to pick up “Heart of Darkness.”

It might sound a little disjointed; Leadership, Solitude, Bureaucracy, Twitter, Multi-tasking… heck he even talks about politics and wars.  I assure you it is one of the best, well thought out articles I’ve read.  I would have loved to have been present for the speech.  Give it a read.  Let me know what you *THINK*.

Friday, January 15, 2010

Need to Avoid ASP.Net web.config Inheritance?

I ran across a situation yesterday where ASP.Net web.config inheritance bit me in a way that wasn’t pleasurable.  Here is my situation.
I have 2 ASP.Net web applications on a single IIS web site, 1 ASP.Net web app and 1 WCF web services.  For example:
IIS Setting Virtual Path Comments
www.MyWepApp.com \MyWebApp This is my 2.0 ASP.Net web application
www.MyWebApp.Com\MyServices\ \MyWebApp\MyServices This is my 3.5 WCF web services

As you can see, I have a hierarchy going on where “MyServices” is an IIS web application under the IIS web site (also an IIS web app) “MyWebApp” and “MyServices” is a sub-directory under “MyWebApp.”  Since we have a web application at the IIS web site root (“MyWebApp”) and that site has a web.config, ASP.Net inheritance kicks in for any web applications that are “children” to “MyWebApp.”
So the error message I was getting was that I already had a <sectionGroup> defined for “System.Web.WebExtensions" when I tried to invoke a web service under “MyServices.”  Sure enough, If I looked at both web.config’s the <configSections> were duplicated.  After some searching I found you can do two things to avoid these conflicts.  (1) Make sure the <confiSections> point to the same assembly versions and (2) add a <location> element to your root web.config and set it to not allow child inheritance.
So let’s look at (1) – Making sure the <configSections> match.  Here is the config section from the web app:
<configSections>
<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" allowDefinition="MachineToApplication"/>
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" allowDefinition="Everywhere"/>
<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" allowDefinition="MachineToApplication"/>
<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" allowDefinition="MachineToApplication"/>
</sectionGroup>
</sectionGroup>
</sectionGroup>
</configSections>

Here is the section from my web services:
<configSections>
<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
</sectionGroup>
</sectionGroup>
</sectionGroup>
</configSections>

Notice the differences in the Version numbers of the assemblies.  The Web app had references to the 1.0 assemblies and the web services had references to the 3.5 assemblies.  Because of ASP.Net inheritance, whenever I tried to consume a web service it tried to “re-write” the same config sections because they have the same name but different values.  Updating the <configSection> of the web app to match the web services (all pointing to the 3.5 assemblies allowed me to work.  This is because the <configSections> that have the same name in both web.configs now have the same value.

For (2) adding the <location> element to the root web.config here is the line I added:

</configSections>
<location inheritInChildApplications="false">
<system.web>

There are a couple of things to note here.  (1) the <location> element must be after the <configSections> and before the <system.web>  If you have <appSettings> or any thing else those must also be outside the <location> element.

(2) the “inheritInChildApplications” attribute is not defined in the asp.net web.config schema which is why it has a red underline.  That is ok.  Apparently Microsoft added this to the asp.net engine but not to the schema.  Whatever it works.

(3) because of note (1) and the fact that <location> wraps the <system.web> section, all other sections are using asp.net inheritance, which is why we have to deal with (1) and the same version of the <sectionGroups> assemblies anyhow.

Thursday, January 14, 2010

Expertise Persona Exercise

I’m in a codemash session with Mary Poppendieck on Competency and Leadership and we are doing an exercise on creating a persona on how your company hires and thinks of expertise. The exercise is this. Create a persona for a new hire coming into your group / company. Here are the facts:

  • Person is 1 year out of college
  • Person has a technical degree and is hired into a technical role (tester, developer, etc)

Describe how the following is accomplished for this person:

  • How does this person get their work assignments and from who?
  • How does this person improve their competency in the position they were hired for?
  • Who gives this person feedback on their performance and competency and how often?
  • How does this person learn about the “customer” they ultimately serve?

The point of the exercise is to think about how you and your group think about competency. Do you value the fact that people should be skilled in technical positions and how concerned are you about continual improvement for that skill? How does feedback help? How often should feedback occur? How do you value mentorship and are the “right” people giving feedback? Meaning, do you get feedback from someone who doesn’t have the technical background to perform the job? If so, how does that individual know what is wrong / right and ultimately grow in that skill?

It was a very interesting exercise given the wide range of experience in the audience. I’m still in the session and still processing it but one thing I know for sure, netflix sure sounds like a cool place to work. :)

Don’t be a tool

Values lead to practices that determine tools.

VALUES –> PRACTICES –> TOOLS

So I’m sitting in the first pre-compiler session at CodeMash 2010.  I’m actually late to it (surprise) but the session is End-To-End Coaching Software Developer teams.  The first thing I see is the following phrase:

VALUES lead to PRACTICES that DETERMINE tools.

I couldn’t agree more.

The presenter talked about how it is so common in our industry for it to work in the exact opposite manner.  How often do we see a vendor SELL a tool, a dev shop buys the tool and then what happens.  A GUIDANCE team is formed on HOW BEST TO USE A TOOL.  So in this paradigm, the shop follows this pattern:

TOOLS DICTATE GUIDEANCE that management need to ENFORCE best practices.

What happens to VALUES in that model?  What happens is that VALUES are not even thought of.  There isn’t room for VALUES in that model.

So what if one of your VALUES is simplicity?  It doesn’t matter because the TOOL dictates whatever it wants, regardless of complexity.

The presenter talked about how this is a detriment in terms of money to the company.  I can see that.  VALUES can lead to practices to save money and achieve great quality.  All this without the letting a tool dictate the exact opposite.

A fresh start

Well, I started my blog about 5 months ago with all the best intentions and probably how most blogs end up… it didn’t last.  I created 2 posts and just stopped.

Now to be fair, I’m a regular blogger inside of my company’s internal blog infrastructure, I just never know whether people outside my company’s walls will care about any of this.  I guess I should wonder if people inside of my company’s walls care too…

At any rate, here I am again, wanting to give it another go.  I’m attending the CodeMash 2010 conference and I’m feeling inspired again.  And besides, I secretly made a new year’s resolution to be more active in the software development community at large and part of that commitment is to blog more.  (Yes, I realize that this is almost as common as a new year’s resolution to loose weight but what are you going to do… I made one of those too. :)

So my fresh start will take place in the form of using blogger.  I realized that hosting my own blog site was crazy and wanted to use one of the services available.  I have my domain switched over, the pre-compiler day for CodeMash 2010 has come to an end and I’m ready to share my musings with the world.  I hope you enjoy.

Thanks -- Ed