Has it really been this long?


Four days ago I got a four notices from the Badges robot on concrete5.org.  Apparently they added a new one for each year you've been a member of the site.  It's been pretty amazing seeing how far the platform has come, and what's different now. This post reflects a bit on that history, and looks to what the future might be.


Getting Back Into Web Design

In some ways, it doesn't seem like long ago at all.  In others, it seems like forever.  I was working at a print shop in south Minneapolis.  They had hired me to do process automation for creating plate files for their presses and do variable data, too.  They also had me re-do their website.

It took forever to do the website.  I knew a bit of PHP, but only really enough to read it and install blog software, and forum softare, install plugins, a bit of theming, but not much more.  .  I used some procedural Ruby code for the process automation stuff, but I didn't understand object oriented code enough to use a framework like rails to create websites.  

Several years earlier, I had basically written my own CMS in ColdFusion for the Minneapolis Club.  At the time, the web was pretty new and my brother and sister both worked there, so I kind of had an 'in'.  I had learned some html/css on the slow nights while working at Kinkos, they had online interactive tutorials for employees, and if there was nothing to do I also had super nice computers with really high (for the time) bandwidth to do research on.  The bid was for something like an 8-10 page website that they would update using Dreamweaver.  By the end, it had grown to a completely custom CMS that allowed editing a lot of different aspects of the site, I think over 100 distinct pages.  Page content, menus, employees, dunno, tons of stuff. All based on tables and transparent gifs and all those wonderful pre-real-css tricks you had to use. That version of the site is long gone, when it came up for re-design they had been approached by another company but our contract had given me the right to bid on a redesign against anyone else that bid.  I have the Graphic Artists Guild Handbook to thank for that.  It had boilerplate contracts that I used, also I think proposals.  By then I had kind of moved on from trying to do freelance and was working full time in real print shops instead of quick-print places, so I wasn't interested in maintaining the account.  

With the way technology had progressed since then, I knew I didn't want to use ColdFusion again. So almost all of my knowledge there was pretty useless. I also knew tables and gifs were obsolete, so there was a lot of learning about the new standards in that, too.

I did a ton of research at first, trying to figure out how to get all the content that they wanted on there properly.  I looked at a ton of different frameworks and platforms, but none of them really ended up working that well.  I ended up settling on Joomla! for the update to the site.  It was the most backward thing, trying to figure out how all the components fit together and worked.  Trying to find extensions that were close to what I needed and still allowed for customization was evil.

I think it was like 6-7 months working on it around my other duties, a lot of it working after hours at home researching and learning.

The day after I finished the upgrade, the announced a round of layoffs, including the guy that ran the digital printers that did the variable data printing that I programmed.  I inherited his duties as well.  They also started in on a bunch of revisions.  And a few weeks later, said that I had to figure out how to tie the website into their RIP system to allow for online proofing and revisions.  This could have been done by upgrading the system, but that would have been something like $20,000 or more, and require a monthly license to use their web service.  Not what they wanted.

And not really something that Joomla! could do either.  

Finding A New Platform

So it was back to research.  I was much better with my PHP / HTML and CSS by that point, and had done more research outside of work to try and get better with the object oriented PHP.  I knew Joomla! wasn't an option, so I started looking to see what else might work.  I thought I'd have to do Drupal, and tried to grok that again, and found it way too crazy.

That was right about the time that concrete5 was featured as the project of the month on Sourceforge, so there were a few different writeups.  I downloaded a copy and started researching how it worked, and right then I fell in love.

I have no idea why, but everything about the way that concrete5 was set up just made sense - every other system that I'd looked at just didn't seem thought out at all compared to it.

The hierarchy really hasn't changed since then, pages > areas > blocks.  Or list > model > data.  The way the page controllers connected with their sub-objects and returned their data to other objects like blocks and page lists was amazing.  The way packages work, blocks work, themes work, etc is all in many ways the same as then, too.  A lot of enhancements, refinements, and optimization, but still you can use API calls from 4 years ago with a fair amount of confidence that they will still work now.

The first thing I did on the print shop site was take and redo the theme using concrete5.  To be fair, when I did the first design in Joomla! it took forever in part because I had a lot to learn about css.  Our RIP system generated some pretty distinctive proof sheets with crops and marks, I made the theme match that.  Part of this was doing a negative margin thing underneath a bunch of repeating pngs with semi-transparent regions marking off the crop and bleed regions of each page.  It took me forever to figure out how to do that, but it was really what I wanted to make work so I kept at it until I knew enough to realize my vision.  The real hard part in Joomla! had been defining all the content regions that mapped to, um, whatever the add-ons are called in that system.  Just trying to customize things to match my design was so tedious and convoluted.  If I needed a new field for an application, it was a couple days to figure out where to patch things.

Thing is, it did take 6-8 months to get the CMS working seamlessly with the theme and content requirements.  

