The Artisan Files: Bob Bloom

This week I’m happy to interview Bob Bloom. Bob is a developer at LaSalleMart, podcaster, and recently made the switch to using Laravel as his framework of choice.

Can you tell us about yourself?

Third generation Torontonian, proudly Canadian, 51 years strong, married nearly 20 years to my incredible wife. Three school aged children. How’s that for a tweet styled intro?

At the University of Toronto, I was one of the few commerce students who took extra computer science courses beyond the intro course. My comp sci teaching assistant told me to stop wasting my time in commerce and switch on over to computer science. I demurred, and graduated with my double specialist degree in accounting and economics. As a result, looking back, my background is much more rounded.

Since I’m not a computer science grade and since I never had jobs that were pure development, I never considered myself a “real” programmer. I can script, hack, and reverse engineer with aplumb. It’s been a long journey identifying myself as a “real” programmer, but last year I finally “crossed over”, seeing myself as a “real” programmer.

At Y2K, my I.T. contracting career was going gangbusters, as business analyst and project manager. Everywhere I went I was the most technical business analyst, bridging users with the techs. In 2000 I was streaming into the project management side, seemingly on the way to the PMI designation.

In the summer of 2000 came our first born. I arranged to take a couple of weeks off from my BA engagement. Upon my return was a big fat raise and outright PM responsibilities. Well, within hours of Aaron’s birth I received a phone call that I was not to return to my current contract. Little did I know that that was the end of my contracting career.

Ultimately, I ended up hanging my shingle out as a consultant, simply because it was my only viable career opportunity. I already had a company through which I contracted. I had the accounting and tax stuff already established. So, it was a small administrative step to consult; but, it was a giant leap into independent consulting.

At the time, Joomla looked like the up-and-coming thing to me. I studied Apache, MySQL, and PHP whilst learning Joomla 1.0. My idea of learning Apache was to go through all the directives in php.ini. MySQL came out with version 5 at the time so I read up on the new triggers, views, etc. A good thing that I can do “self directed learning”; otherwise, forget about being an independent techie consultant-slash-dev.

I read the how-to (e-)books about independent consulting, but there is no education facility like real experience. I found my first round of clients through Craigslist, tapping a rich vein of local — and then remote — clients who refused to pay me. Most people were not subtle. Some were quite clever.

During this period, I seem to gravitate to one area of Joomla: the Virtuemart ecommerce extension. Virtuemart was the popular FOSS ecomm add-on for Joomla, and having a technical and business background I was able to make heads and tails of it. This add-on was itself a fork of a standalone ecomm program, adapted for Joomla. I was able to untangle the spaghetti code and fix a lot of problems. Being very popular, the Virtuemart forum was rife with people posting problems. Replying to posts, people eventually contacted me to help them with their problems. These people were apt to pay because they were in a bind, and they wanted me to answer their emails when more issues arose. Some of these people are still my clients — I consider them my Family of Clients.

An attractive Joomla ecommerce add-on was released for Joomla 1.5. I maintained a distro of that add-on, which included Canadian HST/GST/PST handling. When development slowed to a crawl, I forked it. Twice! For Joomla 1.5; and, I forked their early (more like premature) Joomla 2.5 release.

I called these forks LaSalleMart 1; and, LaSalleMart 2. Before diving into the second fork, I made a commitment to learn developer tools, as I was hitting a wall. I installed Ubuntu from scratch, bought PHPStorm, and learned a ton of new things including Git and Phing. It still amazes me the extent to which the software is free, but it is a significant investment learning it.

It turned out that the original extension was never released for Joomla 2.5. So my fork, LaSalleMart 2, represented the production version of the original for Joomla 2.5. That was quite an effort. I confess here that I was lucky that the original extension maintained a semi-active GitHub repository so I was able to pluck code from the repo which proved essential. But apart from that I was just very persistent. Only a precious few sites use LM2. When it was released, Joomla 3 came on to the scene.

There was so much Joomla 1.5 code in LaSalleMart 2 that converting to Joomla 3 would probably be more painful than just starting fresh. The superb Akeeba Framework on Framework for Joomla had come into its own so much that it was included with Joomla 3.x (that’s another story). So I decided that before LM2 made dollar one, I would abandon that massive development effort in favour of building a new LaSalleMart from scratch with FoF for Joomla 3. I succeeded in bringing LM3 to fruition, which was wonderful expression of what Joomla/FoF ecommerce could be. It was an intense effort, including a huge behind-the-scenes build and update mechanism. From commit to live site update was thirty minutes. Not weeks or months. Continuous Delivery in the Joomla-verse!

My blog and podcasts get into the nitty gritty about what triggered my move out of Joomla. Essentially: the Joomla 3.x versioning policy had changed, opening up the possibility of seeing new Joomla versions prematurely obsoleting LaSalleMart 3.

