Friday, January 13, 2012

The Need for a Better Tool

I am currently in the process of implementing and ERP system (Microsoft Dynamics AX 2012) for my current employer  (The Aagard Group). One of our overarching implementation principles is Requirements First. What we mean by that is our business requirements will drive the implementation decisions. This requires us to understand our requirements (a topic for another day) and understand the out-of-the-box functionality of the system (another topic to be tackled) and document the gap between those. Once we have establish the gap we can design a solution to meet the requirement.

It has always been my view that requirements are part of the design process. If you start with a list of "musts" it is very likely you will find the software that needs those musts will not adequately meet the users needs. Sometimes the users needs are met but the software is still less than it could be.

During decades of software development and system implementations, it has been my experience that after the software engineer has designed the system to meet the requirements he understands what the user actually wants to accomplish and would do it differently if time allowed. I have had many experiences where we have developed to a spec, received high praise from the users and with my newly acquired knowledge of the problem domain, asked the user a few "what if"s only to find we could have provided a significantly better system because the user had never thought of doing the task in a different way. (Here is a great article by Mike Cohn about this phenomenon.)

In his book "Software Project Survival Guide", Steve McConnell identifies three intellectual phases of a software development project. He calls those phases Discovery, Invention and Implementation.McConnell lists "discovering the user's real requirements", technical investigation and building prototypes as activities in the Discovery phase.

In my experience the best solutions use the most skilled people in this phase. It is the most likely predictor of success or failure. Failure in discovery makes is very difficult to succeed in implementation.

Yet, when you think of the tools we use to aid in the discovery phase, what comes to mind? There are use cases / user stories, UI prototypes and requirements documents.How can one capture intent? This is my current struggle. I believe this to be one of the glaring holes in the tools available to aid with the software development lifecycle.

Of course, this is not just my opinion. Others have said this and even offered some ideas to address it. Sriram K. Rajamani states "the biggest problem in software engineering continues to be the bridging of the `gap' between the intent captured in requirements and expressed at a high level, and the detailed encoding of this intent in the code. There are no good tools, either mental or mechanical, that allow comprehension of large programs, and provide a mapping between how different parts of the code work together to satisfy the requirements.Thus, looking for any high-level requirements within a million line program is analogous to running around New York City looking for a lost cat, without a map, and without any street signs."

I would move the "biggest problem" up stream slightly to bridging the 'gap' between understanding what the user truly wants to accomplish and how to best leverage technology to help accomplish that. However, we agree on the issue. There are no tools to allow the business analyst, the software architect and the software engineer to capture what they understand. The only options we have is to capture what we have concluded is the solution.

For example, we may have a list of requirements that have been tediously recorded. What we won't have is the information that was discovered that lead to those requirements. Why is this important? It isn't important if you only want someone to design a system to meet the captured requirements. However, if you want to invent something that will actually add value to the job at hand it may be very important.

My proposal is to combine disciplines and tools. I propose that software projects should team business analysts and architects in the discovery phase. I propose we build a set of tools that combine a good narrative , use cases / story cards and technical diagrams into an interactive, connected modeling environment that allows an analyst to link multiple types of content and define the types of links. Text elements could be linked to other design artifacts like UI prototypes, UML static and dynamic diagrams. I can imagine a narrative explaining why a user currently performs a particular task being linked to a use case, a number of derived requirements and even an activity, sequence or state diagram.The derived requirements could also be linked to UI prototypes and UML classes that realize those requirements.

Here is a list of the attributes that a system of this sort may need to have.


  • Objective: To provide a means of capturing the intent of a software development initiative including the problem domain and desired outcomes.
  • The Target Audience: Outcome Stakeholders 
  • Content Properties
    • Multilevel - Captures the highest level of intent to the lowest level of detailed requirement or design - Captures highest level of abstraction to the lowest level of concrete implementation
    • Connected - Associative / Relational - identify and document the associations and dependencies and use them for tractability - able to trace from the lowest level of detailed design to the highest level of intent
    • Multifaceted - multiple perspectives or aspects
      • Process view
      • Requirements view
      • Data view
      • Workflow view
      • User Role
      • Security
    • Accessible - Available and understandable to all stakeholders
    • Maintainable
      • discrete elements that can easily be modified without major impact to other information 
      • Revisionable - able to fit any sane view of revision / change control
      • Comparable - able to compare iterations
    • Interactive - electronic interactive document with the ability to produce static, printable documents for all or portions.

