• Tension arise when Developer and DBA roles/responsibilities are not properly separated.

    If the company divides its employees into Developers and DBAs, it should also clearly separate their roles and responsibilities so there is no overlap.

    - Developers design and implement applications.

    - DBAs design and implement databases.

    What this means in practise is that every database should have a well-defined stored procedure interface, and applications should use the stored procedures and should not directly access the tables within the database, either using Entity Framework or any other means.

    When a new requirement comes along, the Developers and DBAs should get together and agree what database interface is required. The Developers can then go away and write the application code while the DBAs can go away and write the database stored procedures and if necessary extend or modify the database schema.

    With this approach, Developers retain full control over the application design and DBAs retain full control over the database design, and both camps are happy.

    It sounds simple because it is. Problems only arise when people forget the basic principles of software engineering, i.e. every component must have a well-defined interface, and users of a component must not bypass the interface or make any assumptions about how the component works internally.