To have abandoned LaSalleMart 3 after such an intensive development effort, just as it was on the verge of earning a return on investment, was a incredible decision. I was blistering mad, and had a difficult time keeping my blog posts and podcasts from descending into rant rage. Furthermore, I was abandoning a niche I had built up over the years, and this investment was going down the tubes.

But, I had suffered through two Joomla version changes that necessitated huge investments in updates. The dev experiences were terrific, but my business was suffering profoundly. I concluded that the risk of not earning an RoI on LM3 was so great that the prudent choice was to abandon Joomla. Concluding is one thing, taking action is another thing. Well, in April 2014 I dropped Joomla. In May 2014 I decided to learn Laravel.

Can you tell us about your switch from Joomla to Laravel?

Joomla is an enclosed environment, so programming Joomla add-ons is very specific to Joomla — but not representative of the wider PHP world. Joomla has its own way of doing user management, access control, updating, etc. When I set out to learn the Laravel Framework, I thought it was a similarly defined environment. Oh no! The Laravel Framework is but one element of the wider world of building web applications.

For me, Laravel hit all the right notes.

Laravel attracted me because it looked like a great entree into web app development. Modern. Trending. Plus, there is a tremendous amount of material on the internet. The November 2013 php[architect] Magazine featured Laravel (“Laravel – A Modern PHP Framework”, page 28ff), that reiterated everything I had read about Laravel. My impression was Laravel 4 being the product of years of growing pains, a version that found its stable footing. Laracasts was a new & uniquely powerful accelerated learning tool. For me, Laravel hit all the right notes.

Not coming from another PHP framework, my learning curve was (and is) immense. I dove into Laravel, and into the wider world of web app development. I found it tremendously confusing, lacking the context to understand what everything really was. After surveying the servers, the build tools, the development environments, the software techniques, and — don’t forget! — Laravel itself, it was clear I had to pull back. First I’d become proficient with Laravel and whatever immediate tools and techniques that were key in learning/using Laravel. Then, I would broaden my skills further.

The only way to learn is to build an app. I built my own blogging app from scratch. I abandoned Joomla to eventually build my own CMS — seems kind of funny. I call my blogging app LaSalleCMS. It’s on GitHub, but no sane person would use it. I did present it at a fall Laravel Toronto meet-up (thank you, #LaravelTO, for the opportunity). After this presentation, I started a very deep refactor, packaging big chunks of it. When this refactoring is done, it might be of interest to others.

This refactoring is on hold while I dive into LaSalleMart 4 development. My initial LM4 focus is on building an internal API. Once I get a handle on this internal API, I want to bring these techniques into LaSalleCMS. So another LaSalleCMS refactor is on the way.

It took from May to October to get LaSalleCMS one point oh done. It is now powering all but my Media website, so it is for-real.

In 2015, I am building my software triplets: LaSalleCMS, which is in the midst of refactoring; LaSalleCast, my e-broadcast platform (last to be built); and, LaSalleMart, that I am working on right now. LM4 will replicate LM3, with some twists.

Although I think of my software as three distinct apps, in reality they are an integration of a lot of individual packages. Ah, creating Laravel packages! A long way from that day last May staring at my screen, wondering why Laravel’s “You Have Arrived” message had not arrived (answer: insufficient permissions).

Surprisingly, I’ve not lost any sleep moving on from Joomla. Now, I am a more powerful developer than I’ve ever been in my life, and I have not yet peaked. My skills have vaulted, and are still ascending. My apps are more powerful than anything I’ve ever done before. LaSalleMart 4 will smoke my LaSalleMart 3 achievements.

My move from Joomla to Laravel has been gruelling at times. It’s been a massive investment after an elongated period of truncated RoI with my Joomla LaSalleMarts. I am happy I switched to Laravel.

What do you typically build? Client work, products, etc…

I set up the sites from scratch. Install the extensions/add-ons. Install the template/theme. Set up users, menus, etc. Modify the source config files and views. Tweak templates/themes. Spend quality time in PhpMyAdmin. Being full service, I’ll enter product data, set up the checkout, review settings, bring in articles (from Word — yuk!).

Then, there’s the software to build.

What was the hardest part for you picking up Laravel?

The hardest part of picking up Laravel: (i) the scope of learning; and, (ii) changing the way I develop.

Not coming from another framework, I had to learn about web application development in general — not just the Laravel Framework. There is a lot to absorb.

My own style of development has changed. SOLID principles, testing, command bus and events, and on-and-on.

The hardest thing about Laravel itself, for me, is namespacing combined with Composer. Especially for packages. Other people trip over RESTful routes & controllers, deployment, environments. For some reason, PSR-0/4 namespacing with Composer autoloading for Laravel packages is my major #PITA .

Do you have any advice for others wanting to make the jump into Laravel?