Enterprise Library 5.0: Product Backlog prioritization results





Some two weeks ago, we exposed the preliminary product backlog for Enterprise Library 5.0 and invited the community to vote on the features that matter to them most. And what a response we got! Over 2,600 people viewed the backlog and 981 cast their votes, with 230 troopers persevering to the very end. 18 members of the EntLib Expert Advisory Board also voted. In this post I would like thank you all for taking the time to complete the survey, and I want to share the results with you.


In retrospective, every previous EntLib release had a theme:



  • 1.0 = Integration of application blocks
  • 2.0 = .NET 2.0 update
  • 3.0 = Validation, PIAB, Block Factory
  • 4.0 = Dependency Injection with Unity, WMI 2.0

Over the years, EntLib grew larger, and arguably more complex than it really needs to be. The community has spoken loud and clear that they want EntLib to be easier to learn and to use. We have taken this feedback seriously, and have decided to focus this release on enhanced user experience, simplicity, and learnability. The working slogan is “Simplicity for the Win!”.


So, getting back to the product backlog. Let me explain the methodology we used to analyze the data. Stories voted as Priority 1 got 20 points, Priority 2 got 19 points, Priority 3 got 18 points, and so on, with Priority 20 getting only 1 point. Votes from our team of expert advisors’ carried double weight. Then, for each story, we calculated an arithmetic sum (the total number of points), and – using these numbers – ranked all of the stories (obviously the story with the most points was ranked as #1).


Based on past experience, we didn’t want to plan our development execution in the strict natural order of story rank, because this would require juggling various blocks within each iteration, and potentially create silos of experts around each block. Instead, we wanted an iteration to have a theme that the entire team can focus on. Therefore, we decided to carry out affinity mapping of stories for each block, and calculate their group weightings (ignoring all stories with ranks 50 and higher, since those automatically made our P3 bucket and so are not likely to be done). We then stack ranked the P1 groups (colored green in the following table) and we plan to address them in the stack ranked order, with the individual stories inside the group still ranked according to the original scores. Note that learnability and user experience stories will be addressed in parallel with all the development stories throughout the entire project, and -therefore – those groups are listed near the top of the backlog.





































































































































































































































Total points


Rank


Description (T-shirt size)


Architecture


2910


1


ARC01 : Architectural update: use DI container instead of one-off Object Builder factories; DI container independence (XL)


2164


2


ARC02 : Simplification of the codebase (identify redundancies, obsoletes etc.) (XL)


1898


6


ARC03 : Reduction of the number of assemblies (XL)


Learnability


2082


4


LEARN03: Notebook-style 150 page book for Enterprise Developers (XXL)


1400


12


LEARN02: Notebook-style 150 page book for Architects (XXL)


1338


14


LEARN08: Updated Quickstarts (XL)


976


22


LEARN09: Updated Hands-on Labs (XXL)


590


37


LEARN10: EntLib Overview Video (L)


524


42


LEARN07: Migration guide v.4.1 ->5.0 (L)


User Experience


1876


8


UX05: Config tool facelift – towards a more intuitive and easier to use UI (XL)


1718


10


UX03: Config IntelliSense for Unity and EntLib in XmlEditor (M)


1610


15


UX01: Better error reporting/messaging throughout (M)


1010


28


UX02: Debugging Visualizer for Unity (L)


744


36


UX04: Config IntelliSense for Unity in XmlEditor (M)


Data Access


2652


3


DAAB01: DAAB & LINQ basic integration (i.e. execute a query on a database, get back an object that you can do LINQ on) (M)


2012


9


DAAB02: Async ADO.NET support (M)


1390


16


DAAB04: No swallowing of SQL exceptions (S)


Logging


2006


7


LAB02: Async logging (text formatting done asynchronously) to cut down on load on primary thread (M)


1100


17


LAB03: Automatically purging old files by the rolling trace listener (S)


Tool support


1516


13


TOOL02: Support of Unity configuration (M)


Unity


1072


19


UIN01: Generalized interceptor (XXL)


1108


20


U06: Clearer error reporting (M)


1042


23


U05: Unity-MEF Integration (e.g. unityContainer.Resolve<MefPart>()) (M)


896


24


U03: Support for passing arguments to the Resolve method (M)


Config


1962


11


CFG01 : Config decentralization (support for config stored in multiple sources) (S)


1276


18


CFG05:  Making Unity configuration less verbose (M)


1072


21


CFG07: Unity config auto-registration: expanded conventions and helper classes to reduce need for explicit configuration (M)


804


34


CFG02:  Improved Config API (XL)


850


38


CFG03:  Support for different sections of config in different media (not just files) (XL)


Validation


2438


5


VAB01: Integration with WPF (XL)


1020


25


VAB04: Decorating LINQ objects with Validation attributes (M)


944


26


VAB02: Integration with/assistance in implementing IDataErrorInfo (S)


840


33


VAB07: Validation Block refactoring to allow using Unity to resolve Validators (M)


570


40


VAB12: Inheritance-aware object validator (M or ?)


Installability/Uninstallability


858


29


INS01: Installer allows you to pick which specific blocks to install instead of the whole package (M)


864


31


INS03: EntLib installers to be included as part of installers of other custom products (merge modules) (M)


Extensibility


1028


30


EXT01: Simplifying writing extensions and plugging their custom configs into the config tool (XXL)


PIAB


784


32


PIAB01: Implement PIAB interface that takes an interceptor type (to leverage new Unity interceptors) (S)


718


35


PIAB03: New handlers (incl. RequiresTransaction and Call Forwarding) (S)


Resource management


996


27


RAB03: Resource Application Block (a provider to get assorted resources from various media/sources) (XXL)


Localizability


834


39


LOC01: Localizability of EntLib assemblies (L)


752


41


LOC02: Localizability of exception messages and templates (S)


 


Stories in P2 (yellow in the following table) and P3 (red) categories are listed according to their ranks, and not group ranks. Should time permit, we will address the P2 stories in the order shown.




















































































































































































P2


 


 


614


43


LEARN01: Discoverability and context/dependencies EntLib poster (L)


556


44


LEARN11: EntLib5.0 New Features Video (L)


682


45


EHAB02: Parameterized templates for exceptions (M)


572


46


TOOL01: Type picker improvements (sped up search, better generics UI) (M)


516


47


U04: Container introspection (S)


590


48


LEARN12: Unity Overview Video (L)


500


49


VAB06: Simple validating field only if the value is not null (S)


590


50


VAB13: Support for recursive data structures (M)


496


51


U02: Allow a mapping from a named registration to the “default” one (S)


506


54


VAB08: Enabling Validation Block to be used with 3rd party object relational mappers (M)


482


55


VAB09: Honouring validation attributes defined in System.ComponentModel.DataAnnotations (S)


468


59


LEARN04: Notebook-style 100 page book for Operations/IT management (XXL)


394


65


VAB03: ArgumentValidationException.ToString() show the validation results (S)


P3


 


 


500


52


UIN02: Caching of matching policies (M)


608


53


DAAB03: Fix: validation of sprocs parameters – do not validate (S)


496


56


LAB04: Authenticated Email Trace Listener (S)


430


57


CFG06:  Support other config schemas for Unity config (e.g. XAML-based config)


402


58


U01: ResolveAll to return unnamed registration too (S)


390


60


LAB01: ETW sink (?, potentially XXL)


422


61


LEARN14: Unity Extensibility Guide (XL)


424


62


VAB16: Additional validator: Validator that checks that an enum contains a value that maps onto its defined values (S)


404


63


INS02: Installer ships both debug and release versions of the DLLs (S)


546


64


CFG04:  Support for multiple pieces of config for a single block in multiple places (XXL)


412


66


EHAB01: Default post-handling action to ThrowNewException instead of NotifyRethrow (S)


378


67


TOOL04: Web-based config tool (L)


372


68


CACHE01:  Adding a reason to the class that informs a user why their object was removed from the cache (S)


409


69


LEARN15: Guidance on environmental overrides in Unity (S)


409


70


LEARN15: Unity& MEF decision tree/matrix (M)


344


71


VAB14: Provide NullValidator to properly “ignore nulls” instead of the “Or composite” (S-M)


390


72


CACHE02: Cache backing store targeting ESENT (L)


352


73


VAB15: Additional validator: Number of decimal places validator (S)


292


74


PIAB02: Add non-generic overloads (S)


344


75


VAB05: Simplifying checking for positive / negative values (S)


282


76


LEARN05: Migration guide v.2.0 ->5.0 (XL)


266


77


VAB11: Better localization support (i.e. the first time the validator is used, the locale for the messages is defined) (M)


270


78


VAB18: RelativeDateTimeValidator update to  compare against UtcNow instead of Now  (S)


238


79


VAB10: Honouring MetadataType attribute (M)


238


80


TOOL03: Block invocation from the configuration designer (e.g. Configure a block, Right-click, Copy “Code to Invoke”, and then paste it elsewhere) (S)


234


81


TOOL05: Easier manipulation of validation trees (potentially, drag&drop) (M)


238


82


VAB17: Validator that compares against a single specific value (S)


196


83


LEARN06: Migration guide v.3.1 ->5.0 (XL)


162


84


LEARN13: Unity Extensibility Video (L)


 


The initial request for a Business Rules Application Block (which would help developers to take advantage of the WF business rule engine without creating a workflow) has been evaluated, and we solicited additional feedback from the advisors and the community. We didn’t see much convergence on the scenarios, and concluded that – at this point – we would not be playing in this area.


With regard to the platform we will target, originally our plan was to target binaries to version 4.0 of the .NET Framework. However, our advisors and the community pushed back on this. The result from 1,229 votes is shown in the following graph:


Targeted Framework for EntLIb poll results



This data is significant enough for us to adjust our plans to meet the community needs, and so we will target the binaries to version 3.5 SP1 of the .NET Framework. We will also carry out our test path on version 4.0 of the .NET Framework to ensure compatibility.


A similar question was asked about the framework version to which we should target Unity. The graph below shows the result of the votes, and so the decision is similar to that for EntLib 5.0. We will be targeting version 3.5 SP1, but also testing on version 4.0.


image



 

Comments (8)

  1. Thank you for submitting this cool story – Trackback from DotNetShoutout

  2. progg.ru says:

    Thank you for submitting this cool story – Trackback from progg.ru

  3. sergejus says:

    It’s great, that you are actually taking our ideas into account! Do you have already planned Time To Release?

  4. We have officially started our development work on EntLib5.0. Earlier I’ve shared our product backlog

  5. As I have mentioned in my previous posts , over the years, Enterprise Library grew large (it now includes

  6. EntLib5 team is working on improving performance of the logging block (story LAB02 in our product backlog