A list of requirements for Symphony Next from differing user roles and perspectives.
- Content publisher: User of the system. Front-line of the operation responsible for publishing/editing content on a regular basis. Isn't concerned with anything else other than what is required to do their job well.
- Content Manager: User of the system. Manages content publishers with more control of the overall system and more permissive user permissions.
- Website Builder (evaluating): Site developer/designer. Looking for a CMS/platform to use as the basis for their web work but needs to make a choice which will be a good fit for a number of projects of varying sizes for the foreseable future.
- Website Builder (building a system): Site developer/designer. Will most likely work primarily via the GUI in building the website but may or may not have other developent skills.
- Website Engineer: From more of a software engineering background with preferences for working in code rather than a GUI. Is concerned with a solid foundation to extend and adapt for web site and application development.
As a content publisher I want:
- Intuitive Interface
- Easy to use with a low learning curve
- Clean & Clear UI
- Minimal distractions
- Focused on what I want/need to publish
- Shows me only the fields I need to fill in and nothing more
- Help/Hints when I need it
- Adaptable Interface
- Works on my smartphone, tablet, or desktop computer
- Easy linking to files/images/documents
- Drafts (save for later)
- Preview
- Versioning (mistakes happen)
- A publishing hub
- Publish site news/blog
- Publish to twitter/facebook/social media
- Publish a monthly email newsletter
As a content manager I want:
- User groups & permissions for various staff members
- Publishing approval process
- Easy page creation/editing
- Hierarchy can also be re-structured easily.
- Dashboard & activity listing/reports
- At a glance view of activity.
- Publishing approval requests.
- Basic visitor numbers & popularity information.
As a website builder (evaluting a system) I want:
- Flexibility
- To build whatever the job dictates
- To build both small sites and large
- To build website applications and endpoints
- Re-use
- A system I can re-use for several (all) of my website projects
- Re-use of sub-skills such as template language, underlying framework, data transport mechanisms, and knowledge gained whilst working with the system.
- Extension
- The ability to extend the system where my requirements go beyond what the core offers
- An high quality extension library with ready-made extensions which I can use to speed up development and use as a starting point for some of my own custom extensions
- An easy way to search the extension library
- Peace of mind knowing that extensions are well maintained and will work with the latest version of the core.
- Documentation
- A well documented system with plenty of examples to get me up and running quickly
- A place of reference for quick look-ups whilst in development
- Extension documentation which can walk me through building my own extensions
- Ecosystem
- An active & friendly community who I can turn to for advice & help with problems as and when they arise
- Educational resources and articles I can refer to
- Modern Development
- A system which follows modern development workflows and best practices.
- A system which allows me to use my own tools for development including things such as Sass/LESS/Stylus, JavaScript libraries, and build tools.
- A system where the skills I learn can be re-applied elsewhere making effective use of my time.
- Unopinionated
- I want to create the front-end templates without constraint or limitations imposed.
- The choice of template languages to fit in with my workflow.
- Easy Sell
- Something I can sell to my clients very easily and to tempt them away from WordPress.
- Something that makes me look good to my boss for suggesting it over WordPress.
- Something I can convince colleagues and co-workers to learn and work with.
- Popularity (Social approval)
- Reassurance knowing that it's used by a lot of people to build a lot of cool things - they can't all be wrong.
- Reassurance that it has a strong future and will be around for many years to come. I wont be wasting my time learning these skills.
- Pride in knowing I'm using one of the cool web tools in hot demand.
- Comfort knowing that there are plenty of jobs requiring skills in this system. I can enhance my career by moving in this direction
** As a website builder (building a system) I want:**
- Content Modelling
- The flexibility to define my own content resources (sections) and associated fields.
- The ability to set and define relationships between resources.
- The ability to re-use content of a potentially global nature (i.e. addresses, contact details, etc)
- Flexible Layouts
- To shape the publish page for usability and intuitiveness.
- The ability to re-use layouts so I don't have to set it up for each every content type.
- Adaptable layouts (responsive by nature).
- Adaptable Storage
- The choice of RDMS or NoSQL or no DB at all (flat file template serving and basic routing)
- URL Architecture
- Full control of the URL schema
- An easy way to group routes if certain actions need to happen such as authentication
- An easy way to assign route segments/variables
- Error handling to serve up the correct response if there is a problem (e.g. 404)
- Page Hierarchy
- An easy way to provide a one-to-one mapping of content to a 'page' if the client insists (old dog and new tricks don't always mix)
- A visual tree view to present to the client for familiarity and page organisation
- Drag & drop re-ordering with URLs to adjust accordingly
- Easy child creation/removal from the tree hierarchy
- Assets Management
- A place to manage files and images
- Basic organisation tools with the option to extend.
- Customisation
- The ability to modify styling or theme my own control panel
- The ability to define my own admin/control panel URL
- A minor level of branding to include a logo/company name with links back to my company site for help.
- Extension
- An easy way to extend the system with my own re-usable addons
- An easy way to manage my extensions and keep them up to date (extension/package manager)
As a website engineer I want
- RESTful Architecture
- Resource based (Sections).
- Follows a resourceful URI pattern.
- Accepts & responds to HTTP verbs (GET, POST, PUT, DELETE).
- Easy data input from remote requests (API calls).
- Easy data input from flat files (.md, .txt).
- Easy data output in the form of XML, JSON, serialised PHP, or CSV.
- Choice of Data Storage
- Can use RDMS or NoSQL (local & remote).
- Can work with no DB at all (handles route requests and static templates).
- Modular
- Lean core.
- Extension based.
- Extension Management.
- Extension
- The ability to extend the core system easily.
- Extension development documentation.
- Follows modern development best practices.
- Allows me to use skills from my favourite framework or re-use skills learnt with another framework.
- Use of an ORM
- Fully testable
- API
- A full API with full CRUD operations.
- Well documented.