I redid enough of it to have a fully functional concrete5 theme in about two weeks.  Still, thinking of it now, perhaps a long time, but the difference was shocking.  Starting to make things to connect with our servers over the internet and import images for the reviews seemed super simple.  I started working on making a tagging application so that people could make notes on the high-res jpgs and zoom in, etc, but then things started really heading south down there.  I ended up walking out for reasons I don't want to go into, but a couple of months later they went out of business so badly that they couldn't do bankruptcy and didn't file some other documents properly - all the people left working there got no benefits, no severance, and I think no warning.  I don't think they even got unemployment.  Seriously messed up.

The Glorious New World of Freelance

I had a fair amount of money from a 401K at the print shop that I had been at before the one that I did the web design and development stuff for.  I hadn't rolled it into a new account, so they had sent me like a $4,000 check right around the time that I left the new company for me to enrol in a new 401K. I knew there was a hit, but I had no 401K to put it in, so took the early withdrawal and used that to invest in swag for mplsbikelove.com to sell over the summer while I tried to find work doing concrete5.  I for some reason thought that within a few months the market would be flooded with jobs for developers that knew this system, and that I'd surely make the money back in t-shirts and socks and hats within like 4 months, max, and then it would all be profit.

I ended up finding a couple freelance accounts to work with.  They would send me PSD or Fireworks PNG files and I would send back concrete5 websites.  It worked for a bit, but I didn't know the basics of how to actually run a business.  I knew pretty much exactly what I needed to do to do the work, though.  My background in print and especially variable data made slicing things for web pretty much child's play.  Well, most of the time.  I loved the challenge of figuring out how to make the html and css and javascript work to make really ornate and complicated designs.  In print, it was often pretty basic, but also much more exact.  When you are lining up vectors of screens through 3 or 4 different systems it can get a bit tricky.  Swapping out stuff in high end variable data is also pretty detailed - what is an EPS, TIFF or JPG and what is raw postscript data defining fonts and colors and corners? And if it's raw postscript, I often didn't define it, but had to measure using a variety of different units to give proper instructions to the person actually hooking up the data files and programming the rip.  I'd slice and plan the documents, be involved in the whole process, sometimes even get to tell the designers how they should plan the document to make it work the easiest through production.

The ideas of repeating regions and lining things up by exact pixels worked for both print and web. A lot of people have trouble making that transition, but I think my work in variable data printing and stationary automation helped a lot.  VDP meant flexible documents based on data - knowing that conceptually was a leg up on a lot of my colleagues in that world.  The stationary stuff was a bit different - distilling the data down to 'what is shell, what is imprint, how does it flow for different order qtys and presses, how are they ganged and prioritized and tracked' but in many ways relevant.  Having someone fill in a form on a website that generates out a PDF they can view and then approve to print also takes a fair amount of planning out what that document will be.  

I quickly found myself with more concrete5 work than I could do, or perhaps more accurately more work than I could figure out how to set up a business around, making accounts, tracking invoices, storing project files, keeping track of tickets / tasks and deadlines, etc.  I didn't know what 'standard' turn times were, either.  I was used to the print world where things would be done in a few days at most.  So instead of bidding the weeks that I should have on several projects, I hit much lower targets.  I'd often hit them for billable, but didn't take into the equation the time spent maintaining the accounts, so 15-20 billable a week was actually about 40-50 hours of real work.  It wasn't sustainable even though it was decent money, and I kind of stopped doing that and focused 100% on bikelove.

I spent a couple years I think trying to figure out how to port about a gigabyte's worth of PHPBB forum posts into concrete5. And trying to find investors / backers to make a nationwide platform for making local websites using the shared-core and package elements of concrete5 to make a site that would let anyone install a customized c5 site in a matter of minutes and create an advocacy community for their city right away.

That never worked out, and eventually I ended up selling the mplsbikelove.com site and moving back to working for someone else.  Robert at Hutman had donated hosting for bikelove for a few years and tried to help me with the freelance stuff. He had written his own php cms that was similar in a lot of ways to concrete5.  It had 'widgets' you could add to pages, then reorder or edit in place from the front end.  No fancy jquery modals and context menus, but still similar conceptually and in some ways architecturally.  He wanted to bring knowledge of concrete5 into his shop, and I needed steady work to recuperate my losses from bikelove and the fact that I hadn't really found any steady freelance work that would pay my bills.

That was right about two years ago.  My anniversary is in January. I've learned a ton by being there, too.  I was barely aquainted with things like version control systems back then, now it's pretty much required on every site I work on.  And really, every project I see other people working on.  The skill level required to simply be a developer now is much higher than it was 4 years ago when I started with concrete5, and it's light years away from the first sites I was going after 10 or 12 years ago or however long it was.

My, how things have changed...

Back in 2008, things were much different.  There were very few developers actually doing advanced stuff in concrete5.  The IRC channel was usually a dozen or so people.  It's not much bigger now, maybe 40 or so at any given time, but Frz was often one of those people back in the early days of the IRC.  Thoughts and feedback on how everything worked was so immediate, so organic.  It was really nice to feel that connected on a grass roots level.  You'd have a long day programming a c5 theme, be cooling down chatting with some of the other developers, and he'd log in, and suddenly it was 5 or 6 people all considering a particular programming problem (often the one you just spent all day on) and thinking of different ways to approach it.  Also thinking of how to make the core fix that problem more efficiently.  Ideas from the chat room would end up in the beta core a matter of days later fairly often.  This actually still happens, it's just that now the core is github and the process is much stabler and easier to track.

