Skip to main content


Anglebrackets Conference – Day 3

I have been fortunate to attend this year’s Anglebrackets conference in Las Vegas. (See my coverage of Day 1 here and Day 2 here.)

The following are my notes from the Day 3 keynote, “Conversations with Microsoft.”

image_dbbecd7b-9298-4dde-993a-acd9d9461515The speaker: Steve Guggenheimer, corporate VP and chief evangelist.
A lot of changes at Microsoft over last year. New CEO, Satya Nadella

Not changed: We always be partner-led

Our Core – productivity platform for mobile-first, cloud-first world

4 engineering units at MS

  1. Devices platform.

Converging Xbox, Windows , WP and RT into single platform. Universal apps and One Windows.

VS 2015 preview is out. Demo: creating universal app from template.

  1. First-party devices (Surface, Lumia phones, Band, etc).
  2. First-party services (Office 365, Bing, Yammer, Skype, et). Cross-platform APIs and SDKs.
  3. Azure 

Microsoft Developer approach:

  • Innovation
  • Agility
  • Openness

Demo: VS2015 – targeting multiple devices with Apache Cordova plugin for VS. Using Android emulator for VS.

Demo: using remote IE (Azure service for testing on IE) on Mac, iPad and Android tablet.

Announcement: Open sourcing .NET Core Runtime and Framework. .NET running on Linux and Mac. Free VS 2013 Community edition.

Session:  Implementing EF models for DDD Bounded Contexts

Speaker: Julie Lerman

Hard to ignore ORM concerns inside bounded context.

Two ways to approach DDD:

  1. “ivory tower” – two completely different models, one for domain, one for persistence, then map between them
  2. Feed domain model to the ORM framework

Bounded Context

Ubiquitous Language – terminology specific to the bounded context

Bounded context means breaking things apart and separating.

Problem: re-using is good, duplication is bad. But when re-used code started to re-purposed (same thing started have different meanings in different context) this is bad too.

Example: Customer Management. when is a Customer a Customer? In customer service is customer. In Sales it’s Purchaser, in Shipping it’s Recipient, in Marketing it’s either Prospect or Existing Customer, in Accounting it’s Account Holder. It would make sense to track customer with contact id, at least this is common.


Contact entity in other bounded context doesn’t inherit from Contact in another BC, but they both inheriting from common classes as WriteableEntity or ReadOnlyEntity. Simple classes like Address are reused.

Private setters for properties, factory methods used. EF can use private setters just fine.

Don’t reference one BC from another.

Shared Types

Shared Kernel

  • Tightly coordinated Entities and Value Objects
  • Common schema and behavior
  • Reduce duplication, don’t eliminate it


  • Infrastructure
  • Not domain types
  • Favor composition (interfaces) over inheritance. Inheritance is good for infrastructure types (like Address), but not for domain types (Customer).

Data Model != Domain model

Shared Data

How to map different entities in the different bound contexts to the same table (Customers)?

Green Field: Existing Database

  • Database to EDMX or Code First

Different DB Contexts for different BCs. Have different Customers table in different DB Ctx. Migrations are not possible.

Possibility: Different schema (or different databases) for different BCs.

Track changes in entities and generate events. Use these events to synchronize data in different databases (via message queue).

Session: Developing with ASP.NET vNext
Speaker: Taylor Mullen


Global.json – list of source folders

Everything is light-weight and opt-in.

Project.json – combines project file and packages file

Startup.cs. Configure the framework features. Everything is opt-in.

No need to build. Builds on demand.

By default is completelly barebones – no framework (MVC or other) is forced upon.

Possible to use multiple different frameworks at once, just need to configure mapping.

MVC: controller doesn’t have to inherit from Controller.

Dependency injection is built in and automatic, everything could be declared as interface, then added [activate] attribute. Also need to configure the resolution with AddService();

@inject Razor statement for adding dependency injected calsses to view. This way it’s possible to derive View from something else than Razer view and then inject HtmlHelper, for example.

No need to use Html Helpers any more to create form and controls. Fluent html tags, no need to write C# code in the view, , need to reference TagHelpers and @addtaghelpers

Session: Visual Studio and Cordova
Speaker – Lino Tardos, MVP

VS tools for Cordova:-

  • released 11/12/2014
  • Avaiable is VS update 4

What is Cordova?

  • Open source version of PhoneGap
  • Allows to write apps for Android, iOS and Windows platforms
  • Apps are developed with html5, js and css only
  • Apps are run natively on device

How Cordova works:

  • Windows and Android
    • VS
    • MS build
    • VS-MDA
    • Cordva
    • Native tools
  • iOS
    • VS
    • MS build
    • VS-MDA
    • VS-MDA Remote (OSX)
    • Cordova (OSX)
    • Xcode (OSX)

Demo: create Cordova app from VS template

Demo: using Cordova + Kendo UI

Demo: Cordova application with Angular JS


Keynote: Managing programmers

Speaker – Douglas Crockford

  • Programmer
  • Manager of programmers
  • Manager of managers of programmers


  • Computer programmer
  • Computer Scientist
  • Software Engineer
  • Software Developer
  • Coder
  • Hacker

Not like the other kids (can’t manage them the same as other people)


Good programmers vs bad: 1:10 or 1:100

Some programmers have negative contribution

Two comics:

  • Dilbert
  • Xkcd

Ineffective metrics

  • Lines of code
  • Introduction of Bugs
  • Fixing bugs

Programming is not manufacturing


Trial and error

Waterfall – doesn’t work

Agile – doesn’t exist

Directed Anarchy – working

Most managers want to see programmers to look busy and good attitude.

Good measure: read code. Daily code reading. Readability.

Hiring: make candidate to bring the piece of code and defend if with the team.

Programmers look like office workers, but they are creatives.

Office structure

Flow: private offices, free of distraction.

Communication: bullpens (startups)

Worst possible: cubicles and open space.


  • Large project rooms with whiteboards
  • Lots of meeting rooms, different sizes, round tables
  • Classrooms to continuously train people
  • Library (silent)
  • Padded cells
  • Diner, booths with power plugs
  • Food
  • Bunk room
  • Shower
  • Day care

Programmers should own their own machines

Natural enemies of programmers:

  • Complexity. Don’t overcomplicate software.
  • Imperfection. Try to use best practices to minimize bugs.
  • Time. Premature optimization is bad. Measure, cut, measure.
  • Mismanagement. Programmers don’t like to be mismanaged.
  • Themselves. Encourage education, prevent “informed ignorance”.

Counterproductive measures:

  • add staff
  • Cancel continuous education
  • Hit intermediate milestones
  • Extend workday
  • Panic mode


  • Talented staff
  • Clear, stable requirements
  • Minimal distractions
  • Focus on quality
  • Sufficient time

“if it’s stupid we won’t do it”. Programmers want to deliver quality product.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Stan Tarnovskiy

Solutions Architect at Perficient

More from this Author

Follow Us