CodeBetter.Com
CodeBetter.Com
RSS 2.0 via Feedburner
           Do you Twitter? Follow us @CodeBetter

Jeffrey Palermo [MVP]

Software management consultant and CTO, Headspring Systems

September 2007 - Posts

  • Does the Single Responsibility Principle still apply in SOA? . . . YES!

    In reading this blog post:

    http://davidpallmann.spaces.live.com/blog/cns%21E95EF9DC3FDB978E%21257.entry

    David asserts that a service contract should have a theme, and all the operations should fit in with the theme.  I couldn't agree more, and it sounds remarkably like long-standing guidance found in the OO world. 

    To summarize, SRP, or the Single Responsibility Principle:

    . . . every object should have a single responsibility, and that all its services should be narrowly aligned with that responsibility

    Service Oriented Architecture isn't a wholesale shift from OO, but it's a compliment that focuses on system-to-system interaction instead of object-to-object interaction, and the SRP holds true with this focus as well.

    In software, we create units (whether they be systems or objects), and each unit does something over, and over, and over, and over.  In factories (think Ford), each unit (person) on the assembly line does something over, and over, and over.  Like Tom DeMarco, Ford found that the whole factory functioned better when every unit(object or person) had a single responsibility and performed that responsibility well.  So now, with SOA, each service should have a single responsibility and perform that responsibility well.

    To expand this thought, perhaps the SRP can be applied to any situation where the tasks are known ahead of time and repeated exactly the same over, and over, and over.

    Question to readers:  Are there situation in creating OO software (that might function within an SOA) where SRP does not or should not apply?

  • New feed feature: subscribe via email

    This feature is new for me, at least.  I'm not sure how long Feedburner has had it. 

    If you really don't like RSS readers, you can subscribe to a Feedburner feed via email, and you'll receive an email that includes posts from the previous day.

    You can subscribe to my blog's email feed here: http://www.feedburner.com/fb/a/emailverifySubmit?feedId=1195861&loc=en_US

  • Subversion presentation available on GoogleCode

    I've shared a presentation on source code with Subversion on my GoogleCode.  It covers how to use SVN for a project as well as recommendations for setting up the repository, tagging, and branching.

    You can find it here:

    svn co http://palermo.googlecode.com/svn/subversiondemo svndemo-trunk

    Or if you just want the PPT, http://palermo.googlecode.com/svn/subversiondemo/trunk/Source%20Control%20fundamentals%20with%20Subversion.ppt

  • Demo on automating your build with NAnt and CCNet

    I've prepared a presentation and demo of automating a build with NAnt and CCNet.  It uses Subversion for the trunk, and all you have to do is checkout the trunk and run the build.  You can check it out anonymously from the Google Code Subversion repository.

    In order for this to work,

    checkout http://palermo.googlecode.com/svn/automatedbuilddemo/trunk
    svn checkout http://palermo.googlecode.com/svn/automatedbuilddemo/trunk demo-trunk

    After getting the trunk, you'll want to run "build.bat" from the command line.  Here are the dependencies:

    • .Net 2.0
    • SQL 2005 Express in a named instance "sqlexpress" - which is the default.

    That's it.  All other dependencies are included in the trunk.  This demo demonstrates how to create/update a database during a build, version, compile and test.  The tests include some unit tests and an integration test that test the database whose schema is created during the build.  Compilation is done by delegating to msbuild.exe from NAnt.

    I've also attempted to include CCNet itself in the trunk, but there are still a few issues running CCNet from that location.

  • What are the Alt.Net principles? - my answer

    I'll be attending the AltNetConf.  Convenient for me that it's in Austin, TX.  It's an open space conference, and I consider it the founding conference of a conversation that is "Alt.Net".  I'll be proposing the topic: What are the Alt.Net principles?.

    The definition of Alt.Net isn't defined yet.  It's not even at a point where I can explain what it is and actually have other agree with me.  

    Since I know the guy who originally coined the term, I have some insight into what David meant, but I'm going to propose some principles that, together, should be the definition of Alt.Net.

    First, Alt.Net inherits Agile, and IS Agile.  Therefore:

    • Individuals and interactions over processes and tools
    • Working software over comprehensive documentation
    • Customer collaboration over contract negotiation
    • Responding to change over following a plan 

    Extended principles:

    • Excellence and quality
      In a world of wizard-generated, disposable software (disposed 2 years later by necessity, not choice), Alt.Net focuses us on excellence in the software we create.  While the world may pay for and accept software that lives for 2 years before becoming utterly unmaintainable, we don't accept shoddy work.  We know that we can deliver high quality software faster than others can deliver low quality software, so we accept no less than the highest in quality.  We strive for excellence through solid engineering practices and a high level of software education.  Coincidentally, Extreme Programming helps in this area, but Alt.Net does not specifically _mean_ XP.
    • Alternative Vendors
      A  common theme in many .Net shops is they are "Microsoft" shops.  In other words, if it doesn't come from Microsoft, they won't use it.  This makes no sense.  Microsoft is not a large enough company to be the vendor to the whole world.  .Net is a great platform, and we as a community have chosen the platform and choose to participate in this segment of the industry.  We strongly believe that 3rd party vendors complement the .Net platform in a way that can contribute to excellent working software.  In fact, some 3rd party offerings are superior to Microsoft's offering.  For instance, in a strive for excellence in an e-commerce website, a team may choose a mature O/R Mapper like NHibernate to accelerate team speed and produce a flexible data layer; however, Alt.Net does not _mean_ ORM.  Open source software is a source of excellent 3rd party alternatives built on the .Net platform, and it should be used over Microsoft alternatives when they contribute to excellence; however, Alt.Net does not _mean_ open source.
    • Joy in our work
      We know that we will produce better software if a team is motivated and morale is high; therefore, we use libraries, tools, and practices that add joy to the working environment.  We abandon or correct libraries, tools, and practices that make it a drag to work on the software.  For instance, many find that Visual Studio is a bit slow to work with and that adding Resharper to the IDE adds a high level of joy while working with .Net code; however, Alt.Net does not _mean_ Resharper.
    • Knowledge
      We know that we will never know everything there is to know.  We strive for a greater understanding of software through studying successes and failures of the past as well as the present.  We educate ourselves through many sources in order to bring the most value to our clients.  We keep up with other platforms, such as Java and Ruby, so that we can apply their good ideas to .Net development and increase the quality of our .Net software.  The technology is always changing, but the knowledge accumulates.  We know that the knowledge applies no matter how the technology changes.  With knowledge comes humility because without humility, knowledge would pass us by.


    The above are principles, so they are intentionally abstract.  Below, I'll list some items that are concrete.  These items apply the principles but are more directly applicable:

    • Read more than just MSDN magazine and MS Press.  Authors like Feathers, Fowler, Martin, Evans, etc have a lot to give (Knowledge)
    • Use Resharper.  It makes working with Visual Studio a (Joy).  But if another vendor comes along that does even better than JetBrains, consider switching
    • Use NUnit  over MSTest,  Subversion over TFS SCC,  Infragistics/Telerik over in-the-box controls,  RedGate over in-the-box SQL tools.  Each of these is a better alternative to that which Microsoft provides (Alternative Vendors).  Use NHibernate over hand-rolled stored procedures and especially over DataAdapter/DataSet, but if EntityFramework proves to actually be superior to NHibernate in a meaningful way, consider using it.
    • Use a responsible application architecture.  Don't put everything in Page_Load like you see demonstrated at MSDN Events.  Use knowledge to create an application that can stand the test of time and not be rewritten every 2 years.  Deliver (high quality and excellence). 
    • Automate every repetitive task; builds, tests, deployments, etc - excellence and joy
    The concrete examples could go on and on, and I hope AltNetConf produces a long list.  I'll be interested in having my proposed principles accepted by the community there or revised into something better.  Either way, I'd like to get to a point where there is an accepted definition of Alt.Net.
  • VS 2003 development without going crazy

    I'm doing a little work with a team on a Visual Studio.Net 2003 codebase that includes the goal of upgrading the codebase to .Net 2.0 (at which time it can be developed with VS2008 using "multi-targeting".

    Here are some points I had to recall that make developing with VS2003 not so bad

    • Resharper 2.0 works with VS2003 and make programming a joy.
    • VisualSVN integrates with VS2003 and helps me track what's been modified through TortoiseSVN integration.
    • TortoiseSVN needs to be configured to use "_svn" directories instead of ".svn" directories to work with VS2003 web projects(see below)

    Instead of re-checking out the entire trunk, you can run a shell command to rename all _svn directories to .svn recursively:

    From http://ankhsvn.tigris.org/faq.html#XSLTsection126120121120:

    Rename to _svn
    @ECHO OFF
    FOR /R %%f IN (.svn) DO IF EXIST "%%f" (
    ATTRIB -h "%%f"
    RENAME "%%f" _svn
    )

    Rename to .svn
    @ECHO OFF
    FOR /R %%f IN (_svn) DO IF EXIST "%%f" (
    RENAME "%%f" .svn
    ATTRIB +h "%%~pf\.svn"
    )
  • New RSS feed URL - modify your subscription

    My RSS feed URL has changed.  I'm not using FeedBurner to redirect, track stats, etc.

    Please change your feed URL to:

    http://feeds.feedburner.com/jeffreypalermo

  • My recommended Subversion repository structure

    I would recommend one line of versioning per repository for most cases.  Here is a sample trunk set up with a VS.Net solution.

    root
    - trunk
      - bin
        - nant
        - log4net
      - src
        - project 1
        - project 2
        - mysolution.sln
        - CommonAssemblyInfo.cs (for version number, etc)
      - automatedbuild.build
      - clickToBuild.bat
    - tags
      - 1.0.0.1
      - 1.0.0.2
      - 1.0.0.3
      - 1.0.3.1
      - 1.0.3.2
      - 1.0.0.4
      - 1.0.0.5
    - branches
      - 1.0.0.3-hotfix

  • TechEd 2007 DVD shipment includes podcasts

    As all Tech Ed 2007 attendees know, 3 months after the conference, the sessions appear in the mail on several DVDs.  Last year, I jumped through a few hoops to convert the fragmented sessions files into a single *.wma file that could be played on my music player.  It was a bit frustrating.

    This year, I was pleasantly surprised to find that all sessions on the DVDs come with an extra audio file (*.wma).  This means, I just drop the .wma into my music player with the rest of my podcast queue and listen on my commute, while mowing the lawn, etc.  Good show, Tech Ed committee!

  • Sharepoint is not a good development platform

    What makes a good general-purpose development platform?

    • Easy to install
    • Easy to configure
    • Integrates well with simple tools
    • Easily extended to make simple tools
    • Easy to debug
    • Easy to create test automation
    • All configuration stores easily in source control
    • Others I'm forgetting

    I've heard many times that Sharepoint can be used as a development platform.  Technically, that statement is correct, but there is so much friction involved with it, many get frustrated in the process.  Consider the dependencies:

    • Must run on a server OS, Not XP/Vista, Full Stop

    After that one, I don't see a need to go on.  In a team environment, every developer needs to have a dedicated development environment.  What does that mean?  Everything necessary to build and run the system fits on the developer workstation.  Why not run a server OS on the developer workstation?  Perhaps.  I've done it before, but there is other friction associated with that.  Why not use a server OS VM to run Sharepoint on the box?  Perhaps, but again, more friction.

    A development environment should be a pleasure to work with, and that require minimizing friction.  The harder it is to make a batch file that completely builds, tests, and deploys the system, the harder it is to develop for that platform.

    My purpose for this post isn't to say that "Sharepoint sucks", notice the worst I say is that it's not a good development platform.  For content-management and list-based stores, it's great, but as a development platform, there is plenty to be desired. 

    In the comments below, astute reader clarify that Sharepoint excels as a content management system but not as a general development platform.  I would yield that point.  In fact it makes more sense to me for Microsoft to market the product for that niche and have users singing its praises than for Microsoft to present it as a higher level ASP.Net platform and have users (see comments below) lamenting the pain involved.
     

  • Party with Palermo: DevTeach 2007 edition (Vancouver) - save the date!!!

     I'm throwing a Party with Palermo at DevTeach in Vancouver this November.  Save the date:

    November 26, 2007 (Monday) 

    As a special treat this time, this party is the official DevTeach party.  That's right.  Along with my announcements, if you are registered for DevTeach, you'll be receiving additional information in your inbox from the DevTeach organizers.  The party is on Monday after the pre-con.  This event is not just limited to DevTeach attendees, so if you are in the Vancouver area, come on out and bring your friends.  Watch this blog for more announcements, and in a few weeks, http://www.partywithpalermo.com will come online with a registration page.

  • Two exciting announcements (Baby, and INETA)

    1.  I am now a father.  That's right, Gwyneth Rose Palermo was born on August 28th, 2007.  The name came from the family:  Grandmother: Rose, Mother: Rosemary, Mother-in-law, Gwendolyn.

    She was born 7lbs, and is now over 7lbs, 6oz.  Growing well.  Born with a full head of hair and eyes wide open.  I'm very proud.  I have plenty of pictures published on http://baby.palermo.cc


     

     

    2.  I'm now on the INETA Speakers' Bureau. Most of the .Net user groups in Texas have heard me speak, but now any INETA group can request a presentation.   Because of my recent baby, I'll begin accepting speaking requests starting in December, so if you have a meeting in December you'd like filled with an INETA speaker, you can request me by name when you submit the request on INETA.org.  My favorite topics are Agile engineering practices like TDD, CI, DDD.  I also love to talk about O/R mapping with NHibernate and Software Configuration Management (SCM).

  • AgileAustin kick-off meeting a big success.

    Last night a new user group, AgileAustin kicked off its meeting schedule with a presentation by Jim Van Riper from Troux Technologies.  

    Background on AgileAustin:  AgileAustin was formed by an idea from Kert Peterson and manifested by many others.  The mission of AgileAustin is:

    . . . to promote agile software development concepts such as those set forth in the Agile Manifesto (agilemanifesto.org), to create a public forum for the exchange of practice information, and to create opportunities for the professional development of members.

    The group meets on the 2nd Tuesday of every month at 6pm at the Microsoft office. 

    Mr. Van Riper related how in 9 months Troux restructured its product department to turn a failing product into a wildly successful one.  he relates how Troux adopted Agile as a means to transform the product group.  They overlaid another level over the Agile Manifesto:

    Culture encompassing (Individuals and interactions over processes and tools)
    Vision encompassing (Working software over comprehensive documentation)
    Customer commitment encompassing (Customer collaboration over contract negotiation)
    Embracing failure encompassing (Responding to change over following a plan)

    Mr. Van Riper's goal is to work himself out of a job.  he contends that when there is a healthy culture, people can come and go, and the culture remains.  The culture at Troux had to change from top to bottom.  their Agile transformation affected the CEO all the way down to individual contributors. 

    At Troux, Mr. Van Riper owns the backlog, owns the vision and owns the budget.  By that structure, the process is very streamlined.  The development team owns the software.  They own every aspect of it, and they focus on fast delivery of it.  It's interesting to note that the company only has 14 developers, but they release every 3 months. 

    Mr. Van Riper emphasized "knowing when to stop".  Instead of adding every possible feature, Troux uses market judgement to know when enough is enough to put out a release. 

    As part of the culture change that occurred at Troux, Jim aimed to "Squash passive aggressive behavior and bitching."  Troux has a disciplined chain of command, and they realize that not everyone needs to be involved in every decision.  If someone doesn't like the decision, they can escalate, but the buck stops at the CEO, where the chain of command stops.  No design by committee, but a clear chain of command.

    The next section of the presentation really impressed me:  "Hire the best, fire the rest."  All management was replaced in the process.  Mr. Van Riper contends that some aren't good enough, and some choose not to adopt Agile, so others self-select to move on.  Some might interpret this to mean that to adopt Agile, all current people have to leave, but I contend that if the organization isn't getting the job done, then a lot needs to change, including some of the people responsible for the failures.

    Jim also touched on team workload.  he doesn't want folks working more than 45 hours per week because if they are tired, he doesn't want that code checked in.  The code likely won't be good if written while the programmer is fatigued.  I have to reiterate that Jim is relating things that have turned Troux around into a success.  These things worked for his organization.  Jim enjoys the churn in the organization because it constantly brings a fresh perspective. 

    As far as product strategy, Troux does NOT copy the market.  They focus on their users' boss, not the user directly.  By doing this, they make the users more successful in the eyes of the bosses, not just themselves.

    Troux breaks up work into "Must", "Hope", and "Wish". 

    • Must - will not ship without.
    • Hope - might ship without.
    • Wish - will ship without, but this needs to be kept in mind for future releases.

    Jim recognizes that support and maintenance can sabotage projects.  Developers are routinely pulled off for support without adjusting the schedule for the project.  That just doesn't make sense.  Bugs coming back from the fields are escalated up to the product owner so one person can assess each on relative to other potential work.  If bugs go into a release, other features must come out.  The plan has to be based on reality. 

    Kill the product manager

    It sounds crazy, but this is what Mr. Van Riper means:  In waterfall, Ghant charts are sacred, and Agile causes all practices to be rethought.  To some, throwing away the Ghant chart is heresy.  Jim relates that Ghant charts are produced along with Market requirements documents (MRDs) and that MRDs assume perfect knowledge, which is a fallacy.  MRDs are never always correct.  Rather, Troux makes product managers part of the Team, not separate from the team producing MRDs to be consumed by the team.  For those familiar with the Pigs and Chickens analogy, Troux makes product managers pigs instead of chickens.  This makes product managers completely committed and not just merely involved. 

    "We need Product Management separate from Product Development for checks & balances."  Mr. Van Riper scoffs at that notion and considers it dysfunctional.  Jim is the VP of Product, and everyone involved in a product release reports to him, product managers, software developers, and testers (with the help of line managers).

    Jim equates lots of documentation as fear of failure.  "Henry Ford called failure an opportunity to begin again more intelligently."  Troux prefers to get something working, share it, then fix it.

    Gary, the Director of Development, capped off the presentation with an explanation of how development is organized to get stuff done.  Scott Bellware was more than happy to ask questions which enhanced the presentation and challenged the speaker.  We had a bit of difficulty defining an "ad hoc" process.  Gary  related taking the development organization from a waterfall process with sign-off gates to a successful Agile process which actually produced working software.  At first, everyone contended that if only waterfall was followed, the software would succeed.  In reality, the software was failing in many ways.  Individuals would try valiantly, but just work themselves to a pulp.  The company depended on heroism by individuals, not the coordinated work of a gelled team.   

    Gary called out the importance of a cadence to the developers' work.  Iteration by iteration, the group obtained a stride, and through it all, the team built trust.  Developers instilled discipline in themselves.  Through past experience, developers were asking permission to do things that were necessary like unit tests.  By pushing decisions down, developers decided how the work should be done - not management.  Then by planning capacity, Troux was able to plan based more on reality and have the developers empowered to execute with discipline. 

    Tools:  Gary recommends not using any tools for the first six months in order to establish the desired values.  Then, tools can be adopted base on fit.  He's referring to project management tools like Rally, Team System, etc.  Finally, Gary helped his developers change and on the other hand, insisted they do so.  Then, he got out of the way.  About practices, he contends that continuous integration is their most important practice and that their holy grail will be when the build doesn't break any more.

    Metrics:  Gary does track some metrics, but they are very high-level and posted publicly.  He only tracks burn-down  of an iteration as well as builds.  He doesn't attempt to track everything because that's not valuable.  By the amount of discussion surrounding metrics, it sounds like there are a lot of opinions. 

    The first meeting of AgileAustin was a huge success with standing room only.  Visit AgileAustin.org if you are interested in the group, and join us for our next meeting on October 2nd.

More Posts

This Blog

Syndication