Now, it's thousands of people using it.  Awards from tons of places touting concrete5 as the best / fastest growing / whatever metric on 'state of the cms market' style surveys.

But in a lot of ways, it's still kind of the same.  There's still a pretty solid core of people that I've know for this whole time that are still working with it.  Some have moved on to other items as most of their day job, though.  Now concrete5 is kind of a sidebar for their other things.  A lot are still 100% focused on it and doing very well.

The marketplace has exploded, too.  Now there are tons of different packages to do all kinds of different things.  Tons of different themes.  Responsive themes - I remember when it first started coming up that the CMS needed to have a way of supporting mobile themes.  Now probably 60% of the themes I create at work are fully responsive.  It's totally ubiquitous - everyone wants it.  You used to use hacks and workarounds to do things like embedded navigation that could only be edited from the dashboard.  Now there are stacks and global areas and several different ways to do this. 

What Does The Future Hold?

The main stream development market seems to be waking up and taking notice of the platform.  I know of at least one publisher who wants to write a book on concrete5.  I've talked with a couple of developers that I know who were approached directly, so got a bit of an idea of what they want.  Then spent a good portion of the weekend researching what it takes to write a book like that, what other author's experiences were, etc.  Tonight I sent off an inquiry to see if they want me to write the book, I'm actually kind of optimistic that I might be a contender to do it.  And honestly, now that I know more of what's involved, I might actually try to contact a few different publishers and see what each thinks of the idea of backing a concrete5 book.

When I think about learning and documenting it though, I wonder if it might be better to go with print on demand and self-publishing.  I know a lot about what is involved in that, I'm not sure if it's worth it.  Though really, that way I could do things a bit differently and possibly publish in rich media on a website with membership access.  So code samples that could be searched and copy/pasted/downloaded for rapid application development.  Organized by task or function or more, so you read about how to do something like embed blocks site wide from a dashboard page, and see a how to that details each different way to do it in each different version of concrete.  

Anyway, I've been thinking a lot more about how to start keeping track of every aspect of what I do, and how to share that knowledge so that other people can write better code.  I just don't really know the best way to approach that.

Still, I think that the future for developing with concrete5 is wonderful and growing.  There is a ton of opportunity for people that really can 'get' how the platform works to break new ground with it.  I see far more potential for the way that concrete5 is set up than almost any other platform.  I can seriously tell you how to set up probably at least 70% of sites with concrete5 and save at least a few days if not weeks of development time in your process. 

I know that concrete5 can't do everything, but there really is a _lot_ that it can do.  That keeps expanding day by day.  I was watching a video from Corning earlier today, and thinking about how you will have to handle apps and interfaces and displays and data in a world like the one that they display.  It's seriously mind boggling when you think about it.  

Because, barring us collapsing as a species, we will have technology like this.  And people trying to write applications will have to figure out how to go from phone or tablet to full screen interactive wall or table at a moment's notice.  By that point, we'll be looking at c5 as an old relic of an archaic age when people used 'browsers' and looked at 'pages' on the internet.

What Should Shops Do?

I think that developing with concrete5 is seriously the future, and I'm diving in head first.  I strongly recommend that every developer or designer that makes php websites think about how to use concrete5. Compare it to your current development platform.  Simply try it on a project or two, preferably low priority ones that have a bit of flexibility.  You may lose some development hours on the first couple of projects, but after you get the feel of it things will go far, far faster.  It's not the cheapest, it's not the most powerful, but the niche that it hits is wonderful.  

You should also write up your experiences with it.  I know a lot of people are really loving it from the reviews and surveys, but there is very little that people are actually publishing on the internet.  Document how a site done in concrete5 instead of drupal or wordpress saves you time and money and lets you do more things.  Spread the word.  I subscribe to a google alert for "concrete5 concrete 5" and pretty much every day, it's nothing but articles and forum posts from concrete5.org and not independent people writing about it.  Until this changes, I feel like development may stagnate a bit.

Anyway, thanks for reading my thoughts on how I've grown with concrete5.  I'd love to hear other people's thoughts about how they learned or discovered it, and where they want for it to go.  

I'd also like to hear what people think about a documentation / skill building website.  I almost want to go this direction rather than try to publish an actual book, but the idea of seeing my words in print on bookshelves is kind of a vanity thing that I think I'd really like.  That means you've 'made it' right?  But really, we all know that print media is dead.  That's why I'm working making websites now and not trying to automate things at print shops.  So why should I want to go to a traditional publisher and have them promote things and print up thousands of copies on spec?  That's not what I've been about, ever.  Even in print, it was always print on demand, with as little waste as humanly possible.  It was about the only way that I could live with what I was doing.  Knowing that you could process 2500 orders as easily as 5 and literally cause the deforestation of an entire mountain was pretty intense.  Figuring out what people did keystroke by keystroke and then writing computer code to make them obsolete sucked too.

Now, it's rich media content for people to control themselves to promote their business with no exploitation.  I feel _so_ much better about that.