Over the next several articles, I intend to flesh-out the essential components of such a system and give a few examples.

Tory

Tuesday, January 10, 2012

Fixing a bad XPO File for Microsoft Dynamics 2012

Ok, this my first topic entry and I can't imagine a more boring topic. Yet - it has taken some time to find a way to solve this problem so in keeping with my intent for this blog I'm posing it.

I am currently in the process of implementing Microsoft Dynamics AX 2012 (DAX) for my company (The Aagard Group). We are doing extensive customization within the system. One of the great features of DAX is that it integrates with Microsoft Team Foundation Server (TFS). To do this it exports (and imports) customization in the form of formatted text file (similar to an XML file). This allows synchronization between the individual developer environments. The text file has an extension of ".XPO".

Well, there appears to be a bug in the code that generates the .XPO file. Occasionally DAX will create a bad Project XPO file – either when explicitly exporting or when checking in changes. The problem is manifested when importing the project XPO file. It will cause a Critical Stop error with a message that says “Error in line ###: expected BEGINNODE but found FILETYPE." (see the image below)

This error unfortunately may send you on a wild goose chase looking for missing “BEGINENODE” lines. In fact, the problem is a missing  PROJECTCLASS identifier. A correct project XPO will have the project class type after the keyword PROJECTCLASS. For example a typical project will have the following line:


PROJECTCLASS ProjectNode


While a test project will have:


PROJECTCLASS SysTestProject


But the bad XPO will simply have:


PROJECTCLASS 


To fix the XPO file simply put ProjectNode or SysTestProject (depending on the type of project the XPO represents) after the PROJECTCLASS keyword.


The screen capture below shows the file prior to the fix compared to the file after the edit.


Interestingly, not every project XPO that is missing the PROJECTCLASS identifier will create the critical stop. If the nodes in the project are all contained in groups apparently the parser can recover from the missing PROJECTCLASS identifier. The screen capture below shows a project file with and without the PROJECTCLASS identifier. Both versions will import properly.

I have encountered this error seemingly randomly. I don't know what causes it I haven't found any information about anyone else complaining about it. So, hopefully this information will be helpful in future. Here's to also hoping the defect is fixed soon so this information becomes obsolete.

Tory

Welcome

I have been meaning to start a blog for sometime. Not because I think anyone would actually be interested in what I have to say (if you are reading this you are probably lost) but because my memory is getting so bad I have trouble remembering the conclusions I have reached after the hard work of reaching one.

My objectives for this blog are to provide a place for me to record the significant and insignificant "take-aways" from my day-to-day life. It is a intended to be a reference site for me. Anyone else who may benefit from it is welcome to consume as much content as they can stomach.

Since I am making this blog public I suppose I should address any potential readers and provide a brief summary of what they may expect.

The topics I expect to cover revolve around the areas of my life that require any significant thought. The topic may not itself be significant, only the thought I invested in the topic.You may be amazed at how much significant thought I can put into insignificant topics. Since (according to my teenage daughter) I am "older than dirt" I have some experience with thinking and am familiar with the topics that have or will likely cause significant thought on my part. So I can provide the reader with a list. I do however, reserve the right to think about and therefore blog about any topic that suits my fancy.

Software Development
I am a software architect by trade and have a passion for software development. Naturally I have and will continue to think about software development. So I expect to write extensively (relatively speaking) about software development. This topic is large and could include any area of the software development life cycle (SDLC), software development best practices (SDBP) or even the penchant for the technology community to use and/or invent new abbreviations and/or acronyms. Our industry is, of course rivaled only by the military.

Philosophy and Worldview
I am very interested in philosophical topics. I especially enjoy thinking about reality, our view or reality and how our view influences our behavior. Sometimes these topics bleed into some areas of science, but I don't spend much time researching science so I can't say I will have much to say about it. One area of science that I have thought some about is the theory of relativity. Specifically the theory of special relativity. Our view of time and space has very interesting ramifications on our philosophical views.

The topics of Philosophy and worldview have lead me down many paths including family, education, vocation and of course religion. I have thought quite a bit about these topics. It also has triggered thoughts about culture and society. I expect I will continue to think about and therefore blog about these topics.

I hope I am disciplined enough to consistently record my thoughts on this site for myself, my posterity and anyone else who may stumble upon them. If you enjoy any of my thoughts feel free to comment, even if you disagree. If you don't enjoy my thoughts don't read them any longer and don't bother with a comment - I can't imagine I would enjoy your comment.

Tory