Taking over a large-scale Adobe Experience Manager (AEM) project


This week, we traveled to Toronto in order to negotiate with our primary Content Management System (CMS) vendor, Razorfish. We all know what the Agile Manifesto says about “Customer collaboration over contract negotiation“, so don’t get me wrong, I’ve never been a huge proponent of contract negotiations, but even I’ll admit that sometimes it does seem like a bit of a “necessary evil”. Particularly when certain vendors aren’t necessarily will to “play ball” or “come to the table” to collaborate and work to find mutually beneficial solutions (won’t name names right now, but HINT, its definitely not Razorfish!)
ALC initially started working with Razorfish back in 2015 (when they were still called Nurun before rival larger digital interactive agency Razorfish acquired them) on the “Corporate CMS re-design project”, which aimed to upgrade and migrate the entire “corporate.playsphere.ca” sub-domain’s content over to a modern enterprise CMS, namely, Adobe Experience Manager (AEM) which ALC has chosen as its corporate CMS. Of course in November, 2016 even larger rival firm Sapient negotiated an agreement with Razorfish to merge, creating a somewhat “super digital interactive agency”. (UPDATE 2020-02-18: and perhaps at the borderline “disturbing” scale, Publicis then acquired the Sapient-Razorfish — SRF for short — conglomerate, creating a frankenstein’s monster digital interactive agency with few remaining significant rivals for the big contracts, this entity now called “Publicis-Sapient-Razorfish”).
Since then, quite a bit has changed, as there were a number of “pillars” in the Darwin programme (collection of projects), which made it the single largest undertaking in ALC’s history according to most in-the-know who I’ve spoken to, coming in at a whopping ~$35 million total estimated cost. Whereas AEM was initially selected to replace only that “Corporate” part of PlaySphere, it has since been selected to replace the entire PlaySphere system (particularly the front-end portions), and provide a number of vendor integrations. This is because only the “Corporate takeover” portion of the Darwin programme was actually on track.
The Darwin portfolio of projects rather ambitiously aims to simultaneously rejuvenate and completely replace both our legacy PlayShere system and a very large number of its vendor integrations, alongside our Retail systems, part of our Call Center technologies, and, a number of other supporting systems that are expected to get small updates. Of particular contention are those myriad of 3rd party APIs we need to support and integrate, each provided by vendor partners, and needing to be consolidated in a number of ways. The aim is to reduce the total number of vendor touchpoints (vendors needed to be contracted with), Software-as-a-Service (SaaS) providers, and, other similar agencies/consultancies we need to work with and/or get support from.
As I shared with my team, I’m happy to report it was a very productive jam-packed 2-day trip. Most importantly, they’ve tentatively agreed to move their code repository for the Darwin project’s new AEM-based ALC.ca replacement for our prior PlaySphere system from their internal Stash (BitBucket Server) instance running within their network, and where all our codebase currently lives, over to our own BitBucket Cloud instance. They will also move away from using their JIRA Server instance as their “source of truth” for all tickets and issues, to instead using our JIRA Cloud instance which we have been using for over a year now. We’re aiming at mid-to-late May at the latest to get these cut-overs done, it will be alot of work to first test out “mirroring the repo” between instances and exporting then importing all the JIRA issues. All agreed though, to pull this off at least one additional trip would be recommended, to bring more of the team up to Toronto next time in order to “observe their day-to-day Agile methodologies” and which pieces of that we may want to bring into our new team as it grows. Agile will be a new thing at ALC in general, so I want to be really certain we “get it right” (and yes, I realize there is no such perfect combination right out of the gates, rather we need to just start somewhere and regularly evolve/tweak it as we go). However, towards still trying to have some kind of plan together, I always love referencing this meme:

After what I’ve seen so far, and my past experience at other companies, we will likely end up adopting some kind of hybrid of Scrum and Kanban. I am hearing that “Scrumban” term more and more, so we’ll see how that goes. Scrum seems like a great fit for project implementations, while Kanban seems like the no-brainer choice for all our enhancements, bug fixes, and “keep-the-lights-on” (KTLO) types of development activities.
With our current plan, its looking like we’ll finally launch one full year behind schedule in September, 2017 some time (that’s without true Agile so far, more like an “incremental Waterfall” approach so far, mostly due to vendor limitations and nothing spelled out in our contracts about how we want to and/or expect our partners to work). I’ve been told the September date is not negotiable and can’t slip no matter what, but also the famous like “September is a long month” (an inside joke reflecting the FUD). Will do what I can to prevent such a large set of initiatives and projects to ever need to be cobbled together again, and instead hopefully we can just do a great job maintaining this new AEM platform, so that all we need are little feature delivery sprints and minor projects.
Leading up to September, 2017 we will be collaborating heavily with the SapientRazorfish team, bolstering our current team of 5 with their 15+ active Developers (although with a tapering down towards eventually only having a few of them remain for at least a year in a support role during the “warranty period” as we call it, post go-live). The plan from our launch date onwards will be that our team slowly but surely ramps up to full capacity to be able to support the web application and Mobile App webview integrations that have been done within AEM totally by ourselves, and, to continue to build on that with various other business project, enhancements, internally drive innovations, etc. It will be an interesting challenge, and we’ll see how it goes.
UPDATE (2017-09-17): We finally launched the darn thing, and it wasn’t even the last possible day of the month as many expected! What a whirlwind the past nearly two and a half years have been (feels like I’ve done about 3-4 years worth of work myself, and I’m certain that if you add up all the person hours on this project including OT and “extra efforts” that went into getting this beast across the finish line, you’d come to like 100+ years of life force spent). But I can finally show off the new look of the webapp:

