J.D. Meier's Blog

Software Engineering, Project Management, and Effectiveness

October, 2010

  • J.D. Meier's Blog

    ASP.NET Code Samples Collection

    • 14 Comments

    image

    The ASP.NET Code Samples Collection is a roundup and map of ASP.NET code samples from  various sources including the MSDN library, www.ASP.net, Code Gallery, CodePlex, and Microsoft Support.

    You can add to the ASP.NET code examples collection by sharing in the comments or emailing me atFeedbackAndThoughts at live.com.

    Common Categories for ASP.NET Code Samples
    The ASP.NET Code Samples Collection is organized using the following categories:

    image

     

    ASP.NET Code Samples Collection

    Category

    Items

    Sample Applications

    ASP.NET MVC

    AJAX / jQuery

    All-in-One Code Framework

    Code Gallery

    Microsoft Support

    Authentication

    Code Gallery

    Customer Support

    Authorization

    Code Gallery

    CSS 2

    Data Access

    All-in-One Code Framework

    Code Gallery

    Exception Management

    Code Gallery

    Microsoft Support

    JavaScript / JSON

    Code Gallery

    Logging and Instrumentation

    patterns & practices

    MVC

    Code Gallery

    Navigation

    Codeplex

    Request Processing

    ASP.NET Developer Center (www.ASP.NET)

    State / Session Management

    Code Gallery

    Validation

    Code Gallery

    Visual Studio and ASP.NET Development

    Code Gallery

    Microsoft Support

     

    My Related Posts

  • J.D. Meier's Blog

    Windows Azure Scenarios Map

    • 9 Comments

    image

    The Windows Azure scenarios map is a consolidated and shared view of the common scenarios and tasks developing applications for the Windows Azure platform. You will find Getting Started and Architecture scenarios first, followed by other common areas. Scenarios in each group should represent common tasks developers for this platform would face.

    Your call to action here is simply scan the Windows Azure Scenarios Map below and either share your scenarios in the comments or email your scenarios to me at feedbackandthoughts at live.com.  Be sure to share your scenarios in the form of “how to blah, blah, blah …” – this makes it much easier to act on and update the map.

    For a quick review of what a good Scenarios Map looks like, see my related post, 5 Keys to Effective Scenario Maps.

    Categories

    • Getting Started
    • Architecture and Design
    • Administration
    • ALM
    • ASP.NET Applications
    • Authentication / Authorization
    • Caching
    • Configuration
    • Data Access / Storage
    • DataMarket (“Dallas”)
    • Deployment
    • General
    • Logging / Health Monitoring
    • Performance
    • Security
    • Service Bus
    • SQL Azure
    • Transactions
    • WCF
    • WIF (Windows Identity Foundation)
    • Windows Azure VM (Virtual Machine) Role
    • Worker Role
    • Workflow

    Windows Azure Scenarios Map

    Category

    Items

    Getting Started

    • How to set up your development environment for Windows Azure development.
    • How to build a web site in a web role.
    • How to deploy an application to Windows Azure.
    • How to debug deployed applications.
    • How to build a worker process in a worker role.

    Architecture and Design

    • How to implemented layered architecture in the cloud.
    • How to run an on-premise app in the cloud.
    • How to design an application to scale across multiple data centers.
    • How to design a loosely coupled system.
    • How to design around latency issues.
    • How to dynamically increase or decrease the number of role instances based on load.
    • How to use Azure diagnostics to troubleshoot production issues.
    • How to provide incremental progress feedback from a worker role (for ex: progress bar).
    • How to design for integration (custom cloud applications / finished services (BPOS) / on premise / ESB)
    • How to call on-premise data stores from Windows Azure.
    • How to decide if your application is right for Windows Azure (on-premise vs. cloud, advantages/disadvantages).
    • How to scale horizontally.
    • How to scale vertically.
    • How to manage state in the cloud.
    • How to manage logs.
    • How to cache data.
    • How to design for asynchronous work.
    • How to design a tightly bound system.
    • How to segregate application logic between Azure roles.
    • How to create a small-to-medium Web app.
    • How to create a large Web application.
    • How to manage separation of responsibilities in functional roles.
    • How to build a system using both hosted data and on-premises data.
    • How to coordinate multiple worker roles.
    • How to create a parallel processing application.
    • How to use a distributed cache.
    • How to implement multi-tenancy in Azure.
    Administration
    • How to manage your subscription(s) when you've got a team of developers.
    ALM
    • How to manage both environment and application upgrades.

    ASP.NET Applications

    • How to connect to SQL Azure.
    • How to connect to Windows Azure Storage.
    • How to authenticate users using Live ID.
    • How to implement a RESTful interface in an ASP.NET application.
    • How to access certificates.
    • How to manage state in an application.
    • How to connect to a WCF service with an internal endpoint.
    • How to encrypt a value using RSA encryption.
    • How to monitor health of other VM instances.
    • How to access performance counters from code.
    Authentication / Authorization
    • How to perform single sign on (Federation).
    • How to turn your application into a claims aware application.
    • How to authenticate callers.
    • How to identify callers.
    • How to manage personally identifying information / sensitive data in the cloud.
    • How to build an STS.
    • How to integrate with Active Directory.
    • How to integrate with my Membership Provider.
    • How to leverage roles (Membership).
    • How to leverage claims.
    • How to turn claims into roles. How to authorize access to a REST interface.
    • How to implement complex logic in claims mapping.
    • How to configure my application for multiple authentication methods?
    • How to perform sign-out from my claims aware application?
    • How to Enable Tracing
    • How to use Windows Azure platform AppFabric Access Control to obtain a Simple Web Token (SWT) after providing a SAML token.
    • How to integrate Windows Azure platform AppFabric Access Control with ADFS.
    • How To: Configure Facebook as an Identity Provider for Azure AppFabric Access Control Service (ACS)
    • How To: Configure Google as an Identity Provider for Azure AppFabric Access Control Service (ACS)
    • How To: Configure Yahoo! as an Identity Provider for Azure AppFabric Access Control Service (ACS)

    Caching

    • How to leverage a distributed cache (e.g. Velocity)
    • How to swap out cache providers.
    • How to cache data effectively.
    • How to expire the cache.
    • How to use Azure's VM local storage.
    • How to implement the Azure AppFabric Cache session provider.

    Configuration

    • How to configure a web role.
    • How to configure a worker role.
    • How to cache configuration data.
    • How to decide what settings should go in ServiceConfiguration vs. Web/App Configs.
    • How to programmatically change configuration settings.
    • How to set up DNS for Azure applications.

    Data Access / Storage

    • How to access Azure Storage tables.
    • How to access Azure Storage queues.
    • How to connect to SQL Azure.
    • How to decide whether to use Azure Table Storage vs. SQL Azure
    • How to access Windows Azure Storage from Silverlight
    • How to upload files to BLOB storage.
    • How to handle connection timeouts with Azure Storage.
    • How to design an extensible schema that will never need to be updated.
    • How to choose a partition key for different entities.
    • How not to get too much data into one partition.
    • How to load initial/domain data (ETL)
    • How to do BI in the cloud.
    • How to store BLOB data for an on premise application.
    • How to organize your containers and blobs efficiently.
    • How to track/retrieve additional information/properties about blobs
    • How to authorize access to containers/blobs
    • How to name storage containers in WAS (what are the restrictions for naming?)
    • How to design a scalable partitioning strategy for WAS.
    • How to authorize access to BLOBs using Shared Access Signatures
    • How to persist a VM drive to Azure Drives.
    • How to organize your containers and blobs efficiently.
    • How to track/retrieve additional BLOB properties.
    • How to use queues for IPC.
    • How to deploy data to an Azure Drive.
    • How to create a WCF Data Services interface for Windows Azure Storage.
    • How to expose SQL Azure through a WCF Data Services interface.
    • How to support transactional data in Azure Storage.
    • How to repartition your live data.
    • How to repartition data.
    • How to programmatically reset and obtain storage access keys.
    • How and when to leverage Azure Local Storage.
    • How to change Azure Storage partitioning of existing services (should scaling needs require a change).
    • How to create idempotent transactions.

    DataMarket (“Dallas”)

    • How to use DataMarket from my application
    • How to address security, billing, auditing, and authenticating

    Deployment

    • How to install an SSL certificate for an Azure ASP.NET app.
    • How to determine number of instances of roles to deploy.
    • How to roll out a deployment.
    • How to roll back a deployment.
    • How to create and install a deployment certificate.
    • How to deploy applications programmatically through the portal API’s.

    General

    • How to push peak loads to the cloud to reduce the size of an on premise data center.
    • How to decide if you application is right for Windows Azure (on-premise vs. cloud, advantages/disadvantages)
    • How to run your own VM in the cloud.
    • How to develop with a team of developers.

    Logging / Health / Monitoring

    • How to determine your log destination (EventLog, TableStorage, Flatfile, etc)
    • How to view logs
    • How to monitor the health of a deployed application
    • How to log information from IIS (until IIS Logs are available).
    • How to monitor web roles.
    • How to monitor worker roles.
    • How to alert/alarm if needs are beyond Windows Live Alerts (currently what Azure provides)
    • How to throttle your logging.

    Performance

    • How to design around Azure throttling.
    • How to simulate load.
    • How to access/view performance counters.
    • How to do capacity planning.
    • How to compare BLOB storage against VM drives.
    • How to measure performance against CRUD.

    Security

    • How to encrypt values stored in configuration files.
    • How to sanitize logging events for sensitive data.
    • How to prevent CSRF attacks.
    • How to protect configuration settings.
    • How to encrypt persisted data.
    • How to secure any sensitive data that is sent between cloud applications.
    • How to store sensitive data in the cloud.
    • How to secure sensitive data sent to a cloud app.

    Service Bus

    • How to use the service bus to expose on-premise services to Windows Azure hosted applications.
    • How to use the service bus from a Silverlight client.
    • How to expose “discoverable” services via the service bus.
    • How to authenticate service bus access with AppFabric Access Control.

    SQL Azure

    • How to decide between Windows Azure Storage and SQL Azure.
    • How to implement separation of privileges in SQL Azure.
    • How to avoid SQL Azure throttling.
    • How to deploy SQL Azure TSQL or DB schemas as part of application deployment process.
    • How to backup SQL Azure databases.
    • How to restore SQL Azure databases.
    • How to use SQL roles and accounts in conjunction with claims based authentication mechanisms.

    Transactions

    • How to implement 2-phase commit.
    • How to roll back.
    • How to update multiple pieces of data at the same time.
    • How to lock effectively.

    WCF

    • How to set up transport security for WCF on Windows Azure.
    • How to use client certs with a WCF service on Windows Azure.
    • How to use on-premise user stores for authentication and authorization.
    • How to use internal endpoints with a WCF service.
    • How to expose an on-premise WCF service to a Windows Azure hosted client.
    • How to build a WCF service in a worker role.

    WIF (Windows Identity Foundation)

    • How to set up ADFS as an STS for Active Directory.
    • How to create a custom STS.
    • How to create a federation provider STS.
    • How to use a custom claims repository.
    • How to: Using the FederatedPassiveSignIn ASP.NET User Control
    • How to use WSTrustChannelFactory and WSTrustChannel
    • How to identify from Windows Phone to ASP.NET web site?
    • How to identify from Windows Phone to WCF service?
    • How to identify from iPad/iPhone to WCF service?
    • How to identify from droid to WCF service?
    • How to identitfy from Silverlight to WCF service?
    • How to Enable Tracing
    • How to log WCF and WIF traces to different tracing sources
    • How to use svctraceviewer.exe for troubleshoting
    • How to use svctraceviewer.exe to inspect WIF traces
    • How to: Establishing Trust from an ASP.NET Relying Party Application to an STS using FedUtil
    • How to package and deploy claims aware application on-prem?
    • How to package and deploy claims aware application to Azure?
    • How to request an ActAs token.

    Windows Azure VM (Virtual Machine) Role

    • How to choose between VM Role and designing for a Web or Worker Role
    • How to design for the VM Role

    Worker Role

    • How to communicate between different types of worker roles.
    • How to schedule work.
    • How to group different types of work.
    • How to determine the number of worker roles.
    • How to determine if multiple threads should be used

    Workflow

    • How to design for asynchronous work.
    • How to design for integration (custom cloud applications / finished services (BPOS) / on premise / ESB)

    Contributors and Reviewers

    • External Contributors / Reviewers – Adam Grocholski; Andy Eunson, Bill Collette; Brent Stineman; Kevin Lam, Rainer Stropek, Terrance Snyder, Will Clevenger
    • Microsoft Contributors / Reviewers – Alik Levin, Carlos Farre, Julian Gonzalez, Mohit Srivastava, Rob Boucher

    My Related Posts

  • J.D. Meier's Blog

    WCF Code Samples Collection

    • 4 Comments

    image

    The Microsoft WCF Code Samples Collection is a roundup and map of WCF code samples from  various sources including the MSDN library, Code Gallery, CodePlex, and Microsoft Support.

    You can add to the WCF code examples collection by sharing in the comments or emailing me atFeedbackAndThoughts at live.com.

    Common Categories for WCF Code Samples
    The WCF Code Samples Collection is organized using the following categories:

    image

    WCF Code Samples Collection

    Categories

    Items

    Addresses

    AJAX / JSON

    Bindings

    Clients

    Cloud / Windows Azure

    Contracts

    Cryptography

    Discovery

    Exception Management

    Extensibility

    General

    Hosting

    Interoperability

    Performance and Scalability

    Queues and Reliable Sessions

    Security

    Session Management

    Transactions

    WCF Data Services

    WCF RIA Services

    WCF Syndication

    Web

    My Related Posts

  • J.D. Meier's Blog

    Why Agile Results Works for Getting Results

    • 4 Comments

    “Agile Results” is the name of the “personal results system” inside Getting Results the Agile Way.   People that have tried every personal productivity system under the sun tend to ask me, what’s so different about this system or why does it work?  Here are the key things I usually say:

    1. It’s a mindful approach.  It’s not about doing more, and it’s not about doing less.  It’s about doing the right things, at the right time, the right way, with the right energy.
    2. It’s shifting from what you didn’t do, or what you didn’t get done, to figuring out the best things you can do with the time, energy, and opportunity you now have.
    3. It helps you ask better questions.  For example, “What are the 3 best results you want for today?”  “What’s your next best thing to do?”  “If this week was over, what are three things you want under your belt?” … “When are your best power hours?” … “When are your best creative hours?” … “What are three things going well that I can carry forward from this week?” … etc.
    4. It’s story-driven.   You get to be the author of your life and write your story forward, a day at a time, a story at a time.
    5. It’s pinned against time.   It’s a time-based system.  This keeps it simple.  You can focus on three results for today, three results for the week, three results for the month, and three results for the year.  This lets you zoom in and out while keeping things simple.  It also gives you a fresh start each day.  The main pattern in the book is the Monday Vision, Daily Outcomes, Friday Reflection pattern.  This makes the pattern easy to adopt, easy to remember, and you get to practice each day and each week.
    6. It’s integrated.  It combines mind, body, and emotions, and it’s a system you can use for work and life.
    7. It’s principle-based.  Because it’s a set of guiding principles, you can incrementally adopt the system, and you can use it on top of your existing systems.  It can easily blend with your approach or you can use it to re-shape your existing approaches.  It’s flexible by design, and meant to be tailored to help you unleash your best and improve your personal effectiveness in all areas of your life.

    While it might seem new, and some concepts are, it’s really a system that I’ve been evolving over more than 10 years.  I’ve used it to help people at Microsoft get faster, simpler, better results, and it’s how I’ve quickly ramped up folks on my project teams (you can read some of the testimonials and case studies.)  I do recommend reading A Word from the Author -- It’s short, but it gives you some of the back-story on how the system evolved. 

  • J.D. Meier's Blog

    40 Hour Work Week at Microsoft

    • 4 Comments

    "Eight hours work, eight hours sleep, eight hours play, make just and healthy day." - King Alfred the Great

    One of the most important lessons at Microsoft was learning the value of a 40 hour work week.  I’ve been on time, on budget for 10 years on projects ranging from grass-roots or “best efforts” to $ million+ investments.  In my first few years, I was on time, on budget through heroic effort.  That’s not sustainable and folks don’t want to sign up for that more than once.  Luckily, I learned early on how to drive more effective results by fixing time and flexing scope, while flowing value, and optimizing team health.  I also learned the value of figuring out effective product-lines, managing portfolios of investments, finding the best “Hot Spots” on heat maps of customer pain and opportunity, and mastering the art of the WBS (work breakdown structures) and cuttable scope.

    For some people that have experienced effective 40 hour work weeks on a regular basis, this will be “no-duh.” For those that haven’t, this may be unfathomable, so I’ll share what I’ve learned so at least it can give you food for thought and potentially help give you a mental model of what success can look like.  I originally slanted this for individuals and 40 hour work weeks, but I realized it’s more effective if more team leaders drive 40 hour work weeks so that everybody wins.

    Why a 40 Hour Work Week
    It’s not that I just want happier, healthier, more effective colleagues.  I want a more effective Microsoft.

    In my experience, a 40 hour work week is a benchmark of the most effective teams.  They have work-life balance.  They have buffer to respond to opportunity and to deal with crunches.  They have processes in place, they invest in their learning and growth, and they move up the stack instead of always solving the basics.  Instead of perpetual fire-fighting, they are more deliberate about planning and strategy and they anticipate their customers and the market (through empathy and staying connected to customers.)  They learn and respond and can turn on a dime.  They have a dashboard, they know the score, and they can change their approach.

    There’s another reason that cuts right to the chase.  If budget cuts will break you, then the first way to build a firm foundation and execution machine is to master the 40 hour work week.  It’s a forcing function that fixes a lot of underlying execution issues that you just cannot see if your organization throws time at problems.  If you can’t see it, you can’t fix it.  When you bound it by time, you can start testing more effective ways to produce results.  To make this actionable, make it an initiative.

    60-80 Hour Week of Ineffectiveness
    Here are some of the attributes of teams that lead and drive 60-80 hour weeks of ineffectiveness and inefficiency:

    • Throwing time at things (this shows up as longer days or weekends and adding more and more meetings.)
    • Nothing is a priority because everything is a priority (this is a sign of lacking metrics people believe in or a relevant scoreboard or dashboard of results or a lack of setting expectations or a lack of clarity on the end in mind or inability to flow incremental value.)
    • Working faster and harder to make up for bad planning.
    • Work on the wrong things faster or longer.
    • Lots of meetings because there’s more time to throw at them.
    • Lack of priorities because there is no forcing function like time.
    • Lack of focus because of a lack of priorities and throwing time at problems.
    • Bad estimation because it’s spread out over too much work or too much time or too ambitious.
    • Bad resource planning because of bad estimates and lack of clarity or feedback loops on results.
    • Scope drives everything, so scope creep is a way of life.
    • Ship cycles are spread so far apart that nobody wants to version or push to the next version so everything has to fit this time around through death marches and endless fitting square pegs into round holes.

    Ultimately, it’s a lost of waste on multiple levels.  Mostly, it’s a waste of human potential.

    40 Hour Week of Effectiveness
    Here are some of the attributes of teams that lead and drive 40 hour work weeks of effectiveness:

    • Get smart people on a cadence.  If there is a regular rhythm of results or a regular ship cycle or a regular time when the trains leave the station, you can always improve everything else.  The worst mistake is having timelines of jello.  When you have a cadence, people can version things, they can tune and improve processes, they can scope and chunk things down, they can ruthlessly prioritize, etc.
    • The team is fully engaged in the work they do.  They co-create the future they buy in to the journey and path, and believe in the end-in-mind.  They give their best where they have their best to give.
    • Ruthlessly prioritize value.  It’s not “how much can we do” … it’s “what’s the next best thing to do?”  This also means following the 80/20 rule and focusing on the 20% of the work that gets you 80% of the value.
    • Learn your capacity and throughput.  Throughput is simply the amount of work you can do in a given time period.
    • Have the right people in the right roles.  A sign of a strong team is they *feel* they can run towards the problem versus want to run away.  The two simplest way to kill an otherwise effective team are to have somebody out of position (e.g. catcher playing third base), or missing a key player (e.g. no pitcher.)
    • Spend more time in strengths.  Strengths are NOT what you are simply good at.  Strengths are your natural thinking, feeling, and doing patterns.  This is going with the flow or going with the grain versus against the grain.  If you are always fighting your natural patterns, then you aren’t leveraging your strengths or making the most of what you’ve got.  Instead, you are creating a liability.  This often happens by having people out of position or lack of the right resources.  By spending more time in your strengths, you amplify your impact, you renew your energy, and you grow faster in your strengths than you possibly can in your weaknesses.
    • Spend less time in weaknesses.    This is the Hedgehog Concept in action.   Stop doing what you’re not good at.  Do this by spending more time in what you are great at.  You can shave and slough off the time you spent in weaknesses by deliberately carving out more time to spend in your strengths.  Again, this will help keep your energy strong, which is the key to great results in less time.  Keep in mind that if you have serious liabilities, then you need to reduce them, but you don’t get great by improving your weaknesses, you get great by growing your strengths.
    • Push the bottleneck around.  Every team or organization has something that gates them.  It can be a lack of money or the right ideas or the right people.  In my experience, I often see heavy handed processes that made teams ineffective.  I also see the lack of the right vital few people (like playing baseball without a pitcher or playing hockey without a goalie.)  I also see a lack of the right investments, which is usually a sign of either a lack of clarity on the end-in-mind or a lack of understanding about the nature of the work (such as what it takes, how long it takes, who can do it, how to make it more efficient or effective, etc.)  There is always a bottleneck and if you can put your finger on the most important one, and you eliminate it or change the bottleneck, you can exponentially amplify your results.  My favorite lens for looking for productivity bottlenecks is the Theory of Constraints.

    While these insights and lessons might seem easy, intuitive, or simple, they are actually hard-earned and they are directly from the school of hard knocks.  It took multiple managers, testing with multiple teams over multiple years, and a lot of trial and error to figure out what actually works.

    Cornerstone Concepts for More Effective and Efficient Weeks
    There are some fundamental concepts and shifts to understanding why and how a 40 hour work week is more effective than a 60 or 80 hour work week.   You need a few concepts under your belt to help guide you through change:

    • Energy is the key to productivity, not time.   Give me four Power Hours over 40 hours of suck-the-life-force-slowly-out-of-me any day.  A Power Hour is where you are in the zone or in your flow and your energy is strong, while your creative juices are flowing or you are your most resourceful and solve problems with ease.    You get more Power Hours by people working in their strengths, playing to their passions, getting sufficient rest, enjoying work-life balance, and feeling valued for the work they do.
    • It's value delivered, not time spent.  Spending more time does not mean creating more value.  If you’re metric is “butts in seats” or “*** in chair,” you’re missing the point.   You want to measure value, and value is not a linear line of widgets you just crank out in the knowledge arena.
    • Shifting from Industrial Age thinking to the Knowledge Age.  In the Industrial Age, spending more time, meant producing more widgets.  Not so in the Knowledge Age.  Now it's about coming up with new ideas, new ways, changing the game, and responding to demand in more creative ways.  Knowledge and ideas are our main source of economic growth.  It's about turning knowledge from ideas in the mind, into valuable things and making things happen, through networks and systems of collective intelligence.
    • Intrinsic Value vs. Market Value.  For the sake of argument, let’s say a can of soda has an intrinsic value of $1.00.  It should never be worth more than that, at the intrinsic level.  Put that same can of soda in the desert, and now it’s market value is $50 or $100.   This gap between intrinsic value and market value is why bubbles burst or why customers that were paying $50 or $100 over here, can suddenly pay $1 over there.   Your opportunity for innovating in both your processes and your products comes from knowing the intrinsic value of things.  At some point, you’ve found the bottleneck or the glass-ceiling.  The key is to make sure your costs are close to intrinsic value and that if your market value is over-inflated to know that somebody, somewhere around the world can beat you on cost if you’re playing the cost game (A pattern I keep seeing is cost is losing, quality is winning for the long-haul – quality and brand are hard to copy.)
    • Sustainable pace.   Effectiveness is not about random acts of heroic effort or regular fire righting or reacting to perpetual surprises that could have been anticipated.  Effectiveness is also not about reacting to bad planning or over-estimating or unrealistic expectations.  A sustainable pace comes from setting a bar, in this case a 40 Hour Work Week, and designing for it.  It means biting off what you can chew within that chunk of time.  It means ruthless prioritization and focus by focusing on the smartest things that have the most value and letting the rest go.  It means having clarity on the end-in-mind, knowing the path or waypoints, and correcting course as you go.
    • Smart BI (Business Intelligence).   In an online, connected world, there is no reason to be flying blind.  You can guess at what works, or you can instrument, test, and measure.  This is the key to Amazon’s online success.  They can learn and respond.  By using BI effectively, you can figure out exactly what customers want, how much they want it, how they are looking for it, and where they are finding it.  Don’t “push” products.  Find the “pull.”  You can find the appetite or the demand to help drive and shape your supply.
    • Prosumer Model.    The prosumer model is where the producer joins forces with the consumer or user of their product.  Involve your customers earlier in the cycle and co-create the future with them.    You can’t miss.  However, don’t let the tail wag the dog.  For example, if Henry Ford asked customers what they wanted, they would say a “faster horse.”  Use customers to find their problems and what they would pay for or what they value.
    • It’s a Darwin world.   Along the lines of the book, Good to Great, you have to compete at what you can be the best in the world at.  In the physical world, you can compete on location.  On the Web, you really want to be number one for your niche or micro-niche.  Customers have slots in their mind, and you want to be pole position for whatever your slot in their mind is (positioning isn’t just position in the market, it’s position in the mind.)  If you compete at what you can be the best in the world at, you improve your sustainable pace and your competitive advantage.

    My Story
    One of my toughest lessons to learn at Microsoft was the value of a forty hour work week.  I'm known for being a workhorse.  16-20 hour days, 7 days a week was just a way of life for me.  Long ago, I heard the saying you'll have plenty of time to rest when you're dead and it stayed with me ever since.

    To make it worse, when I joined Microsoft, I was surrounded by passionate people who also worked well beyond a forty hour work week.  I was in the zone.  Not just that, I was spending my time in my passion, so I never burned out.  Throwing hours at problems was no sweat and I liked the pace.

    My first taste that this was a problem was when my first manager sat me down and said that my perpetual over-time was a problem.  He said I was throwing off the head count.  I was doing the work of multiple engineers.  It made it hard for him to argue for heads if the work was getting done, and he worried that I would burn out.  Luckily, I never burned out.  It turns out the primary ways you burn out are by trying to solve the same problem over and over like a broken record with no results, or by spending time in things that drain you.  The simplest cure for burnout is spending more time in your passions or moving to new problems or changing your container.

    My second taste that this was a problem was when I joined patterns & practices.  After my first few projects, my manager told me I needed to find a way to work 40 hours and produce the same or better results.  Additionally, I had to get more effective results from the rest of the larger team.  In other words, I wasn’t setting a good example, I set an impossible bar, and I had to make the most of the team (Oh, and did I happen to mention that this larger team was always a distributed team around the world, from UK to Argentina to India and the US?)  The good news is, the story has a happy ending …

    To bottom line it, by setting a constraint around the 40 hour mark, it dramatically improved team processes, improved clarity on impact, and it helped flow value versus waiting for big bang.  This also had an amazing set of by-products, including achieving work-life balance for all team members, helping people spend more time in their passion and strengths, reducing downstream risk and surprises, and keeping the energy strong across the team in a more durable way.  It also helped us improve our daily, weekly, and monthly rhythms of results while improving our team practices and procedures.  We basically moved up the effectiveness stack and it got faster each time we had to build a new team.

    The basic approach I used is what I call Monday Vision, Daily Outcomes, and Friday Reflection.   I did “show and tells” on Thursdays as a forcing function to drive results but to also give folks on the team a chance to show off their work and get feedback earlier versus later.

    Call to Action
    Make a 40 Hour Work Week an initiative, for yourself, for your team, or for your organization.  Start small.  Lead by example.  Start with yourself, then help other people.  Focus on finding more effective ways to do things, focusing on the vital few things that matter the most, playing to your strengths, and improving your energy.  Know what counts and be able to put your finger on it.

    You can explore the system in Getting Results the Agile Way.   The Scenarios and Solutions for Getting Results and the Guidelines for Getting Results are fast tours of the landscape and rich with strategies and tactics for changing your game.

  • J.D. Meier's Blog

    ADO.NET Scenarios Map

    • 4 Comments

    The ADO.NET Scenarios Map is a consolidated and shared view of the common scenarios and tasks around Microsoft data access technologies. You will find Getting Started and Architecture scenarios first, followed by other common areas. Scenarios in each group should represent common tasks developers would face when building applications that access or interface with data.

    Your call to action here is simply scan the ADO.NET Scenarios Map below and either share your scenarios in the comments or email your scenarios to me at feedbackandthought at live.com.  Be sure to share your scenarios in the form of “how to blah, blah, blah …” – this makes it much easier to act on and update the map.

    For a quick review of what a good Scenarios Map looks like, see my related post, 5 Keys to Effective Scenario Maps.

    Categories

    • Getting Started
    • Architecture and Design
    • ADO.NET
    • ADO.NET Entity Framework
    • LINQ to DataSet
    • LINQ to SQL
    • LINQ to Entities
    • OData
    • Silverlight
    • SQL Azure
    • SQL Server
    • WCF Data Services
    • XML

    ADO.NET Scenarios Map

    Category

    Items

    Getting Started

    • How to connect to SQL Server from an ASP.NET Application using ADO.NET.
    • How to connect to SQL Server from an ASP.NET Application using ADO.NET Entity Framework
    • How to connect to SQL Server from an ASP.NET Application using LINQ to SQL.
    • How to connect to SQL Server from an ASP.NET Application using LINQ to Entities.
    • How to connect to SQL Server from an ASP.NET Application using LINQ to DataSets.
    • How to connect to SQL Server from a Silverlight Application using WCF RIA Services.
    • How to connect to SQL Server from a WPF Application using WCF RIA Services
    • How to connect to a WCF Data Service from an ASP.NET Application

    Architecture and Design

    • How to design an N-tier ASP.NET solution using ADO.NET Entity Framework.
    • How to design an N-tier ASP.NET solution using LINQ to SQL.
    • How to design an N-tier ASP.NET solution using ADO.NET.
    • How to design an N-tier ASP.NET solution using LINQ to Entities.
    • How to design an N-tier ASP.NET solution using WCF Data Services.

    ADO.NET

    • How to populate a DataSet from a SQL Server database.
    • How to populate a DataTable from a SQL Server database.
    • How to populate a DataReader from a SQL Server database.
    • How to databind to a DataTable.
    • How to populate a DataSet from a multi-table join.
    • How to support file based data sources with a DataTable.

    LINQ to DataSet

    • How to query an ADO.NET DataSet from LINQ.
    • How to load a DataTable using LINQ.
    • How to obtain a Count from a DataSet
    • How to perform a Join query on a DataSet
    • How to obtain a Count on a Group in a DataSet.
    • How to order data from a DataSet
    • How to copy data from a DataSet
    • How to use element operators on a DataSet.
    • How to apply complex criteria to a DataSet.
    • How to create a Union within a DataSet.
    • How to query an ADO.NET DataSet from LINQ.
    • How to obtain a Count from a DataSet
    • How to perform a Join query on a DataSet
    • How to obtain a Count on a Group in a DataSet.
    • How to order data from a DataSet
    • How to copy data from a DataSet
    • How to use element operators on a DataSet.
    • How to apply complex criteria to a DataSet.
    • How to create a Union within a DataSet.

    LINQ to SQL

    • How to query a SQL Server table from LINQ.
    • How to perform an update in a 1-to-many relationship.
    • How to perform an update in a many-to-many relationship.
    • How to perform a multi-table query from LINQ.
    • How to perform SQL string operations within a LINQ query.
    • How to perform an insert in a 1-to-many relationship.
    • How to perform an insert in a many-to-many relationship.
    • How to perform a delete in a 1-to-many relationship.
    • How to perform a delete in a many-to-many relationship.
    • How to perform a data update within a transaction.
    • How to perform calculations in an LINQ query.

    LINQ to Entities

    • How to query an Entity Framework Data Model.
    • How to use expressions in LINQ to Entities.
    • How to call TSQL functions in a LINQ query.
    • How to call model-defined functions as object methods.
    • How to implement a .Find method.
    • How to increase performance with compiled queries.
    • How to map preexisting stored procedures to entities.

    OData

    • How to build an OData interface to SQL Server
    • How to build an OData interface in a WCF service.
    • How to perform basic CRUD operations against an OData data source.
    • How to use WCF Data Services to build an OData interface.
    • How to access an OData interface from JavaScript.
    • How to access an OData interface from jQuery.
    • How to access an OData interface from Ajax.
    • How to perform transactions against an OData data source.
    • How to create an AtomPub server.

    Silverlight

    • How to access a WCF Data Service using WCF RIA Services.

    SQL Azure

    • How to connect to SQL Azure from ADO.NET.
    • How to connect to SQL Azure from ADO.NET Entity Framework.
    • How to populate an Entity Framework Data Model from SQL Azure.
    • How to use WCF Data Services to expose SQL Azure as an OData data source.
    • How to perform LINQ queries against SQL Azure.
    • How to perform a two-phase commit transaction against SQL Azure.
    • How to expose SQL Azure as an AtomPub server.
    • How to build a scalable transactional database in SQL Azure.

    SQL Server

    • How to connect to SQL Server from ADO.NET.
    • How to connect to SQL Server from ADO.NET Entity Framework.
    • How to populate an Entity Framework Data Model from SQL Server.
    • How to use WCF Data Services to expose SQL Server as an OData data source.
    • How to perform LINQ queries against SQL Server.
    • How to perform a two-phase commit transaction against SQL Server.
    • How to expose data as XML.
    • How to build a scalable transactional database in SQL Server.

    WCF Data Services

    • How to use WCF Data Services to build an interface for a relational data source.
    • How to access data from Silverlight using WCF Data Services
    • How to access data from WPF using WCF Data Services
    • How to access data from ASP.NET using WCF Data Services
    • How to use WCF Data Services to build an interface for a non-relational data source.
    • How to access data from Ajax using WCF Data Services
    • How to access a WCF Data Services data source through WCF RIA Services
    • How to use WCF Data Services to build an interface for a hierarchical data source.
    • How to use AppFabric Access Control to protect an OData data source.

    XML

    • How to retrieve XML from SQL Server.
    • How to retrieve XML from an OData provider.
    • How to retrieve XML from SQL Azure.
  • J.D. Meier's Blog

    Microsoft Application Platform at a Glance

    • 4 Comments

    “To stay on the map you've got to keep showing up.” -- Peter Gallagher

    Periodically I create a map of the Microsoft application platform.  (Here is my previous map of the Microsoft application platform.)   Making the map helps me stay on top of the platform, identify potential changes to architecture and design strategies, and anticipate trends.  It also helps me figure out where to invest my time and energy.  It also helps me see potential customer confusion.

    Here is my latest map of the Microsoft application platform:

    Category

    Items

    Application Infrastructure

    • .NET Framework
    • Base Class Libraries (BCL)
    • Common Language Runtime (CLR)
    • Language Integrated Query (LINQ)

    ALM (Application Life-Cycle Management)

    • Visual Studio Team System
    • Visual Studio Team Foundation Server

    App Frameworks / Extensions

    • Enterprise Library
    • Managed Extensibility Framework (MEF)

    Cloud

    • Windows Azure
    • Windows Azure DataMarket (“Dallas”)
    • Windows Azure Tools for Microsoft Visual Studio
    • App Fabric
    • SQL Azure

    Collaboration / Integration / Workflow

    • SharePoint Server
    • Windows Workflow Foundation (WF)
    • Microsoft Office SharePoint Server (MOSS)
    • Microsoft BizTalk Server

    Data Access

    • ADO.NET Core
    • ADO.NET Entity Framework
    • ADO.NET Sync Framework
    • LINQ to SQL
    • OData
    • WCF Data Services
    • WCF RIA Services

    Database Server / Storage

    • SQL Azure
    • SQL Server
    • SQL Server Compact

    Desktop

    • WPF (Windows Presentation Foundation)
    • Silverlight (Out-of-Browser)
    • Windows Forms

    Developer Tools

    • Microsoft Visual Studio
    • Microsoft Expression Studio
    • Microsoft Visual Studio Express
    • Microsoft Visual Studio LightSwitch
    • Microsoft Visual Studio Team Foundation Server

    Games

    • XNA
    • D3D
    • Win32

    Identity

    • WIF (Windows Identity Foundation) (Geneva)
    • Active Directory Federation Services (Geneva Server)
    • Card Space

    Languages

    • Common Language Runtime (CLR)
    • Dynamic Language Runtime
    • Visual Basic
    • Visual C#
    • Visual C++
    • F#
    • Iron Python
    • IronRuby

    LINQ

    • LINQ to Entities
    • LINQ to SQL
    • LINQ to XML
    • LINQ to DataSet
    • LINQ to Objects

    Manageability

    • Systems Center Operations Manager (SCOM)

    Office

    • Office 2010
    • Visual Studio Office Development Projects
    • Office 2010 PIA (Primary Interop Assemblies)

    Parallel

    • F#
    • Parallel Extensions for .NET
    • PLINQ
    • Task Library

    Phone

    • Silverlight for Windows Phone
    • XNA Framework
    • Windows Phone Developer Tools

    Services

    • Windows Communication Foundation (WCF)
    • WCF Data Services (ADO.NET Data Services, Astoria)
    • WCF Web APIs
    • WCF RIA Services
    • ASP.NET Web Services (ASMX)

    Web

    • ASP.NET Web Forms
    • ASP.NET Web Pages (WebMatrix)
    • ASP.NET MVC
    • Silverlight
    • SharePoint Server
    • CSS
    • HTML / HTML 5.0
    • Internet Explorer
    • JavaScript (Jscript) / JavaScript (as of IE 9)

    Web Server

    • Internet Information Services (IIS)
    • IIS Express
    • Web Farm Framework

    Windows Server

    • Windows Server
    • Windows Server App Fabric (Dublin + Velocity)

    Many thanks to Adam Grocholski, Alik Levin, Chris Sells, Jesse Liberty, Joe Stagner, Jon Galloway, Pete Brown, and Rob Boucher for helping review.

  • J.D. Meier's Blog

    Principles and Values Define a Culture

    • 3 Comments

    As new teams spring up and old teams redefine themselves, one of the most important aspects of an effective team is the culture.

    An organization’s culture is defined by the values.   It’s not what they say, it’s what they do.  It’s not what they want to reward or say they want to reward, it’s what they actually reward.  The other thing to know about a culture is that the values flow down from the top.  That’s why leadership is important, as well as shared values among the team.  Conflict of styles is easier to deal with than a conflict of values … after all, you don’t just change what you value to fit your company.

    One of the simplest ways to establish and guide an organizational culture is to explicitly share the values and principles.  If you’re in the position of creating a new team, you can use the values as a lightening rod to attract the people with passion that care deeply about similar values.  Values are sticky and that’s actually how you can spread an organization far and wide and yet remain intact … it simply becomes a federated team that connects at the values (you can read more about this concept in the book, The Starfish and the Spider.)

    Example of Defining a Culture Through Organizational Principles and Values
    Here is a simple example of defining a culture using the patterns & practices team as an example circa 2006:

    Mission
    “Customer success on the Microsoft platform” or “Proven practices for the platform.”

    Goals
    In patterns & practices, the goals are simple:

    • Simplify the customer experience of building quality solutions on the Microsoft platform.
    • Improve the customer value of Microsoft products and technologies through customer connection and solution engineering.
    • Grow the professional knowledge and capability of the Microsoft development community.
    • Help customers and partners build their LOB (line-of-business) applications and services faster and more predictably than any platform in the world.

    Values
    In patterns & practices, we value:

    • Continuous learning, innovation and improvement - We have a bias toward action (over more planning) and customer engagement and feedback (over more analysis.)
    • Open, collaborative, relationships with customers, Microsoft field, partners, and Microsoft teams.
    • Execution - we take strategic bets, but we hold ourselves accountable for creating value, shipping early and often, and delivering results that have impact with customers and in Microsoft.
    • Explicit, transparent, and direct communication with customers and with our team and others in our company.
    • Quality over scope - no guidance is better than bad guidance.

    Principles
    We use the following principles to guide our work:

    • Start with the end in mind; think about end to end scenarios and how the products we produce fit in the solution architecture and into the patterns & practices catalog.
    • Help the customer succeed with their intent - the results they want to achieve, not just what they are trying to do.
    • Find the minimal solution required for a good result and ship it.
    • Our tools platforms are assets that expand the types of guidance we can express - use all of what they provide where it naturally fits the scenario.
    • Constructive tension between customer needs and Microsoft product and business strategy is expected - when we do our job well, this tension is healthy.

    My Related Posts

  • J.D. Meier's Blog

    ASP.NET Developer Guidance Map

    • 2 Comments

    image

    If you’re an ASP.NET developer or you need to learn ASP.NET, this map is for you.   Microsoft has an extensive collection of developer guidance available in the form of Code Samples, How Tos, Videos, and Training.  The challenge is -- how do you find all of the various content collections? … and part of that challenge is knowing *exactly* where to look.  This is where the map comes in.  It helps you find your way around the online jungle and gives you short-cuts to the treasure troves of available content. 

    The ASP.NET Developer Guidance Map helps you kill two birds with one stone:

    1. It show you the key sources of ASP.NET content and where to look (“teach you how to fish”)
    2. It gives you an index of the main content collections (Code Samples, How Tos, Videos, and Training)

    You can also use the map as a model for creating your own map of developer guidance.

    Download the ASP.NET Developer Guidance Map

    Contents at a Glance

    • Introduction
    • Sources of ASP.NET Developer Guidance
    • Topics and Features Map (a “Lens” for Finding ASP.NET Content)
    • Summary Table of Topics
    • How The Map is Organized (Organizing the “Content Collections”)
    • Getting Started
    • Architecture and Design
    • Code Samples
    • How Tos
    • Videos
    • Training

    Mental Model of the Map
    The map is a simple collection of content types from multiple sources, organized by common tasks, common topics, and ASP.NET features:

    image

    Special Thanks …
    Special thanks to Joe Stagner, Paul Enfield, Rick Anderson, Scott Hanselman, Tim Teebken, and Wade Pickett for helping me find and round up our various content collections.

    Enjoy.  Share the map with a friend.

  • J.D. Meier's Blog

    Silverlight Developer Guidance Map

    • 1 Comments

    image

    If you’re a Silverlight developer or you want to learn Silverlight, this map is for you.   Microsoft has an extensive collection of developer guidance available in the form of Code Samples, How Tos, Videos, and Training.  The challenge is -- how do you find all of the various content collections? … and part of that challenge is knowing *exactly* where to look.  This is where the map comes in.  It helps you find your way around the online jungle and gives you short-cuts to the treasure troves of available content.

    The Silverlight Developer Guidance Map helps you kill a few birds with one stone:

    1. It show you the key sources of Silverlight content and where to look (“teach you how to fish”)
    2. It gives you an index of the main content collections (Code Samples, How Tos, Videos, and Training)
    3. You can also use the map as a model for creating your own map of developer guidance.

    Download the Silverlight Developer Guidance Map

    Contents at a Glance

    • Introduction
    • Sources of Silverlight Developer Guidance
    • Topics and Features Map (a “Lens” for Finding Silverlight Content)
    • Summary Table of Topics
    • How The Map is Organized (Organizing the “Content Collections”)
    • Getting Started
    • Architecture and Design
    • Code Samples
    • How Tos
    • Videos
    • Training

    Mental Model of the Map
    The map is a simple collection of content types from multiple sources, organized by common tasks, common topics, and Silverlight features:

    image

    Special Thanks …
    Special thanks to Jesse Liberty, Joe Stagner, Paul Enfield, Pete Brown, Sam Landstrom, and Scott Hanselman for helping me find and round up our various content collections.

    Enjoy and share the map with a friend.

  • J.D. Meier's Blog

    5 Keys to Effective Scenario Maps

    • 0 Comments

    The better the map of the problem space we have, the better we can shape our platform and technologies, improve our tooling, and create more effective prescriptive guidance.  The key to an effective map of the problem space is creating a simple frame for the problem space, and getting customers to share their scenarios.  This is where you fit in.  By sharing your scenarios, you can help make sure your problems are heard in a simple and effective way.  The better your problems are heard and understood, the easier they are to address.

    5 Keys to Effective Scenario Maps
    The most effective way I’ve found to collect customer scenarios is to create “Scenario Maps.”  The Scenario Map ends up being a highly scannable index of one-liner scenarios.  The scenarios serve as test cases that we can measure the platform, tooling, and prescriptive guidance against.  An effective Scenario Map has five key attributes:

    1. “How To” - Each scenarios is stated using a one-liner “how to” statement, such as “How to connect to SQL Server from an ASP.NET Application using ADO.NET.”   This is crucial.  This helps turn a scenario right down into an actionable goal that can be easily understood, analyzed, and tested against.
    2. Hot Spots – Hot Spots are simply categories that group the scenarios.  Think of the problem space as a heat map.  On this heat map are pain points and opportunities or key choice points.  By focusing on the extreme pain points or opportunity, you can simplify the map and get the highest ROI.  This also keeps the map dynamic, since patterns of problems can keep bubbling up and then create a new category or Hot Spot.   
    3. Prioritized – In the early stages, a Scenario Map is simply a laundry list or brain dump.  But the key is to refine this map over time.  As you refine this map, you get rid of duplication, improve the clarity of each scenario, and you prioritize the lists.  While I’ve prioritized using P1, P2, P3, I’ve actually found it more helpful to prioritize using “Core,” “Common,” and “Niche.”  Core represents the most fundamental scenarios.  Common represents the common cases, which you can find with SEO or by getting a group of domain experts in a room to share their stories or by combing the forums.  Niche represents the corner cases or advanced scenarios, such as extreme security, performance, reliability, or architecture and design patterns, or advanced deployment patterns, etc.
    4. Durable but evolvable – The Scenarios Map should be durable in that the categories (Hot Spots) reflect patterns of problems.  However, it’s an unfolding process so the map should easily evolve as you learn more about the space and continue to collect scenarios.  The durability helps create a shared map of the problem space, while the flexibility helps the map address the changing needs in the space or reflect your current understanding of the space as it continues to evolve.
    5. User scenarios – If the scenarios aren’t from users, there’s a problem.  The idea of the map is to capture and share real-world problems from users.

    I’ll be sharing examples of Scenario Maps in the near future.

  • J.D. Meier's Blog

    Silverlight Code Samples Collection

    • 0 Comments

    image

    The Microsoft Silverlight Code Samples Collection is a roundup and map of Silverlight code samples from  various sources including the MSDN library, www.Silverlight.net, Code Gallery, CodePlex, and Microsoft Support.

    You can add to the Silverlight code examples collection by sharing in the comments or emailing me atFeedbackAndThoughts at live.com.

    Common Categories for Silverlight Code Samples
    The Silverlight Code Samples Collection is organized using the following categories:

    image

    Silverlight Code Samples Collection

    Category

    Items

    Getting Started

    Channel 9

    Code Gallery

    Architecture and Design

    MSDN Magazine

    Animation

    Channel 9

    Microsoft Support

    MSDN Library

    Controls

    Microsoft Support

    Data Access

    Microsoft Support

    MSDN Magazine

    Data Binding

    Code Gallery

    Microsoft Support

    MSDN Library

    Deep Zoom

    Microsoft Support

    General

    Code Gallery

    MSDN Library

    MSDN Magazine

    Graphics and 3D

    Channel 9

    Code Gallery

    Microsoft Support

    MSDN Library

    HTML Bridge

    Microsoft Support

    Local Resources

    Microsoft Support

    MSDN Magazine

    Navigation

    Networking / Communication

    Microsoft Support

    Out-of-Browser

    Microsoft Support

    Performance

    MSDN Magazine

    Styles and Templates

    Microsoft Support

    Text and Rich Text

    Microsoft Support

    Unit Testing

    Code Gallery

    MSDN Magazine

    User Controls

    MSDN Magazine

    Video and Audio

    Microsoft Support

    MSDN Learn

    MSDN Magazine

    Visual States

    Microsoft Support

    WCF RIA Services

    Web Services

    DPE (MIX 08)

    MSDN Library

    MSDN Magazine

  • J.D. Meier's Blog

    Windows Phone Scenarios Map

    • 0 Comments

    image

    The Microsoft Windows Phone Scenarios Map is a consolidated and shared view of the common scenarios and tasks developing applications hosted on Windows Phones. You will find Getting Started and Architecture scenarios first, followed by other common areas. Scenarios in each group should represent common tasks developers for the Windows Phone would face.

    Your call to action here is simply scan the Windows Phone Scenarios Map below and either share your scenarios in the comments or email your scenarios to me at feedbackandthoughts at live.com.  Be sure to share your scenarios in the form of “how to blah, blah, blah …” – this makes it much easier to act on and update the map.

    For a quick review of what a good Scenarios Map looks like, see my related post, 5 Keys to Effective Scenario Maps.

    Common Categories
    • Application Bar
    • Bing
    • Camera
    • Choosers
    • Cloud
    • Controls
    • Data Access
    • Deployment
    • Device Management
    • Emulator
    • Gamer Services
    • Globalization/Localization
    • IE (Internet Explorer) Mobile
    • Launchers
    • Location
    • Media and Media Player
    • Model, View, ViewModel pattern (MVVM)
    • Multi-touch
    • Navigation / Pages / Frames
    • Pause/Resume
    • Push Notifications
    • Reactive Extensions
    • Security
    • Sensors
    • Silverlight
    • Testing
    • Tiles/Icons
    • Tombstoning
    • User Experience
    • XNA

    Windows Phone Scenarios Map

    Category

    Items

    Getting Started

    • How to write phone apps as a .NET developer (not with a Silverlight background)
    • How to set up your development environment for Windows Phone development.
    • How to write your first Silverlight application for Windows Phone.
    • How to write your first XNA application for Windows Phone.

    Architecture and Design

    • How to design for user experiences
    • How to design for off-line
    • How to design for security
    • How to design for performance
    • How to build an N-Tier client on Windows Phone.
    • How to choose between Silverlight and XNA.
    • How to design for data latency in a Windows Phone application.
    • How to optimize an application for phone processor/CPU capabilities.

    Application Bar

    • How to use the ApplicationBar effectively
    • How to add an Application Bar to your application.
    • How to databind Application Bar icons.
    • How to build icons for the Application Bar.
    • How force orientation of the Application Bar.
    • How to programmatically show/hide the Application Bar.

    Bing

    • How to use the Bing maps control effectively

    Camera

    • How to access the camera.
    • How to capture video using the camera.
    • How to control the definition of video captured on the phone.
    • How to resize captured images.
    • How to access the proximity sensor.
    • How to GPS (Global Positioning System) tag a photo.
    • How to save pictures to the cloud.
    • How do you control access to photos stored to the cloud.

    Choosers

    • How to choose a phone number from the phone’s contacts application
    • How to choose a photo from the phone’s camera roll
    • How to ensure your application receives the result of a chooser task
    • How to choose an email address from the phone’s contacts application

    Cloud

    • How to store data in the cloud
    • How to host Web services in a cost effective way
    • How to handle asynchronous network calls and exceptions

    Controls

    • How to use a grid.
    • How and when to use the Pivot controls
    • How and when to use the Panorama control
    • How to programmatically access a control template.

    Data Access

    • How to store local data.
    • How to call remote data.
    • How to call remote SQL Server data.
    • How to call OData
    • How to call isolated settings storage
    • How to call isolated file storage
    • How to manage isolated storage space
    • How to manage isolated storage quotas

    Deployment

    • How to package an application for deployment.
    • How to get an application on the app store.
    • How to create a trial application

    Device Management

    • How to enable/disable software on a Windows device.
    • How to encrypt files on a Windows Phone.
    • How to detect and handle changes in network connectivity.
    • How to enlist a phone in a VPN.
    • How to authenticate a Windows Phone against Active Directory.
    • How to wipe a Windows device.
    • How to disable features of a Windows Phone.

    Emulator

    • How to run the emulator to simulate different hardware scenarios (i.e. low battery, loss of network connectivity, etc.)
    • How to simulate multi-touch in the emulator
    • How to simulate accelerometer input in the emulator
    • How to simulate the geolocation service in the emulator

    Gamer Services

    • How to use a gamer profile from Xbox LIVE.
    • How to prevent auto-login with a local profile.
    • How to retrieve gamer profile properties.
    • How to create custom properties in the gamer profile.
    • How to invoke the Gamer Guide.

    Globalization / Localization

    • How to build globalized applications for Windows Phone
    • How to build localized applications for Windows Phone

    IE (Internet Explorer) Mobile

    • How to leverage expanded JavaScript functions
    • How to adjust the text size of your web page
    • How to design web pages for the phone’s viewport
    • How to handle fixed position elements

    Launchers

    • How to launch the phone’s media player application
    • How to launch the phone’s browser application
    • How to save a phone number in the phone’s contacts application
    • How to save an email address in the phone’s contacts application
    • How to launch the phone’s email application
    • How to launch the phone’s dialer application
    • How to launch the phone’s SMS application
    • How to launch the phone’s search application
    • How to launch the phone’s camera application
    • How to launch the marketplace application
    • How to search the marketplace application

    Location

    • How to determine the location of a phone.
    • How to plot the location on a map.
    • How to get location data from the Location Service.
    • How to design for location data latency.
    • How to use an alternate data location back-end data source.
    • How to use reactive extensions to emulate and filter location data.
    • How to determine which source location data was obtained from.

    Media and Media Player

    • How to stream a video file
    • How to play an AVI file on a phone.
    • How to play foreign video formats such as .MOV.
    • How to use the FM radio
    • How to integrate with the music and video hubs

    Model, View, ViewModel pattern (MVVM)

    • How to implement a ViewModel.
    • How to implement the MVVM pattern.
    • How to minimize the view’s code behind and why.
    • How to use a view model (MVVM) for data binding.
    • How to build a ViewModel for a file data source.
    • How to build a ViewModel for an XML data source.

    Multi-Touch

    • How to recognize a pinch or expand gesture.
    • How to disable multi-touch in an application.
    • How to define custom gestures.

    Navigation / Pages / Frames

    • How to transition between pages
    • How to pass parameters between pages
    • How to implement an application bar
    • How to implement a page specific application bar
    • How to handle orientation changes
    • How to override the default behavior of the hardware back button

    Pause / Resume

    • How to handle a pause event in an application.
    • How to store transient application state.
    • How to restore transient application state.
    • How to store transient page state.
    • How to restore transient page state.

    Push Notification

    • How to use the Microsoft Push Notifications service.
    • How to set up a notification channel.
    • How to use tile notifications.
    • How to use toast notifications.
    • How to use raw notifications.

    Reactive Extensions

    • How to emulate data streams.
    • How to filter data from data streams.
    • How to compose multiple asynch web service requests.

    Security

    • How to encrypt data in an application.
    • How to use SDL tools to write a secure Windows Phone application.
    • How to protect sensitive data used by a Windows Phone application.

    Sensors

    • How to access accelerometer data.
    • How to use reactive extensions to emulate and filter accelerometer data.
    • How to recognize a device “shake” movement/gesture.
    • How to determine device direction based on accelerometer and location.

    Silverlight

    • How to share code between Silverlight applications and Windows Phone applications.
    • How to port Silverlight applications to Windows Phone.
    • How to address the differences between Silverlight for the desktop and Silverlight for the phone.
    • How to determine if your Silverlight application is being run on a phone or another host.
    • How to call XNA libraries from a Silverlight application.
    • How to use the Silverlight BitmapEffects from Windows phone

    Testing

    • How to unit test windows phone applications and assemblies.
    • How to test Multi-Touch
    • How to test GPS
    • How to test the Accelerometer

    Titles / Icons

    • How to create a tile for your application.
    • How to create an icon for your application.

    Tombstoning

    • How to debug while tombstoning.
    • How to handle state during tombstoning.

    User Experience

    • How to design effective layouts (themes, images, workflows)
    • How to apply themes to Windows Phone applications.
    • How to effectively show large amounts of data (filtering/sorting data)

    XNA

    • How to call Silverlight libraries from an XNA application.
    • How to determine the version of the runtime environment.

    Contributors and Reviewers
    • · Microsoft Contributors / Reviewers - Allison Kent, Constanze Roman, Dan Reagan, Dragos Manolescu, Georgia Pettigrove, Mark Chamberlain, Pete Brown, Srinivas Iragavarapu
    • · External Contributors / Reviewers – Adam Grocholski, Andy Eunson, Kevin Lam, Paul Enfield, Will Clevenger
  • J.D. Meier's Blog

    Scenario Maps Roundup for ADO.NET, ASP.NET, Silverlight, WCF, Windows Azure, and Windows Phone

    • 0 Comments

    image

    Scenario Maps are a simple way we collect, organize, and share user scenarios for a given problem space or technology.  They serve as a fast and scannable index of the problems that users face.  They are one of the most effective ways to see the forest from the trees.  Rather than get lost in a single scenario, they are a step back and a look across all the key scenarios.  This helps for ranking and prioritizing the problems for a given space.  They are also a powerful way to perform competitive assessments, shape a product, and to drive prescriptive guidance (I’ve used Scenario Maps to create platform Blue Books for patterns & practices.)

    Here is a roundup of my most recent Scenario Maps related to building block technologies for building applications for Cloud, Web, and Phone, and for building Web services:

    Why Scenario Maps
    The better the map of the problem space we have, the better we can shape our platform and technologies, improve our tooling, and create more effective prescriptive guidance.  The key to an effective map of the problem space is creating a simple lens for the problem space, and getting customers to share their key scenarios.  When customers share their scenarios in a Scenarios Map, it helps make sure their problems are heard in a simple and effective way.  The better their problems are heard and understood, the easier they are to address.

    What is a Scenarios Map
    A Scenarios Map is simply a collection of user scenarios organized using categories.  The categories with the most pain or opportunity serve as “Hot Spots.”    You can think of this map as a “Heat Map” of user scenarios where “Hot Spots” bubble up.  This helps see show the forest from the trees and to prioritize investments.

    5 Keys to Effective Scenario Maps
    The most effective way I’ve found to collect customer scenarios is to create “Scenario Maps.”  The Scenario Map ends up being a highly scannable index of one-liner scenarios.  The scenarios serve as test cases that we can measure the platform, tooling, and prescriptive guidance against.  An effective Scenario Map has five key attributes:

    1. “How To” - Each scenarios is stated using a one-liner “how to” statement, such as “How to connect to SQL Server from an ASP.NET Application using ADO.NET.”   This is crucial.  This helps turn a scenario right down into an actionable goal that can be easily understood, analyzed, and tested against.
    2. Hot Spots – Hot Spots are simply categories that group the scenarios.  Think of the problem space as a heat map.  On this heat map are pain points and opportunities or key choice points.  By focusing on the extreme pain points or opportunity, you can simplify the map and get the highest ROI.  This also keeps the map dynamic, since patterns of problems can keep bubbling up and then create a new category or Hot Spot.   
    3. Prioritized – In the early stages, a Scenario Map is simply a laundry list or brain dump.  But the key is to refine this map over time.  As you refine this map, you get rid of duplication, improve the clarity of each scenario, and you prioritize the lists.  While I’ve prioritized using P1, P2, P3, I’ve actually found it more helpful to prioritize using “Core,” “Common,” and “Niche.”  Core represents the most fundamental scenarios.  Common represents the common cases, which you can find with SEO or by getting a group of domain experts in a room to share their stories or by combing the forums.  Niche represents the corner cases or advanced scenarios, such as extreme security, performance, reliability, or architecture and design patterns, or advanced deployment patterns, etc.
    4. Durable but evolvable – The Scenarios Map should be durable in that the categories (Hot Spots) reflect patterns of problems.  However, it’s an unfolding process so the map should easily evolve as you learn more about the space and continue to collect scenarios.  The durability helps create a shared map of the problem space, while the flexibility helps the map address the changing needs in the space or reflect your current understanding of the space as it continues to evolve.
    5. User scenarios – If the scenarios aren’t from users, there’s a problem.  The idea of the map is to capture and share real-world problems from users.
  • J.D. Meier's Blog

    ADO.NET Code Samples Collection

    • 0 Comments

    image

    The ADO.NET Code Samples Collection is a roundup and map of some of the various data access code samples from  various sources including the MSDN library, Code Gallery, CodePlex, and Microsoft Support.

    You can add to the code examples collection by sharing in the comments or emailing me at FeedbackAndThoughts at live.com.

    Common Categories for ADO.NET Code Samples
    The ADO.NET Code Samples Collection is organized using the following categories:

    image

    ADO.NET Code Samples Collection

    Category

    Items

    Data Binding

    MSDN Library

    Data Models

    Code Gallery

    Microsoft Support

    DataReader

    MSDN Library

    DataSet

    MSDN Library

    DataTable

    MSDN Library

    Entity Framework

    All-in-One Code Framework

    Code Gallery

    General

    All-in-One Code Framework

    MSDN Library

    LINQ to DataSet

    MSDN Library

    LINQ to Entities

    MSDN Library

    LINQ to Objects

    All-in-One Code Framework

    LINQ to SQL

    All-in-One Code Framework

    Code Gallery

    Code Gallery

    N-Tier

    Code Gallery

    O/RM Mapping

    Code Gallery

    OData

    Code Gallery

    POCO

    Silverlight

    Code Gallery

    SQL Server

    MSDN Library

    Streaming

    Code Gallery

    WCF Data Services

    All-in-One Code Framework

    Code Gallery

    My Related Posts

  • J.D. Meier's Blog

    Windows Azure Code Samples Collection

    • 0 Comments

    image

    The Microsoft Windows Azure Code Samples Collection is a roundup and map of Windows Azure code samples from  various sources including the MSDN library, Code Gallery, CodePlex, and Microsoft Support.

    You can add to the Windows Azure code examples collection by sharing in the comments or emailing me atFeedbackAndThoughts at live.com.

    Common Categories for Windows Azure Code Samples
    The Windows Azure Code Samples Collection is organized using the following categories:

    image

    Windows Azure Code Samples Map

    Category

    Items

    Sample Apps

    DPE

    Windows Azure Training Kit

    Architecture and Design

    Code Gallery

    DPE

    patterns & practices

    Claims / Identity

    patterns & practices

    Windows Azure Training Kit

    Configuration

    Data Access and Storage

    MSDN Magazine

    Windows Azure Training Kit

    Deployment

    patterns & practices

    General

    Windows Azure Training Kit

    Logging and Instrumentation

    Migration

    patterns & practices

    Service Bus

    All-in-One Code Framework

    MSDN Magazine

    Service Management API

    · Windows Azure Service Management CmdLets from http://code.msdn.microsoft.com/azurecmdlets

    SQL Azure

    Code Gallery

    Microsoft Support

    WCF

    Code Gallery

    All-in-One Code Framework

    Windows Azure Storage

    Code Gallery

    All-in-One Code Framework

    Windows Azure UE Team Code Samples
    The Windows Azure UE team now has an organized collection of code samples available at:


    My Related Posts

  • J.D. Meier's Blog

    Press Release for Getting Results the Agile Way

    • 0 Comments

    image

    Here’s the opening blurb …

    'Getting Results the Agile Way' -- A Timeless System for Changing Times -- Now Available in Print 

    Seattle, WA (PRWEB) October 26, 2010

    Author J.D. Meier is announcing that his new book ‘Getting Results the Agile Way’ is now available in print. The book shows readers the way to make the most out of work and life. Meier has come up with a simple system to achieve meaningful results that combines some of the best methods for improving one’s thinking, feeling, and doing.

    “The best way I can put it is, it helps you be the author of your life and write your story forward,” says Meier. “Basically, it’s a system that can support you in everything you do. It’s based on principles and patterns so you can tailor it for yourself or for any situation.”

    Read the rest on PRWeb at - http://www.prweb.com/releases/Getting-Results/Now-in-Print/prweb4636494.htm

  • J.D. Meier's Blog

    How To Create a patterns & practices Team

    • 0 Comments

    I’ve had a few readers ask me how they can create a patterns & practices team for their Enterprise.  I think with the overwhelming choices of technologies and directions, more people are looking to create small technology incubation and innovation teams to help identify, harvest and share proven practices as well as to help pave the paths and steer the course for their bigger ships.

    While I don’t have everything packaged up as good as I could, here are some resources to get you started:

    I included many lessons learned from the school of hard knocks learned over more than 10 years at patterns & practices.

  • J.D. Meier's Blog

    Training for Getting Results the Agile Way

    • 0 Comments

    “Make the most of yourself, for that is all there is of you.” -- Ralph Waldo Emerson

    With my latest book out, Getting Results the Agile Way, I’ve had a lot of people ask me, “Where’s the training?”  While I’ve been making a lot of self-paced material available on the Getting Results Knowledge Base, what folks are really asking for is, where is the *live* training? …

    Well, here it is. Talk about timing and talk about a perfect partnership!  The live training is now available as a one-day, in-depth workshop to help you get up and running fast.  Learn how to get results with skill and work on the right things, at the right time, the right way, with the right energy to get your best results.   This is the same system I’ve used to lead distributed teams around the world since 2001, on time, on budget and it integrates some of the best practices from positive psychology, sports psychology, project management, and personal development.  There is a special emphasis on meaningful results, personal productivity, motivation, focus, passion, and purpose … and most importantly … responding to change … the agile way ;)

    The Workshop at a Glance

    WHEN Wednesday, November 3, 2010
    WHERE Clise Mansion
    6046 West Lake Sammamish Parkway
    Redmond, WA 98052-4801
    AGENDA
    • 8:15 – 9:00 Registration & Continental Breakfast 9:00
    • 12:00 Getting Results the Agile Way 12:00 – 1:00
    • Lunch 1:00 – 5:00 Getting Results the Agile Way
    WORKSHOP FACILITATOR

    John Hanson

    COST

    This initial offering is being discounted to $299 (plus tax).

    WORKSHOP INCLUDES Morning continental breakfast, lunch, Getting Results the Agile Way Field Guide, and one month paper planner: Agile Results Personal Planner.

    What you’re buying is a personal results system you can use for work and life, for the best of your life … that can help you make the most of what you’ve got today, and every day, whenever you want to get the system and science on your side.  It’s the edge you need in today’s ever-changing world.

    To Register

    • Call:  425-681-9078
    • Email: Workshops (at) innovation-Systems.net

    Why John Hanson
    John is passionate about developing people and helping them succeed.  His super skill is translating concepts into real world practice.  He’s been creating success with individuals for 16 years at SAFECO Insurance, and 10 years at Microsoft.   What I like about John is the fact that he’s full of stories … the good, the bad, and the ugly.  He’s been helping our top folks, Microsoft’s high performance employees, make the most of what they’ve got for years, so he knows what works and what doesn’t, as well as how to tune and tailor insights and actions to help people unleash their best in any situation.

    What You Will Learn

    • How to be the author of your life and write your story forward
    • How to make the most of your your moments, days, weeks, months, and years
    • How to use a simple system to achieve meaningful results
    • How to achieve work-life balance
    • How to focus and direct your attention with skill
    • How to manage your time
    • How to spend more time on the things that really matter to you
    • How to play to your strengths and spend less time in weaknesses
    • How to motivate yourself with skill and find your drive
    • How to change a habit and make it stick
    • How to improve your personal productivity and personal effectiveness

    Why a Workshop

    • Workshops help the 50% of us who learn best by having a hands on, guided opportunity to put something into practice.
    • Workshops allow you to get your questions answered, especially how this system might fit in with another system someone is using or is familiar with, or how to overcome particular obstacles.
    • Workshops allow you to share ideas and network with other people who share an interest with you.
    • Workshops also allow you to dive more deeply into material through the workshop interaction than you can with a static source.

    Key Exercises You’ll Practice in the Workshop

    • Explore how your current work habits are impacting your effectiveness
    • Explore how to apply the “Secret of Results” to change your game
    • Explore how to apply the “Secret of Motivation” to help you find your motivation and drive
    • Explore how to find your own “Sweet Spot for Results”
    • Find your “one-liner purpose”
    • Apply “The Rule of 3”
    • Identify your “Hot Spots”
    • Create a “Monday Vision”
    • Create your “Daily Outcomes”
    • Create an “Action List”
    • Create a “Reference List”
    • Practice the full process of planning out a day
    • Identify the things that make you weak and drain you as well as the things that make you strong
    • Practice the full process of planning out your month
    • Practice the full process of designing and mapping out your year and your yearly outcomes
  • J.D. Meier's Blog

    ASP.NET Scenarios Map

    • 0 Comments

    The Microsoft ASP.NET Scenarios Map is a consolidated and shared view of the common scenarios and tasks with ASP.NET. You will find Getting Started and Architecture scenarios first, followed by other common areas. Scenarios in each group should represent common tasks developers would face when building ASP.NET applications.

    Your call to action here is simply scan the ASP.NET Scenarios Map below and either share your scenarios in the comments or email your scenarios to me at FeedbackAndThoughts at live.com.  Be sure to share your scenarios in the form of “how to blah, blah, blah …” – this makes it much easier to act on and update the map.

    For a quick review of what a good Scenarios Map looks like, see my related post, 5 Keys to Effective Scenario Maps.

    Categories

    • Getting Started
    • Architecture and Design
    • ADO.NET Entity Framework
    • AJAX
    • Authentication
    • Authorization
    • Caching
    • Controls
    • Dynamic Data
    • Exception Management
    • General
    • Globalization and Localization
    • JQuery
    • Logging and Instrumentation
    • Master Pages
    • MVC
    • Navigation
    • Security
    • State Management
    • Validation

    ASP.NET Scenarios Map 

    Category

    Items

    Getting Started

    • How to download and install necessary components and tools
    • How to create a hello world sample with WebForms
    • How to perform data access
    • How to use the page framework
    • How to use the basic server controls
    • How to use the basic data controls
    • How to use the basic navigation, validation and login server controls
    • How to manage state
    • How to create a hello world with MVC
    • How to learn how to deploy applications
    • How to create and use themes and skins
    • How to work with Master pages
    • How to use client script / JQuery
    • How to debut with Visual Web Developer
    • How to create ASP.NET pages with Visual Web Developer
    • How to work with ASP.NET projects in Visual Web Developer
    • How to create a secure ASP.NET Web site

    Architecture and Design

    • How to Build Layered Web Applications with Microsoft ASP.NET
    • How to address performance
    • How to implement the common baseline architectures
    • How to recognize key patterns for common engineering decisions
    • How to design for production deployment
    • How to address security
    • How to address manageability
    • How to Build a multi-tier data-driven web application using the SqlDataSource control
    • How to build ASP.NET Web Sites Using Web Standards
    • How to Build a Poll System in ASP.NET

    ADO.NET Entity Framework

    • How to create a model class with the Entity Framework
    • How to create an entity data model using the Entity Data Model Designer
    • How to use the EntityDataSource ASP.NET control
    • How to manage Entity Framework ObjectContext lifespan and scope

    AJAX

    • How to use the ASP.NET Ajax Extender
    • How to use the ASP.NET Ajax ScriptControl
    • How to work with partial page rendering events
    • How to Put ASP.NET AJAX Timer and UpdatePanel with RssToolKit all in action
    • How to handle JSON data with ASP.NET Ajax

    Authentication

    • How to authenticate using claims with the Windows Identity Foundation
    • How to use Forms Authentication
    • How to authentication using ASP.NET membership provider system
    • How to use Windows Authentication to provide single sign-on capabilities

    Authorization

    • How to authorize users using claims
    • How to authorize users using a role provider
    • How to implement Role Based Access Control (RBAC)
    • How to authorize REST service calls
    • How to authorize users against Active Directory

    Caching

    • How to use the ASP.NET OutputCache.
    • How to use the ASP.NET cache API.
    • >How to cache objects in a page.
    • How to create cache dependencies.
    • How to set expirations on cache items.

    Controls

    • How to use the GridView Control
    • How to Use WebParts in ASP.Net
    • How to build an ASP.NET menu
    • How to use the ASP.NET ImageMap control
    • How to use the ASP.FormView control
    • How to use the ASP.NET Ajax ScriptControl
    • How to use the EntityDataSource ASP.NET control
    • How to Display Binary Data in the Data Web Controls
    • How to use the ReportViewer control
    • How to Creating a CascadingDropDown Using AJAX
    • How to use Rich Text Editor
    • How to Create Multi-page forms with MultiView control
    • How to create a Chart
    • How to use a CheckBox in a GridView
    • How to Add a GridView Column of Radio Buttons
    • How to use a Radio Button in the TreeView control
    • How to build a Cascading Drop Down List in ASP.NET
    • How to Add a total row to a GridView
    • How to page data with the ASP.NET DataPager control

    Dynamic Data

    • How to eliminate lengthy boiler-plate code from existing ASP.NET data-bound controls and derive column functionality directly from the database schema.
    • How to customize the UI to render a data field in existing ASP.NET data-bound controls by using a field template.
    • How to perform table row filtering using a specific foreign key using default or a custom filter template.
    • How to filter the child table rows to display based on the foreign-key values selected in a parent table.
    • How to customize the UI for an individual or multiple tables by using a page template.
    • How to customize the UI to render a data field by using a field template.
    • How to customize the validation of a data field.
    • How to customize the validation of a data field using custom attributes.
    • How to add validation of an entity type or member controls
    • How to customize the column header, caption, and so on.
    • How to use an enumeration type to enable the user to enter data field values from a drop down list.
    • How to customize the ordering of columns.
    • How to control data field string length.
    • How to display e-mail address that when clicked lunch the mail application.
    • How to display URL that when clicked navigates to the specified address.
    • How to create dynamic hyperlinks that are based on the table actions as enabled by Dynamic Data.
    • How to perform table row filtering using default filter templates.
    • How to customize entities as a whole.
    • How to render inherited tables.
    • How to render tables that contain a many to many relationship.
    • How to use a RAD approach to create a Web site to edit the products that are sold for a storefront.
    • How to add validation of a data field in existing ASP.NET data-bound controls

    Exception Management

    • How to log exceptions to the Windows Event Log.
    • How to implement a global exception handler.
    • How to populate and raise events from code.
    • How to populate a log message with additional context How to information.
    • How to configure options for trace listeners.
    • How to direct different event types to different trace listeners.
    • How to configure log filters.
    • How to create a custom trace listener.
    • How to configure a default URL to direct a browser to, if an error occurs.
    • How to configure a custom error page for a given HTTP status code.
    • How to trace activities and propagate context information.
    • How to check filter status before constructing log messages.

    General

    • How to E-Mail in ASP.NET.
    • How to upload files.
    • How to use JavaScript with ASP.NET Pages.
    • How to Process Data within an XML File.
    • How to Use Response.Filter to intercept your HTML.
    • How to Create an Event Calendar.
    • How to generate websites using ZAP tool.
    • How to Zip and Unzip files programmatically.
    • How to use NHibernate and Log4Net in ASP.NET applications.
    • How to Transferring Data Using SqlBulkCopy Class.
    • How to use SQL Cache Dependency With SQL Server 2000.
    • How to use Outbound Link Hit Tracking with ASP.NET.

    Globalization and Localization

    • How to localize an ASP.NET web application using resources.
    • How to select an encoding for ASP.NET web page globalization.
    • How to set the culture for ASP.NET web page globalization.
    • AJAX script globalization and localization.

    JQuery

    • How to use jQuery with ASP.NET.
    • How to use jQuery to directly call ASP.NET Ajax page methods.
    • How to use chained commands in jQuery.

    Logging and Instrumentation

    • How to populate and raise events from code.
    • How to populate a log message with additional context information.
    • How to trace activities and propagate context information.
    • How to create custom trace listeners.
    • How to check filter states before constructing log messages.

    Master Pages

    • How to build an ASP.NET Master Page.
    • Using multiple Master Pages to organize your ASP.NET website.
    • How to dynamically attach a Master Page.

    MVC

    • How to use HTML Helpers in ASP.NET MVC.
    • How to use template helpers in ASP.NET MVC.
    • How to create action filters in an ASP.NET MVC application.
    • How to implement a custom ActionFilter in ASP.NET MVC.
    • How to create unit tests for an ASP.MVC solution.
    • How to use an asynchronous controller in ASP.NET MVC.
    • How to use remove validation from a client in ASP.NET MVC.
    • How to validate model data using DataAnnotations attributes.
    • How to create a custom action filter.
    • How to implement an ASP.NET MVC ViewEngine.
    • How to create a custom route.
    • How to use a route constraint.
    • How to create a custom route constraint.
    • How to use querystring parameters in a route.
    • How to access parameters in a routed page.
    • How to use an ASP.NET MVC Controller to return XML or JSON.
    • How to perform a file download in ASP.NET MVC.
    • How to use the OutputCacheAttribute to increase performance.
    • How to use and inversion of control containers and the dependency injection pattern with ASP.NET MVC.

    Navigation

    • How to build a treeview.
    • How to implement a RESTful interface.
    • How to implement a breadcrumbs interface.

    Security

    • How to encrypt configuration settings
    • How to validate untrusted input
    • How to authenticate users using claims
    • How to authorize users using claims
    • How to use a secret store
    • How to handle exceptions securely
    • How to prevent injection attacks
    • How to authenticate users using membership
    • How to authorize users using roles
    • How to audit effectively
    • How to validate service messages

    State Management

    • How to maintain session data in a web farm
    • How to store session data in a database
    • How to establish sessions without cookies
    • How to Improve performance by compressing ViewState

    Troubleshooting

    • How to debug an ASP.NET application.
    • How to Health Monitor in ASP.NET.
    • How to debug in a live environment using event logs.
    • How to debug remote services.

    Validation

    • How to use the ASP.NET Validation Controls
    • How to validate client-side objects
    • How to validate server-side objects
    • How to sanitize untrusted input
    • How to validate untrusted input
    • How to filter untrusted input
    • How to use regular expressions to validate input
    • How to validate HTTP headers
    • How to validate file uploads
    • How to validate blob data

    Contributors and Reviewers
    • External Contributors / Reviewers – Adam Grocholski; Brent Jacquemart; Will Clevenger
    • Microsoft Contributors / Reviewers - Tim Teebken, Wade Pickett

    My Related Posts

  • J.D. Meier's Blog

    Silverlight Scenarios Map

    • 0 Comments

    image

    The Microsoft Silverlight Scenarios Map is a consolidated and shared view of the common scenarios and tasks developing Silverlight applications. You will find Getting Started and Architecture scenarios first, followed by other common areas. Scenarios in each group should represent common tasks developers for this medium would face.

    Your call to action here is simply scan the Silverlight Scenarios Map below and either share your scenarios in the comments or email your scenarios to me at FeedbackAndThoughts at live.com.  Be sure to share your scenarios in the form of “how to blah, blah, blah …” – this makes it much easier to act on and update the map.

    For a quick review of what a good Scenarios Map looks like, see my related post, 5 Keys to Effective Scenario Maps.

    Categories

    • Getting Started 
    • Architecture and Design
    • Animation
    • COM
    • Controls
    • Data Access
    • Data Binding
    • Deep Zoom
    • Deployment
    • Events and Delegates
    • Graphics and 3D
    • HTML Bridge
    • Layout
    • Local Resources
    • Localization
    • Networking / Communication
    • Out-of-Browser
    • Performance
    • Styles and Templates
    • Text and Rich Text
    • Unit Testing
    • User Controls
    • Video and Audio
    • WCF RIA Services
    • XAML
    • Visual States
    • Navigation
    • Model, View, ViewModel pattern (MVVM)
    • Project

    Silverlight Scenarios Map

    Category

    Items

    Getting Started

    • How to set up your development environment for Silverlight development.
    • How to write your first Silverlight application.
    • How to write your first out-of-browser Silverlight application.

    Architecture and Design

    • How to design a Silverlight application based on the MVVP pattern.
    • How to recognize scenarios suited for the MVVM pattern.

    Animation

    • How to animate an object
    • How to animate programmatically
    • How to use a timer
    • How to get started with storyboarding
    • How to slide a control in and out of view with storyboarding

    COM

    • How to Interoperate with COM Applications

    Controls

    • How to Display Data in a ListBox
    • How to Add a Control to the Toolbox
    • How to Add Tab Items to a Tab Control
    • How to Create User-Resizable Applications with GridSplitter
    • How to Handle the Checked Event for the CheckBox Control
    • How to Change the Appearance and Behavior of the AutoCompleteBox Control
    • How to Enable Silverlight Controls as Drag and Drop Targets
    • How to Create User-Resizable Applications using layout controls
    • How to use the progress bar
    • How to use the Items Control
    • How to implement a dependency Property
    • How to display data in a DataGrid
    • How to style a DataGrid control
    • How to add a custom template for a selected item with DataGrid
    • How to specify data context for a control
    • How to add tip text for a control
    • How to add controls to the content of another control (such as graphics and text for button or )

    Data Access

    • How to Store and Retrieve Application Settings Using Isolated Storage
    • How to Perform Isolated Storage Tasks
    • How to Encrypt and Signing Isolated Storage Files

    Data Binding

    • How to bind to a DataContext
    • How to Create a Binding
    • How to use value converters to transform data classes for display
    • How to Bind to Hierarchical Data and Create a Master/Details View
    • How to Validate Data with Data Annotations
    • How to use commanding
    • How to implement INotifyPropertyChanged and ObservableCollections
    • How to maximize control reuse by understanding data binding and how it climbs the ui elements to find a data source
    • How to validate data with data binding and validators
    • How to Customize Data Display with Data Templates
    • How to use Data Annotations to Customize Data Classes

    Deep Zoom

    • How to use deep zoom in Silverlight
    • How to implement a collection image vs a single image in Deep Zoom
    • How to create a custom multi scale image
    • How to create image layers on a deep zoom image
    • How to use the DeepZoomTools.dll
    • How to create a HttpHandler to serve images to Deep Zoom

    Deployment

    • How to download dependencies on-demand
    • How to Configure an Application for Out-of-Browser Support
    • How to Implement Offline Support for Out-of-Browser Applications
    • How to Add Resources to a Silverlight-based Application
    • How to Sign XAP’s for Trusted Applications
    • How to divide a large application into separate XAPs

    Events and Delegates

    • How to Define and Execute Dynamic Methods
    • How to Hook Up a Delegate Using Reflection
    • How to Define a Generic Type with Reflection Emit
    • How to Define a Generic Method with Reflection Emit

    Graphics and 3D

    • How to crop an object
    • How to use pixel shader effects
    • How to use transforms
    • How to use deep zoom in Silverlight
    • How to create a timer
    • How to programmatically animate
    • How to use 3-D effects
    • How to slide a control in and out of view
    • How to fade a control in and out
    • How to spin a control
    • How to shake a control
    • How to zoom in a control
    • How to zoom out a control
    • How to flip a control

    HTML Bridge

    • How to pass values to/from Silverlight and host (asp.net/javascript) page
    • How to call JavaScript functions from Silverlight.
    • How to invoke Silverlight code from an HTML page event.
    • How to call Silverlight managed types from JavaScript.
    • How to programmatically alter/affect Silverlight managed types from JavaScript.
    • How to pass a Silverlight managed type to a JavaScript function.

    Layout

    • How to use the Canvas control
    • How to use the Grid control

    Local Resources

    • How to Perform Isolated Storage Tasks
    • How to Access the Clipboard
    • How to Access Files
    • How to Store and Retrieve Application Settings Using Isolated Storage Core
    • How to Print

    Localization

    • How to Make XAML Content Localizable
    • How to Combine Localizable Strings at Run Time
    • How to Make Rich Text Strings Localizable
    • How to Make Non-String Values Localizable
    • How to Make Non-Dependency Properties Localizable
    • How to Make Properties Localizable with Static Resources
    • How to Localize Information About an Out-of-Browser Application
    • How to Create a Build that Targets a Specific Culture
    • How to Implement Right-to-Left Support

    Model, View, ViewModel pattern (MVVM)

    • How to implement a ViewModel
    • How to minimize the view’s code behind and why
    • How to use a view model (MVVM) for data binding

    Navigation

    • How to implement navigation from page to page
    • How to implement deep linking in Silverlight
    • How to create a loading splash screen
    • How to implement a custom pop up window

    Networking / Communication

    • How to get and set cookies
    • How to access web services from Silverlight
    • How to specify browser or client HTTP handling
    • How to download content on demand
    • How to access a RESTful service
    • How to detect changes in network status
    • How to serve up a cross domain policy file for a socket application
    • How to access a socket server from Silverlight
    • How to implement HTTPS
    • How to use a dispatcher for cross thread access
    • How to communicate to multiple, isolated Silverlight applications on a page
    • How to configure and deploy a cross domain policy file

    Out-of-Browser

    • How to run under elevated privileges
    • How to Configure an Application for Out-of-Browser Support
    • How to Customize Window Chrome for Out-of-Browser Applications
    • How to Implement Offline Support for Out-of-Browser Applications

    Performance

    • How to use a background worker
    • How to synchronize data for multi-threading
    • How to build an app for lazy initialization
    • How to use hardware acceleration

    Project

    • How to create a Silverlight project
    • How to structure a Silverlight project
    • How to change your global error handler

    Styles and Templates

    • How to set up a style for a button
    • How to reuse a style or template across a control, page or application
    • How to share a style throughout your entire Silverlight application
    • How to use multiple resource files

    Text and Rich Text

    • How to render rich text.
    • How to export rich text.
    • How to accept text input and save as rich text.

    Unit Testing

    • How to Unit Test Silverlight Applications and Assemblies.

    User Controls

    • How to create a user control.
    • How to add a user control to your application.

    Video and Audio

    • How to play an MP3 from Silverlight
    • How to handle MediaElement states
    • How to play streaming media
    • How to manage digital rights
    • How to continuously play an MP3 from Silverlight
    • How to access a webcam
    • How to access a microphone

    Visual States

    • How to use visual states to control dynamic UI
    • How to use visual state groups and combination of groups

    WCF RIA Services

    • How to use the Silverlight Business Application template
    • How to create a RIA Services class library
    • How to deploy a WCF RIA Solution
    • How to create unit tests for the middle tier
    • How to add/remove a RIA Services link
    • How to share code between a server (web) and client (Silverlight) application
    • How to share Data Annotations between a server (web) and client (Silverlight) application
    • How to configure services for different environments such as QA and Production

    XAML

    • How to use namespaces and aliases.

    Contributors and Reviewers

    • External Contributors / Reviewers – Adam Grocholski; Greg Cowin; Jeff Almeida; Will Clevenger
    • Microsoft Contributors / Reviewers - Jesse Liberty, Pete Brown, Sam Landstrom

    My Related Posts

  • J.D. Meier's Blog

    WCF Scenarios Map

    • 0 Comments

    image The Microsoft WCF (Windows Communication Foundation) scenarios map is a consolidated and shared view of the common scenarios and tasks around developing WCF services. You will find Getting Started and Architecture scenarios first, followed by other common areas. Scenarios in each group should represent common tasks developers would face.

    Your call to action here is simply scan the WCf Scenarios Map below and either share your scenarios in the comments or email your scenarios to me at FeedbackAndThoughts at live.com.  Be sure to share your scenarios in the form of “how to blah, blah, blah …” – this makes it much easier to act on and update the map.

    For a quick review of what a good Scenarios Map looks like, see my related post, 5 Keys to Effective Scenario Maps.

    Categories

    • Getting Started
    • Architecture and Design
    •  Auditing and logging
    • Authentication
    • Authorization
    • Cryptography
    • Data Binding
    • Deployment Considerations
    • Exception Management
    • General
    • Globalization/Localization
    • Impersonation and Delegation
    • Message Security
    • Performance and Scalability
    • Proxy
    • Sensitive Data
    • Service Interface
    • Session Management
    • Silverlight
    • Transactions
    • Transport Security
    • Unit Testing
    • Validation
    • WCF Data Services
    • WCF RIA Services

    WCF Scenarios Map 

    Categories

    Items

    Getting Started

    • How to build a WCF service with a RESTful interface.
    • How to build a WCF service with a SOAP interface.
    • How to build a public facing WCF service.
    • How to build a WCF service with authenticated access control.

    Architecture and Design

    • How to build a WCF service that supports federated security architectures through the wsFederationHttpBinding.
    • How to build a WCF service that implements the List-Based Publish-Subscribe design pattern.
    • How to implement a custom peer resolver with a WCF service.
    • How to use the Peer Channel to implement multiparty chat.

    Auditing and Logging

    • How to configure service to enable logging with filters
    • How to configure service to enable transport level logging
    • How to configure service to enable message level logging
    • How to configure service to enable authentication auditing
    • How to configure service to enable authorization auditing
    • How to configure service to enable tracing with different levels of information
    • How to configure service to enable WMI provider
    • View log and trace files for auditing purposes
    • Enable performance counters to monitor denial of service conditions

    Authentication

    • How to configure service with issue token authentication
    • How to configure service with certificate authentication
    • How to configure service with NTLM authentication
    • How to configure service with basic authentication
    • How to configure service with digest authentication
    • How to configure service with windows authentication
    • How to configure service with username/password authentication
    • How to configure service with no credentials
    • How to pass service certificate via secure session negotiation
    • How to pass NTLM credentials via secure session negotiation
    • How to implement custom credential validation

    Authorization

    • How to configure service to use a custom authorization provider
    • How to configure service to use a Windows provider to authorize users
    • How to configure service to use an ASP.NET role provider
    • How to configure service to use custom security policies
    • How to mark an operation contract with security demands attribute
    • How to perform authorization based on a programmatically verified claim

    Cryptography

    • Implement custom binding with cryptographic algorithms for encrypting/signing messages
    • Implement custom binding to sign message without encryption
    • Implement custom binding to encrypt message without signing.

    Data Binding

    • How to bind to data returned by a WCF service in a Web Forms application.
    • How to bind to data returned by a WCF service in a Windows Forms client application.
    • How to bind to data returned by a WCF service in a WPF client application.

    Deployment Considerations

    • How to host service in IIS for HTTP(s) communication
    • How to configure certificate on a client local store for message encryption and authentication
    • How to host service in Windows Activation server (WAS) for TCP communication
    • How to host service in Windows Activation server (WAS) for HTTP(s) communication
    • How to self-host service in windows service for HTTP(s) communication
    • How to self-host service in windows service for TCP communication
    • How to host service with least privilege account
    • How to host service in medium trust
    • How to configure certificate in IIS to enable SSL in a virtual directory hosting service
    • How to configure certificate to enable SSL in a self hosted service
    • How to configure partner public key certificates in local store for authorization
    • How to configure IIS for authentication
    • How to store encryption keys in a secure location
    • How to encrypt all or part of a web configuration file
    • How to map certificates with accounts in active directory
    • How to configure Active Directory groups and accounts for role-based authorization checks
    • How to configure Cardspace accounts
    • How to configure a Secure Token Service (STS)
    • How to configure MSMQ accounts and security

    Discovery and Client Access

    • How to build a WCF service that supports discovery through UDDI V2.
    • How to add a WCF service as a “web reference” to a Visual Studio project.
    • How to implement a WCF client that performs basic operations with a UDDI V2 service.

    Exception Management

    • How to implement a global exception handler
    • How to design service with exceptions handling that will not divulge information to the client
    • How to design fault contracts to allow services to declare known faults for each operation
    • How to enable debugging behavior to allow debug information to be propagated to the client
    • How to design operations to catch exceptions and communicate failures to client
    • How to clients handle exceptions in stateful services

    General

    • How to create a service with multiple endpoints.
    • How to create a service with one-way interfaces.

    Globalization / Localization

    • How to create a service that can be Globalized/Localized.

    Impersonation and Delegation

    • How to configure service to use certificate on the local store to allow client to authenticate
    • How to Flow identities in message from intermediary for authentication/delegation/auditing
    • How to configure service to run under security principal name to allow client to authenticate
    • How to configure service to allow impersonation of clients with windows credentials
    • How to set operation contract attribute to allow impersonation when enabled via service behavior
    • How to configure impersonation to retrieve identities from security context

    Message Security

    • How to build a service that sends credentials over https
    • How to build a service that sends sensitive data in message over https
    • How to configure message security to support partial signing of a message
    • How to configure message security to support partial encryption of a message
    • How to build a service that sends credentials over http
    • How to build a service that sends credentials over TCP
    • How to build a service that sends sensitive data in message over http
    • How to build a service that sends sensitive data in message over TCP
    • How to configure message security to support communication via intermediaries

    Performance and Scalability

    • How to implement a service that provides basic routing and load balancing functionality.
    • How to optimize performance in a transactional WCF service.

    Proxy

    • How to create a proxy using SvcUtil.exe.
    • How to generate a proxy from service metadata over HTTP(S)
    • How to create a service where client is configured to use certificate for authentication and message security.
    • How to generate proxy from service metadata over TCP
    • Service operations invocation administratively - Client authenticates with service providing credentials
    • Service operations invocation administratively - Client calls service anonymously
    • Service operations invocation programmatically - Client authenticates with service providing credentials
    • Service operations invocation programmatically - Client calls service anonymously
    • Client is invoked via client factory to improve performance
    • How to generate proxy from service metadata over MSMQ

    Sensitive Data

    • How to configure service for message encryption to protect message confidentiality and integrity with certificates
    • How to configure service to use transport security
    • How to design service to protect parts of the message with partial encryption
    • How to configure service to secure metadata in an endpoint to be consumed by service clients
    • How to configure service to change the default message encryption algorithm
    • How to configure service for message encryption to protect message confidentiality and integrity with Kerberos tickets

    Service Interface

    • How to build a WCF service with a RESTful interface.
    • How to build a WCF service that communicates POX (Plain-old XML) messages.

    Session Management

    • How to configure message throttling to avoid denial of service attacks
    • How to design services per session mode
    • How to configure memory limits to avoid denial of service attacks
    • How to configure service for reliable messaging with reliable session and ordering of messages
    • How to implement structured exception handling and state management to avoid state corruption

    Silverlight

    • How to access a WCF service from a hosted Silverlight application.
    • How to access a WCF Data Services interface from Silverlight.
    • How to access a WCF service from an out-of-browser Silverlight application.

    Transactions

    • How to support transactions in a WCF service.
    • How to support 2-phase commit transactions in a WCF service.
    • How to support nested transactions in a WCF service.

    Transport Security

    • How to use transport security to send credentials over https
    • How to use transport security to send sensitive data over https
    • How to configure transport security for end point communication with no intermediaries
    • How to configure transport security for improved performance over message security

    Unit Testing

    • How to unit test WCF services.

    Validation

    • How to Validate messages with custom schema inspectors
    • How to Validate messages with custom message inspectors

    WCF Data Services

    • How to interface with a WCF Data Service from jQuery, JavaScript and Ajax.
    • How to consume WCF Data Services from an ASP.NET application.
    • How to implement server driven paging in a WCF Data Service.
    • How to support data binding from a WCF Data Service.
    • How to consume JSON data from a WCF Data Service in an ASP.NET application.
    • How to consume JSON data from a WCF Data Service in a Silverlight application.
    • How to implement Business Logic in a WCF Data Service using Interceptors.
    • How to filter WCF Data Services data using service operations.
    • How to consume AtomPub data from a WCF Data Service in an ASP.NET Application.
    • How to consume AtomPub data from a WCF Data Service in a WPF Application.
    • How to consume AtomPub data from a WCF Data Service in a Windows Forms Application.
    • How to consume AtomPub data from a WCF Data Service in a Silverlight Application.

    WCF RIA Services

    • How to use a WCF RIA service to access data from Entity Framework.
    • How to use a WCF RIA service to access RESTful interfaces.
    • How to use a WCF RIA service to return Data Transfer Objects (DTO’s).
    • How to use a WCF RIA service to access data from another WCF service.
    • How to access LinqToSql data from a WCF RIA service.
    • How to access ADO.NET DataSet from a WCF RIA service.
    • How to use a WPF client application to access WCF RIA services through ADO.NET Data Services.
    • How to access a WCF RIA service from an ASP.NET MVC application.
    • How to access a WCF RIA service from a Silverlight application.

    Contributors and Reviewers
    • External Contributors / Reviewers – Adam Grocholski, Andy Eunson, Dean Meyer, Kevin Lam, Terrance Snyder, Will Clevenger
    • Microsoft Contributors / Reviewers - Carlos Farre, Tim Walton, Wade Mascia

    My Related Posts

  • J.D. Meier's Blog

    Getting Started, Solve-a-Problem, and Arch-and-Design

    • 0 Comments

    This post is about creating an effective body of knowledge for helping developers succeed with your product.  When I try to size up a space in terms of technical documentation, best practices, and prescriptive guidance for a given domain, product, or technology, I use the following mental model:

    image

    I think of it in terms of three basic buckets:

    1. Getting Started.   This is a relatively finite space.  If you address the basic scenarios, how to install, how to get started, how to do a simple “hello world” and then provide a roadmap for learning and a roadmap for knowing the timelines and paths for the technology, you have a pretty good baseline for users to get up and running.  My two favorite developer guidance tools here are a map of the technology in terms of the key components, features, and APIs (like a “PDC Poster”) and a walk through the flow of a request (like a UML sequence diagram.)
    2. Solve-a-Problem.  This is the space in the middle and it’s infinite.  You can think of it in two big parts though: common and niche.  There is a set of common challenges that a broad set of users will face, and then there is a set of long-tail, corner-case, and niche set of challenges.  The better you solve the common problems out of the gate for the broader set of users, the more successful you can make your product.  You can find these common challenges by using people and SEO (Search Engine Optimization).  On the people-side, you can use experts and mentors in that space, to map out the common challenges.  On the SEO side, you can simply map out the demand using keyword analysis.
    3. Arch and Design.   This is another finite space.   While it might seem infinite because it’s complex, it is actually pretty finite.  You can map out this space pretty quickly for a given technology by mapping out the common deployment patterns, the application types (the canonical app archetypes), the key design patterns for common scenarios, and how to address quality attributes such as security, performance, and reliability.

    While the path to mastery might be a long one, there is no reason why the path to effectiveness can’t be a short one – especially in a world of addressed “Just-in-Time Learning.” 

  • J.D. Meier's Blog

    Developer Guidance IA at a Glance

    • 0 Comments

    The Information Architecture (“IA”) for Microsoft Developer Guidance is a work in progress.  You can see a living instance of the IA at Microsoft Developer Guidance Maps

    The purpose of the IA is to simplify and improve the effectiveness of content for Microsoft developer guidance.  Rather than create more prescriptive guidance, our management team wants me to scale by baking what I’ve learned from building Microsoft Blue Books and platform playbooks into an Information Architecture that improves our overall content effectiveness for our developer platform.  This means having me work at the “meta” level to frame out the information architecture for our content and our platform technologies.

    The IA work that I’m primarily focused on is about figuring out the most effective content types, schemas, and the relationships among the content types.  It’s also about figuring out technology “information models”, domain models, feature sets/capability maps, and  key relationships among the technologies.  As you can imagine, mapping out the content story, the Microsoft application platform story, customer scenarios, and finding a way to blend and integrate these multiple dimensions is a bit of a challenge.  The payoffs can be big though.  On the producer side, the potential upside is we improve our portfolio of content, while improving our processes for content, as well as improving the efficiency and effectiveness of our content.  On the user side, the potential upside is that it gets easier to find and browse the information you need, in a simplified, contextual, and consumable  way.

    A Simple View of the IA …
    Here is a simple view of how I think of an IA for Developer Guidance at a top level …

    image

    It consists of three key parts:

    1. App / Solution Hubs.  One way to up-level information for technologies is to group the information by scenarios or solutions.  For example, when you can look at the Microsoft application platform, you can think of it in terms of platform, tools, and process (i.e. the .NET Framework, Visual Studio, and ALM for example.)  You can imagine creating a “solution” hub for each area.  You can also imagine grouping information by application types or deployment targets.  This is a loose categorization but you can think of it in terms of developers building applications for the cloud, desktop, phone, server, etc. … or you can think of it in terms of customers building Web apps, phone apps, services, etc.  This is an abstraction that sits above the technology.  Depending on what you want to build, you can choose the most relevant or appropriate platforms and technologies.
    2. Tech Hubs.   These are simply “one-stop shops” for key content, documentation, and guidance for a particular product or technology.  For these to be effective, it means finding and organizing the most useful content for that particular technology.  In other words, rather than a stream of content, it’s an organized body of content.
    3. Simple IA.    The simplest way I’ve found to make content useful for a given technology is to make it easy to browse by topics, by features, and by content types (Code Samples, How Tos, Videos, etc.)

    Why “Hubs”? … This is simply a “Hub and Spoke” pattern, where the “Hub” is a place to bring the various spokes together.

    A More Complete View of the IA …
    Here is a more complete view of the IA in progress …

    image

    To explain the model, I’ll use a simple example.  If you wanted to build applications for the cloud, the two main paths are building a Web application or a Web service.  On the Microsoft platform, that translates to ASP.NET and WCF.  Imagine that you can browse common application patterns and design patterns from the Cloud hub.  Imagine that you can then explore specific Code Samples, How Tos, Videos, or Training for a specific technology, such as Windows Azure, or ASP.NET, or WCF, or that you can quickly jump into the more relevant node in the MSDN Library and explore the product documentation with ease.  Further imagine that the Code Samples, How Tos, Videos, or Training are organized by topics that reflect common scenarios.  Imagine that for any of the key technologies, you can easily browse the topics or the features, and find relevant content.

    The easiest way to see this model in action is to browse the Microsoft Developer Guidance Maps site, where I model, prototype, and test the IA with customers.   Before rolling out any IA changes, this is a way to experiment and rapidly change the model.

    Key IA Components at a Glance
    Here is a summary of the key Information Architecture components at a glance:

    Item Notes
    App / Solution Hubs

    App Hubs are simply information hubs centered around solutions or app types.  They are an abstraction from the specific technology or product.  An example set of App Hubs could be:

    • Cloud
    • Data
    • Desktop
    • Games
    • Phone
    • Service
    • Server
    • Web

    A good App Hub makes it easy to get started, build your first app, find the key technologies, and solve the most common and important problems, as well as provides arch/design guidance, patterns, and best practices.  Here is an example of an App Hub:

    Tech Hubs

    Tech Hubs are simply information hubs centered around products or technologies.  They showcase the best information and sources of information for a given technology.  An example set of Tech Hubs could be:

    • ADO.NET
    • ASP.NET
    • Silverlight
    • WCF
    • Windows Azure
    • Windows Phone

    A good Tech Hub makes it easy to figure out the technology, get started, find the documentation, and browse by topics, features, and content types, including Code Samples, How Tos, Videos, and Training.  Here is an example of a Tech Hub:

    Feature Maps

    Feature Maps are simply lists of the features for a given technology.  These are relatively straightforward because they are identified by product teams.  The feature names are especially helpful when it comes to creating product usage guidance.

    Here are example Feature Maps:

    Topic Maps Topic Maps are simply lists of topics that represent areas or categories of scenarios.   While topic maps are great for organizing scenarios, they can also organize concepts, questions, or tasks.

    Here are example Topic Maps:

    Collections by Content Type

    Collections by Content Type are simply collections of content such as Code Samples, How Tos, Videos, and Training.  When you organize content by content types, this helps you evaluate the ROI against the cost of a given type.   It also makes it easier to innovate on experiences.  For example, you can show a carousel of videos.  It also makes it easier to set and meet expectations.  When a user browses a How To, they come to expect a set of actionable steps to perform a task. 

    Here are examples of browsing by content type for ASP.NET:

    Scenario Maps

    Scenario Maps are simply lists of user scenarios worded as “How to”, such as “How to show records from the database.”    The Scenario Maps are generated by consulting with product teams, customers, field, industry experts, support, etc.   Scenario Maps help to drive content by identifying demand.  The categories of scenarios help identify the key topics for Topic Maps.

    Here are some example Scenario Maps:

    Learning Roadmaps

    Learning Roadmaps are simply lists of learning objectives worded as “Learn how to” or “How to” … etc.  Learning Roadmaps lay out a learning path through sets of concepts and tasks for a given domain.  They help identify what training assets need to be created against demand, as well as identify effective paths through concepts and tasks to quickly gain proficiency within a domain.

    Here is an example Learning Roadmap:

    Content Types

    Content Types are simply types of content.  Identifying content types helps you make deliberate choices against what kinds of content you will invest in.  For example, are books or patterns as a content type, effective for users?  Here are some of the common content types used for Developer Guidance:

    • Code Samples
    • How Tos
    • Videos
    • Training
    Content Schemas

    Content Schemas are simply structures for content in the form of templates.  Each template identifies the content pattern.  For example, How Tos include a summary, a list of objectives, a list of steps, and then each step details how to perform a sub-task in the process.  Here are examples of content schemas:

    Table of Contents (TOC) Model A Table of Contents model is simply a canonical example of organizing top level nodes for a given product or technology within the tree of the MSDN Library.  

    The Windows Phone TOC in the MSDN Library is a good example and includes the following key components:
    • What's New
    • Code Samples
    • Getting Started
    • Tools
    • Concepts
    • Common Tasks
    • Features
    • Class Library Reference
    Controlled Vocabularies

    Controlled vocabularies are simply a shared set of agreed terms.  They help content producers use consistent labels for ideas and concepts and to organize information.  You can also use them to help map alternative terms and words back to the main term.

    Here are some Controlled Vocabularies I’ve found helpful:

    • Content Types (what are the various types we use and what do we call them?)
    • Categories / Topics (what are the key categories or topics for a given domain?)
    • Features (what are the key features for a given product or technology?)

    You can see these parts working together in action at Microsoft Developer Guidance Maps.

  • J.D. Meier's Blog

    Getting Results the Agile Way is Now Available in Print

    • 0 Comments

    image

    You can now buy the printed version of Getting Results the Agile Way on Amazon.   The PDF and Kindle versions should be available within the next few weeks.  You can read the book free in HTML at http://GettingResults.com   I know many people have been waiting for the printed version so I figured I should announce that the paperback is now available.

    Who’s it for? … So far, it seems like anybody who wants more from life.  I’ve had requests from restaurant owners to people in the financial industry, to doctors, lawyers, marketers, teachers … you name it.  I know some consulting firms that have been waiting for the book.   If you happen to be a software developer or a project manager, this book will find a special place in your heart.

    It’s a timeless system for the changing times.  Getting Results the Agile Way is a personal results system for work and life.   The best way I can put it is, it helps you be the author of your life and write your story forward.   It’s a simple system for meaningful results that helps you get faster, simpler, and better results.  You achieve this by working on the right things, at the right time, the right way, with the right energy to get your best results.  Basically, it’s a system that can support you in everything you do.  It’s based on principles and patterns so you can tailor it for yourself or for any situation.

    Contents at a Glance

    • Foreword
    • A Word from the Author
    • Introduction
    • Chapter 1 - Why Agile Results
    • Chapter 2 - Agile Results Overview
    • Chapter 3 - Values, Principles, and Practices
    • Chapter 4 - Hot Spots
    • Chapter 5 - Monday Vision, Daily Outcomes, and Friday Reflection
    • Chapter 6 - Design Your Day
    • Chapter 7 - Design Your Week
    • Chapter 8 - Design Your Month
    • Chapter 9 - Design Your Year
    • Chapter 10 - Results Frame, Personas, and Pitfalls
    • Chapter 11 - 25 Keys to Results
    • Chapter 12 - 25 Strategies for Results
    • Chapter 13 – Motivation
    • Chapter 14 - Mindsets and Metaphors

    I got the proofs of the book earlier this week and I was surprised how good the book feels.  It feels like a little handbook or a playbook.  It’s a thin guide -- about 1/2 an inch.   It’s 6x9 inches so it’s about the size of some of John Maxwell’s handbooks.  The cover is a brilliant blue with puzzle pieces coming together.   I wanted to have at least ten folks hold the book and take it for a test drive before announcing the book is available.  Last night, when the hostess at a local restaurant instantly fell in love with the book, it was the final test.  She said the blue made her feel calm, the print was easy to read, and as she flipped through, she said each page made her think and inspired her.  I felt bad I couldn’t let her keep the copy, but I promised her a copy next week.

    Contributors / Reviewers
    The book has quite a list of acknowledgements:

    Adam Grocholski, Alik Levin, Andrew Kazyrevich, Andy Eunson, Andrea Fox, Anutthara Bharadwaj, Brian Maslowski, Chaitanya Bijwe, Chenelle Bremont, Daniel Rubiolo Mendoza, David K. Stewart, David Wright, David Zinger, Dennis Groves, Don Willits, Donald Latumahina, Dr. Rick Kirschner, Eduardo Jezierski, Eileen Meier, Erin M. Karp, Ethan Zaghmut, Gloria Campbell, Gordon Meier, Janine de Nysschen, Jason Taylor, Jeremy Bostron, Jill Heron, Jimmy May, John Allen, John deVadoss, Julian Gonzalez, Juliet du Preez, Kevin Lam, Larry Brader, Loren Kohnfelder, Mark Curphey, Michael Kropp, Michael Stiefel, Mike de Libero, Mike Torres, Mohammad Al-Sabt, Molly Clark, Olivier Fontana, Patrick Lanfear, Paul Enfield, Per Vonge Nielsen, Peter Larsson, Phil Huang, Prashant Bansode, Praveen Rangarajan, Richard Diver, Rob Boucher Jr., Rohit Sharma, Rudolph Araujo, Samantha Sieverling, Sameer Tarey, Scott Hanselman, Scott Stabbert, Scott Young, Sean Platt, Srinath Vasireddy, Tom Draper, Vidya Vrat Agarwal, Wade Mascia

    … and of course, many thanks to my loyal readers of my blog, Sources of Insight (http://sourcesofinsight.com/), for their helpful feedback.

    If you want to get a good sense for what drove the book, I encourage you to read A Word from the Author.  It’s the story in a nutshell.

    Some folks inside and outside Microsoft have been telling me the system gives them the advantage they’ve been looking for, and helps them make meaning and find purpose and motivation in the things they do.  That’s what I like to hear!

Page 1 of 2 (29 items) 12