Navigating these choices is not an easy task at times because you’re trying to match your scenarios and requirements with the available frameworks. We developers would like to be able to pick a technology, platform, and tooling and get to work. However, you’ll need to study the available frameworks before you can make an informed decision. There is a great benefit in studying available options, “you learn what’s outside of your circle.”
You really can’t be in a hurry. Do you want to struggle later, or do you want to do your homework now? It’s like paper prototyping vs. coding and then changing it over and over. Pick you poison. I favor studying and paper prototyping.
My steps for learning about a framework:
- Read the documentation. RTFM – Read The Free Manual. Don’t just breeze through the API docs; be sure to read the information about the framework, why it was created, why features were implemented they way they were, what have the developers learned and how it has evolved. What are the happy paths for this framework. Some frameworks, straying too far from their happy path can be costly; what I mean is, at first it looked easy and fun, then real-world use case come into play and now you have to struggle to create workarounds.
- Read other developer reviews.
- Find sample projects that other developers have authored using that framework.
- Watch YouTube videos on the framework.
- Take course on the framework, e.g. Pluralsight.
- Write some throwaway spikes.
- Extensibility and plug-ability.
- How are the applications built with the framework themed? The ability to change themes and/or change the color pallet easily can be a critical requirement and can’t be overlooked.
- Finally, write an app that has real-world scenarios.
Ultimately you should make your choice based on your own research, your requirements, your teams capabilities, and not just what is new and shinny.
My Journey to Aurelia
I’ve been using ES5, TypeScript, AngularJS, Angular Material, and Ionic for building hybrid-mobile and SPA applications.
I was successful with each of these frameworks. But in the back of my mind, I kept thinking, there must be an easier, more productive way for me to author these types of applications. I had difficulties when I strayed from the happy path with Ionic and Angular Material. At times, layout or styling issues were a real pain.
It’s not the fault, nor a defect in these frameworks. Framework teams are publishing an API that must meet the needs and scenarios of, well, the whole world. I’ve used a hyperbole to illustrate their daunting tasks.
As a long-time framework and API architect-developer, I firmly believe that frameworks should not require too much goo code or ceremony to use them. I also believe that they should not have holes in common use cases.
One consideration that plagued me was theming. I checked out Polymer and the wide range of themes you can use day one. This was truly a breath of fresh air.
In the end, I chose Aurelia for the following reasons:
- It meets my requirements for the types of apps I’ll be building.
- Rob Eisenburg. His track record is flawless. I subscribe to and write my own frameworks like he does.
- Aurelia has full blown corporate support if your company or team needs it.
- They have a very active community on glitter.im where you can interact with many developers, Rob, and the Aurelia team.
- It’s extensible, pluggable, and flexible. It’s happy path is very wide and open.
- I can use any tooling I want. WebStorm, Atom, notepad, Visual Studio, Sublime, etc..
- I can author the applications on Windows, Mac, or Linux (including Raspberry PI)
- My applications are free of ceremony code. The only time I know I’m using Aurelia is when I import a framework module in a view model.
- Less framework intrusion means less onboarding time required to get junior developers productive.
My Aurelia Adoption Plan
Aurelia is in Beta 1 on the day I’m writing this. The team is working super hard and will over the next year provide out of the box themes, components, custom elements, etc. to really simplify while at the same time, greatly expand the out of the box capabilities of Aurelia.
I don’t want to take a dependency on Bootstrap or other cool CSS library, nor jQuery. Not that these are bad, or are poor choices because they are not, but I’m making a decision to write clean and simple apps with less external dependencies. I do want to know all the details. I know that in the end, my apps will be much easier to maintain over time, will be easier to write, and will be easily upgradable for years to come.
- Master Aurelia fundamentals such as: routing, data binding, module loading, etc..
- Master Aurelia components and custom elements. (if your an Angular person, think directives)
- Write my own set of components and custom elements to support my scenarios. I don’t need the kitchen sink, I only need to meet my requirements. Think, Yagni. You can easily extend Aurelia components or custom elements as requirements change.
- View data form HTML markup must be 50% less than what I’m currently writing in Angular. This is achieved by leveraging the Aurelia component and custom element capabilities, so that I or other developers won’t have to write ceremony HTML mark up.
- Write my own cross-cutting concerns components and services. For example: dialog, toasts, logging, client error handling, server error handling, security, etc.. No developer should have to fool with one of these concerns in client-side code, ever. A simple API provides these types of services for the entire application.
- Write my own SASS CSS themes for my apps.
- Create an one exemplar theme-able application for web, mobile web, hybrid-mobile, and desktop web that has all the UI Elements, and UI patterns that my current requirements demand. Prove out the components, custom elements, and data validation solution.
- Master unit testing.
- Master bundling, minification, and deployment scenarios.
As you can see, I’m putting the time in up-front (in advance of a big project) to solve and master the above basic application building blocks.
My first app that I’ll release will be a cross-platform, cross-device, password manager. In 2008 did a Code Project Article teaching on WPF MVVM with a Cipher Text Password Manager. I use the application everyday, some 7 years later.
This app will be published on Code Project, my blog, and github.
It will contain everything I’ve learned about Aurelia, all my components, custom elements, themes, and SASS CSS.
Crank is a cross-platform, metadata driven, code generator. Crank will generate any code for any language. I’ve used the C# version of this application for many years with great success.
I won’t be able to give out the source for Crank, but the app will be free, no license fee, etc.. I will publish a book and videos and will change a small fee for these.
High Octane Online Store System
As a side-project and possible revenue stream for my family, I’ll use the above to write a online store system. This will enable my non-technical customers to get online quickly. It will feature the ability to manage multiple warehouses, sell to their customers online, in person at a brick and mortar store, or portable kiosk. Each customer will have their own custom, customer facing web application.
Have a great day,
Just a grain of sand on the worlds beaches.