Example authoring, to choose which Components are allowed within a given Static Template in AEM:

Feeling lucky? Give it a try yourself now, at https://www.alc.ca
HTML Tutorial and Web History lesson
Today, something unexpected happened. I had the (somewhat unplanned and impromptu) pleasure of showing the ropes to the “new recruit” at work, a student here for a work term over summer break.
Now, we’re not necessarily doing that much coding here yet, as we’re still in the process of bringing back large portions of IT functionality in-house. We do, however, do a lot of software configuration, release management, testing/QA tasks, and, we are ramping up to use a major enterprise CMS to be able to create front-end content quickly (HTML/JS/CSS backed by JSP & EJB following OSGI structure).
I’ve always wondered in the back of my mind, if I were “in charge”, how would I more gently introduce the younger generation to the world of “enterprise programming”? Certainly the “enterprise world” is often significantly different, if not completely far-removed, from the real-world of cutting edge software development based on agile methodologies and lightweight web frameworks, co-developed with the customer in real-time, or implemented competitively overnight at a weekend hackathon. It is also far-removed from the naiively specialized world of “academic coding”, where “programming problems” (albeit sometimes very tricky ones) are assigned with a very clear set of up-front requirements and well-defined metrics for acceptance, where every assignment is given a certain amount of time to complete and graded for completeness and of course for “originality” or “ability-to-follow-the-book-without-copying” (where copying any minor component is seen as the devil’s work, labelled plagiarism, and ostracized).
Enterprise application development on the other hand, often times has no clear-cut requirements, no well-defined acceptance criteria (other than customer happiness) and is both behind schedule and over-budget before coding even begins. That thing about the no copying? Yeah that’s tossed out the window in favour of cutting corners and “getting it to market” as quickly as possible, often at the expense of quality (or in some cases even the development team understanding the solution, the most recent case that comes to mind is this hilarious StackOverflow verbatim copy “programming faux pas” from a Nissan connected car developer). All that being said, enterprise application development isn’t that hard, just more complex and frustrating than greenfielding, open source work, or even consulting. So it turned out to be a good opportunity to take a stab at it, as the student in question only had a year of Computer Science so far and despite some exposure to Java had not much in the way of Web development yet as those courses were coming later in the program. He did however, have a healthy interest in the Gaming industry, an industry which is increasingly finding an audience and monetization options for its wares on Mobile and Web platforms.
“The only thing constant is change”
IFTTT finally releases its own API, sort of, with “Maker channel” triggers
IFTTT finally just released its own API (sort of) when it announced the introduction of its new “Maker” Channel which may very well be the closest we ever get to a true API. It offers HTTP-based activation of Actions to carry our when invoked or Triggers which can be combined with another service.
The Maker Channel extends the power of IFTTT to any DIY project, big or small,” said the company in a recent blog post. “You can now build and connect Recipes to any device or service that can make or receive a web request.”
Since launching nearly four years ago, If This Then That (IFTTT) has provided a web-based platform for “thing” integration towards realizing the promise of the Internet Of Things (IoT) helping to make our lives simpler rather than more complicated as it often does as new technologies continue to be introduced.
For a quick refresher from my previous post on IFTTT’s role within the Internet of Things, it enables its users to authenticate/authorize and inter-connect a variety of tools, devices/sensors, applications and web services through unique “recipes” that are based on an “if this happens, then do that” formula. These could accomplish anything from the serious (such as automatically receiving a text message if suspicious activity is picked up by your home surveillance system), to the fickle but convenient (for instance backing up photos uploaded to Facebook which have a particular tag to a dedicated Dropbox folder). Recipes like these have all been created by the community and are free to use (unless you wish to mark your recipe private, and either way the data you enter into your recipe of course stays private and only a template of it is shared)
HTML5 Audio Player Jukebox

A jukebox icon (Photo credit: Wikipedia)
Here’s a piece of work I did on a freelance basis back in early 2012 for a client who allowed me to retain the full rights to the code as a “library” which I could distribute. (I offered them two prices of course, one cheaper rate where I retain the rights and one premium rate in which the code was exclusive to them and I would not distribute). After explaining that based on their request, I would be building it as HTML5/CSS3/JS front-end code that lives in the browser client and regardless of which choice they made it would be entirely possible for someone else to simply hit “view source” and/or sniff out raw traffic packets to copy it in full, they of course chose the cheaper option; they knew from all the hype around HTML5 in 2012 that they wanted it done in HTML5 and browser-based without relying on Flash (using Flash as a fallback only). Of course, the ease with which it would be copyable would depend entirely upon how well they protect their site through SSL-certs/code-signing/code-obsfucation/disabling-ViewSource or for example, put it behind a web viewer in a Mobile App or RIA viewer (Flex/Silverlight/JavaFX) and hiding URLs, if they really want it private. But that’s another point altogether!
They chose the cheaper option so I’ve been sitting on the code and until now I had been a combination of “too lazy”, “too busy” and “out-of-respect-for-them” not bothering to release or advertise the existince of said code. However, the time has come to unleash it! For those who’ve been at this for as long as me or longer, you may recognize that it is inspired heavily by some earlier 2009-2010 HTML5 audio demos done by the Mozilla development team as far as the look & feel; but I’ve added quite a few new features to it (for example the Flash-based fallback for old browsers like IE 5-8), CSS for a slick flat direct-link playlist if both HTML5 & Flash are missing, and the main feature which is support for both XSPF and JSPF playlist formats, which are by far the most popular open playlist data formats which really should be supported by all Online Music services (but that’s another story).
Ironically enough (as I blogged about benefits and annoyances of skeumorphs last year) it is more of a skeumorph for my old iPod shuffle which had two simple arrows (left for “previous”, right for “next”) than it is for an actual Jukebox, but I’m still calling it a jukebox where you can pick from multiple albums as long as they are all aggregated to the same XSPF/JSPF Playlist. Either way, I rather like it and think it borderline qualifies as a flat-design, web-based version of a Jukebox. It was also a disproportionately lot of work to put together considering I did the work for quite cheap and it was ultimately only going to be used to play a specific band’s few albums they had at the time online. As mentioned, it can pretty much support up to 1000’s of songs at a time (though I haven’t tested its limits or ran any browser comparison benchmarks or anything fancy-pantsy like that). Either way, it should theoretically fit as many as could fit into a single XML/JSON file without bringing your browser to a griding halt when trying to fetch, load and parse it, which is definitely in the hundreds if not thousands of lines of items.
Here it is, with a modest 4 sample albums (only one song per album for rights purposes) with royalty-free music I downloaded from Jamendo before they went under and/or re-focused their “open music community”.
FOAF and the Facebook Death Star
Since the February confirmation of the Facebook IPO, Facebook has continued to stagnate in user-base yet as an organization it holds no punches as it attempts to grow internationally, and its stock price continues to soar as Class A shares finally open up to the average person (major investment firms had first dibs at the initial Class A shares released during the IPO). Facebook founder and owner Mark Zuckerberg maintains 58% control of the company through complete control of Class C shares and veto power over all Class B shares. This is indeed shaping up to be a new Galactic (global internet) Empire, similar to that sought by a young Annakin Skywalker in Revenge of the Sith. The new schematics for a seemingly unstoppable battle station would be the carefully-timed Facebook Timeline rollout along with Facebook Connect and OpenGraph protocol. So if one can draw vague parallels between Mark Zuckerberg and Darth Vader, who can play the role of the Emperor? An obvious choice would be early angel investor Petr Thiel of PayPal, but a more appropriate figure is Microsoft CEO Steve Ballmer, whose company owns approximately 2% of Facebook:
Symbolizing Facebook as the death star is hardly a new concept, just check out these previous references.
Enter the FOAF project and its RDF/XML data format for representing friendship connections in a social network, as well as personal interests and contact info. Although the FOAF file format is designed first of all to be machine readable, it is often desirable to be able to browse it as if it were a usual Web page.
Read the rest of this entry »
BC$ = Behavior, Content, Money

The goal of the BC$ project is to raise awareness and make changes with respect to the three pillars of information freedom - Behavior (pursuit of interests and passions), Content (sharing/exchanging ideas in various formats), Money (fairness and accessibility) - bringing to light the fact that:
1. We regularly hand over our browser histories, search histories and daily online activities to companies that want our money, or, to benefit from our use of their services with lucrative ad deals or sales of personal information.
2. We create and/or consume interesting content on their services, but we aren't adequately rewarded for our creative efforts or loyalty.
3. We pay money to be connected online (and possibly also over mobile), yet we lose both time and money by allowing companies to market to us with unsolicited advertisements, irrelevant product offers and unfairly structured service pricing plans.