Thinking hard about a project launch

Here at Oasis Digital, we are always agile, and depending on the project needs, sometimes use Agile (in the “capital A” sense) processes extensively. Yet regardless of agility, iterations, steering, and so on, the planning and decisions made at the beginning (and in the early months) of a project often have profound and very difficult to change consequences later.

Therefore, while we would never argue for the straw-man Waterfall, we aim to think very hard about a project at the beginning.

Continue reading Thinking hard about a project launch

Software Product Quality at Oasis Digital

A long-studied topic

Decades ago, business guru Philip Crosby famously defined quality as “conformance to requirements”. This definition seems useful in software development only to the extent every aspect of the software has been comprehensively understood and written down – rarely the case in real projects.

Fewer decades ago, software and consulting guru Gerald Weinberg slightly less famously wrote that “Quality is value to some person” – an insight more applicable to our context here at Oasis Digital, consultants and developers of custom software products. (Incidentally, to gain dense insight into software development and other topics in well-written tidy packages, read Weinberg’s books.)

Still, to point out that quality is whatever someone (typically a paying customer) says it is, doesn’t help all that much with a problem we face regularly.

I want a high quality software product, but what does that mean?

At Oasis Digital, customers often come to us with a vision, or partial written requirements, for a software product or system. Around this essential kernel, there are numerous possibly-implied desires or requirements, many related to quality.

What should an organization (or person) want, if they generally want a good, high quality product? We think of the answer to this as the implied requirements for high-quality software.Recently the team here started gathering a list of quality attributes (special thanks to Paul Spears for kicking this off on a whiteboard for all to see). Here is our checklist of desirable attributes, requirements, meta-requirements, and other aspects of quality or otherwise “good” software.

Quality checklist

The software we work on most often has both server-side and web/tablet/mobile UI, so our checklist contains a somewhat broad mix of topic areas.

Functionality

  1. The software works “on the happy path”; it has all the specified desired features.
  2. The software handles numerous potential error conditions well; it fails gently, and visibly. It recovers, or fails clearly if it can’t.
  3. The software implements a workflow at least as friendly to users as envisioned; ideally even more so.
  4. The software augments, rather than consumes, human mental bandwidth while using it.
  5. The features are generally composable where appropriate. That is, when a pair or set of features are more valuable when used together, they can be used together and work as expected.
  6. The software conforms to legal or regulatory requirements to which the subject; achieving this often requires cooperation among developers, customer representatives, and sometimes experts in compliance. In some projects this may be a minor aspect, while in others it is a primary defining motivator.

Support and operations

  1. The software captures logs of events that go wrong (and generally also of things that go right); it does so in a manner suitable for aggregation and analysis, with generally well considered log levels, a machine-readable log format, and so on.
  2. The software has features suitable to help with support efforts; for example it shows what version of the software is in use, helpful error data is exposed (in log as well as, where possible, on screen) rather than discarded, etc.
  3. The software is operations-friendly. It has switches, features, or other attributes helpful for operations teams responsible for keeping the software working.
  4. The software does not forget facts to which it has been exposed; where technically feasible, it has an append-only, log-structured view of the world. This both supports debugging efforts and future not yet known requirements.

Appearance and behavior (UI/UX)

  1. The user interface conforms to some design system, its layout and appearance are not completely subjective and ad hoc, but follow some understood and well considered guidelines for appearance, layout, etc.
  2. Unless the software is either very large (with a large budget), or is an art piece (such as a game), it does not “go its own way” with an ad hoc design.
  3. The user interface is aesthetically pleasing, in the subjective sense. (To whom?)
  4. The user interface further has suitable animations or dynamic style behavior, suitable for its design system.
  5. The user interface is themeable; at least its colors, and possibly other aspects, can be adjusted to fit in coherently with other software that uses some defined color palette. The user interface code should therefore use appropriate color theme variables or similar mechanism, not be hardcoded to match a design system or ad hoc requests.
  6. The user interface is responsive; it makes reasonably good use of a wide range of screen sizes. It is not a fixed size for a single screen size, unless its target (embedded) deployment environment is similarly strictly limited.
  7. The user interface does not suffer the “keyhole problem”; when presenting the user with a significant amount of data, it makes good use of the display to show the user many options and useful context.  http://www.aristeia.com/TKP/draftPaper.pdf
  8. To the extent of the user interface presents data in tabular form, the tables presents numeric and text content with suitable alignment.
  9. The user interface features the variable contents (data) and more prominently than fixed labeling; a well-chosen design system generally will achieve this goal out-of-the-box.

Operating / human environment

(As of this writing, most of the software we work on has a web user interface, and that shows in this checklist.)

  1. The software supports all current browsers, and possibly (depending on target deployment environment) one or more obsolete browsers as needed.
  2. The software has good accessibility characteristics, including testing with a screen reader or similar assistive technology.
  3. The user interface visually scales well in response to user font size overrides; it does not attempt to block the user from changing the font size, and its layout remains usable across a range of font sizes.
  4. The user interface contrast levels (as supported by the design system) are high enough to pass accessibility testing.
  5. Color is used effectively to maximize the speed of comprehension; but no information is ever presented only in the form of color, so that the software remains workable for users who don’t perceive color fully.
  6. The software is reasonably compatible with its platforms internationalization capabilities; and if needed, has been (or can be) suitably localized.

Performance and throughput

  1. The software has been tested, and works acceptably, with a realistic date volume. It is often necessary to obtain or generate test data of configurable size to verify this need has been met.
  2. Performance characteristics in error handling characteristics have been considered jointly; so that an occasional error does not completely halt the throughput capabilities of the software. It is possible to move past or set aside a failure case and continue meeting throughput expectations in the case of occasional error.

Security

  1. The software is built on a platform or framework choices which have reasonably well considered security characteristics; the software cooperates with this platform in such a way to generally inherit those characteristics.

(Security could fill books, not one section of a single blog post. For a software product applied primarily to an internal, benign audience, the above is probably sufficient; but for software deployed to the open Internet, or in other cases where hostile actors are expected, appropriate much more substantial security design and implementation is needed.)

Development Process

  1. Intentionally chosen, considered process appropriate for the project
  2. Regular demos or other progress presentations to stakeholders
  3. Regular code review, before (not only after) code enters the mainline of development
  4. (of course many books could be and have been written on development process!)

Internal characteristics

It’s possible to write software which externally does everything it is required to do, but internally is a shambles. Some thinkers imagine that this is the timely and inexpensive way to create software. We have not found that to be the case. Rather, to achieve external quality without overwhelming cost, internal quality is vital. We strive to create reasonably good internal quality without being explicitly asked to do so. Internal quality characteristics often include:

  1. Consistent code style, applied automatically
  2. Linting, applied automatically
  3. Internal and cross project code reuse – general avoidance of duplication
  4. Architectural consistency across portions of a system
  5. Consistent use of suitable platform features; don’t reinvent the wheel, don’t blindly apply techniques from one platform to another

Making sense of Quality for a customer project

This list is long (and could grow much longer). Achieving these things may consume substantial time and effort. At the same time, software projects often arrive at our door already under schedule pressure. To manage this conundrum, we work with customers to consider this list as a default; a list of things that probably should be done, but which a customer might choose to skip some items for schedule or budget needs. For each aspect of quality, a certain amount of minimum attention is needed (and automatically applied by a high-quality software team), but beyond that there is a range of possibility subject to customer priority.

 

Frameworks and commercial ecosystems

Or, “why we don’t teach Aurelia”

Here at Oasis Digital and its sister company (Expium), we offer training and services concentrated around various languages and frameworks:

  • Angular
  • TypeScript
  • Node
  • The web platform in general
  • JIRA, Confluence, and other Atlassian products (Expium is an Atlassian Solutions Partner)

There are many reason – technical, history, intentional, and accidental – around how we ended up with this set of technologies as our 2017 training and consulting focus.

I was reminded of one key factor today while watching a video from last year of a talk by Rob Eisenberg. Rob is exceptionally sharp, and seems to have a good sense of taste in designing frameworks for developer satisfaction. But I found myself in disagreement over his thoughts around web framework adoption. Rob argues that frameworks like his (Aurelia) are stronger, better choices to build on than frameworks like Angular and React, because first-party training and support services are available for Aurelia from the makers of Aurelia. This initially seems like a compelling pitch, I can see how it would woo some decision-makers. Here is a snippet of one of the slides along these lines, pointing out first party training as an advantage:

But I think ultimately this works out much less well than Rob describes. Why? Because this first party set of training and consulting offerings leave less space for a thriving commercial ecosystem to develop around a framework.

Let’s look at Angular for example. Here at Oasis Digital, we aim to be a leader among many firms around the world, who provide training, consulting, etc. for Angular. Our customers are quite happy with the availability of these services from many different companies; it reduces their risk and means they can shop around for the best fit. Moreover, because Angular has created opportunities for companies like Oasis Digital, it has facilitated a growing commercial ecosystem revolving around the framework. Much the same applies, for example, to React and Vue.js. This is a virtuous cycle. The non-service-offering core team leaves room for others to provide services, which in turn makes it easier and safer for customers to adopt the framework.

(A second example at Oasis Digital’s sister company Expium: Expium focuses entirely on the Atlassian product suite. While Atlassian offers online video training options, Expium’s offerings include things like live human training that don’t compete directly with Atlassian’s offerings. Atlassian enjoys a thriving commercial ecosystem.)

Of course it would be possible for companies like us to offer training and consulting focused on Aurelia. But we don’t want to do that; we like the people responsible for the framework. If we offered services for Aurelia, we would have an inherently competitive relationship with the company behind Aurelia, vying for the same customer opportunities.

This situation applies to various other frameworks and other technical specialties that we could choose to focus on; with so many choices, it inevitably feels wiser to choose those where we can be allied with the core teams rather than in competition with them.

I believe that overall, this is quite important in understanding why some frameworks gain enormous momentum and others do not. Creating this kind opportunity for a commercial ecosystem is an immense competitive advantage to those companies who can offer a framework without needing to build a business directly around it – like Google and Angular.

 

Angular 2 – Staggeringly Ambitious

By now, most readers know a little about the motivations and features of Angular 2.0. Here I recap them briefly, these are ideas I have seen Angular team members say in conference talks, mixed with others I have inferred.

  • Performance, and design/API changes needed to achieve it.
  • Accommodate the changing web development environment, including Web Components.
  • Embrace JavaScript / TypeScript / Dart progress.
  • Replace Angular-specific features with web platform features.
  • Dynamic Loading, especially for faster mobile startup.
  • Easier learning curve, though it is unclear how well this will pan out, given the large pile of dependency technologies.
  • Scale up to complex applications effectively.
  • Excellent tooling support, which again helps scale up development teams.
  • Server-side pre-rendering – SEO Friendly and mobile friendly.
  • Server-side template compilation (as a build step), for faster application start.
  • Leverage web workers – ideally this will be trivial, for use in almost any application.
  • Leverage RxJS, make it nearly as easy to create an end to end real-time/reactive system, as it was to create a old-fashioned manual-update application with the older tools.
  • Retain the large-scale corporate development appeal which AngularJS 1.x has enjoyed.
  • Keep up with the competition! React, for example.

Putting all this together, my assessment is that Angular 2 is staggeringly ambitious. Not for any one goal (most of the goals and features above, are present in at least one competitor); but rather, it takes ambition to combine all of the above into one framework, then to drive that framework to completion fast enough for all of these things to be of current interest.

But, will it work?

At Oasis Digital we have been following the Angular 2 alpha versions for months now, and we have multiple applications underway on Angular 2. We know customers who are already deep into production application development on Angular 2. We have taught “early start” classes on Angular 2, and have our curriculum well underway to teach full-length “boot camp” classes. We were thrilled to see the beta version ship earlier this month.

From all the above, and studying some of the competition as well, it seems likely that Angular 2 will achieve its technical ambitions.

Hazards

There are some risks and challenges facing the Angular 2 team, they are well aware of these and working hard.

Size: So far, as of beta.0, Angular 2 has surprisingly substantial code size. There is work underway to trim this, but the extent of success is to be determined. Code size might be the unavoidable cost of ambition.

Dependency size: Angular 2 has mercifully few dependencies, but one of them (RxJS “RxNext”) is important, powerful, and large. This can be minimized by including only the pieces of Rx that a given application actually uses, but a complex application written using Angular 2 and much of RxJS will, unless things change greatly, end up with a big total code size.

Development pace: because Angular 2 is so ambitious and large, it has also taken a while to build. The competition has not stood still, so there is risk that by the time Angular 2 is fully out the door, it may have fallen behind in some key area. This risk is much more well-managed now that the product is in beta.

Innovation: There are other alternatives out there, radically different and with some chance of being radically better. Imagine if, for example, something like Elm were adopted by one of the major technology companies.

Style and preference: for good reasons, Angular 2 has a split between code and template. This design choice has served version 1 very well, and while there are technical reasons to choose between a code/template versus an all-code, that choice is also to a significant extent a matter of style, preference, and fad. If the prevailing preference moves toward and all-code approach, this could be a challenge to Angular 2 adoption.

Place Your Bets

There is no sure thing, and there are significant unknowns and hazards. But I will step out on a limb with the following (scoped) prediction:

For “enterprise” applications, which primarily run behind a firewall, contain extensive functionality, and are developed by large teams, Angular 2 will turn out to be in the top two JavaScript frameworks over the next five years.

 

Taking CSS Seriously

At Oasis Digital, we have spent much of our effort over the last several years creating complex “single page” web applications. There is much to say about that, but today I’m writing about one specific sliver: styling the application pages with CSS. To do good work at scale when using CSS to style an application (versus a one-off “webpage”), the only path to success is to take CSS seriously as a language, and study how to use it in an idiomatic, semantic, maintainable way.

Unfortunately, thinking about CSS in this way is considered far into “advanced” CSS territory, and these topics received almost no attention from the countless online and off-line resources to learn CSS.

What does it mean to take CSS seriously? Briefly, it means learning the technology and patterns of use in depth, by studying what others have done and thinking about why and how to solve problems.

Idiomatic CSS

CSS written by experts tends to follow many idioms. These are patterns that have been found useful again and again: a consistent order of selectors, consistent use of white space and other formatting, and so on. There is a popularly cited online resource explaining some of the most common idioms, and A List Apart (which you should probably read extensively) has a busy topic area around CSS.

Robust CSS

css-is-awesomeDo you always use the same browser, with your window the same size, with the same settings? Then your CSS is probably not robust at all. It is quite easy to accidentally style in such a way that the slightest disruption in the layout causes unexpected unpleasant results.

The way to robustness is exposure to ongoing change. Use multiple browsers, and switch often. Adjust your font size every day up or down, for a good reason or no reason. Change the width and height of your browser window, don’t just always leave it maximized at whatever very common screen size you happen to use. Do you work on a PC? Try a Mac sometimes. You work on a Mac? Your CSS-styled pages probably change in some minor but irritating way if you haven’t looked on a PC.

Good CSS is robust. It is specified sufficiently but not over-specified. A particular anti-pattern to avoid: layout some elements; observe their width on your particular browser and settings; set the width of an element that is supposed to contain them to a hard-coded number based on that single observed width; then watch what happens when some minor difference in font or other matter makes something a little bit wider than you expected.

Appropriate CSS

A hammer is a great tool, but not every problem is a nail. Grid systems are wonderful, but not for every element on every page. To take CSS seriously, we must learn when and where to use grid systems, ad hoc floats, that shiny new flexbox, and even an old-fashioned table.

Layered CSS

Many projects today start with a CSS framework like Bootstrap or Foundation. Working in this context requires a keen awareness of how your CSS interacts with that provided by the framework. It is common to see CSS which randomly and arbitrarily overrides rules set by such a framework, with no regard for what sense those framework provided rules made. The typical result: layer upon layer of overrides, trying to fix a resulting problem by adding layer upon layer of of more overrides.

The key to winning this battle of layers is to stop fighting. To use the delete key extensively, trimming away excess CSS to fix problems rather than adding more. Adjust variables provided by your framework, instead of ad hoc overwriting its calculated class attributes. Understand exactly what layers are needed and why.

Semantic CSS

“Semantic” means “pertaining to the meanings of words”. But the problem many of us have around semantics isn’t so much of wrong meaning, but of applying the wrong names to the right meaning.

It seems everyone is taught, on their CSS journey, about the evil of the in-line style attribute. As a result, we see in the wild many CSS classes like this:

.float-right { float: right; }

Thus allowing the CSS user to type class=”float-right” instead of style=”float: right;”.

This of course misses the point of the admonition against in-line style completely. It is not the literal use of the style attribute that is the problem, it is that the idea behind CSS is to mark up content with classes which say something about what the content is, then use CSS separately to apply a visual layout and so on.

If you can look at the name of a CSS class and know exactly the style settings it contains, it is probably not a very good name. But if you can look at a piece of content, and tell what CSS class you should apply based on what kind of content it is, you probably have a very good name.

Did I mention, don’t actually write CSS itself?

CSS is lacking critical facilities for abstraction and removal of duplication. There are persuasive arguments floating around that CSS is too broken to ever be fixed; and I would not argue against that. But given that we are mostly stuck with CSS for many types of applications, it is necessary to use a layer on top of CSS. The usual contenders are Sass and LESS. This means that all of these goals mostly apply to the Sass or LESS you write, rather than to the CSS generated from Sass or LESS.

People who have studied both usually conclude that Sass is a better choice than LESS, and indeed the former is what we most often use.

(A helpful tip: if you are using a CSS framework like Bootstrap or Foundation, use a version of those which is supplied using whichever language about CSS you have chose. For example, if you use Sass, use the Bootstrap Sass version – don’t use the normal Bootstrap LESS or the bare Bootstrap CSS files!)

Maintainable CSS

The net result of all of the above is maintainable CSS. CSS which you can keep adding to, in an incremental way, as the application you are styling continues to grow and improve. CSS which you or someone else can understand a year later. CSS which you can be proud of when someone looks under the hood.

Balanced CSS

CSS is not ideal; it has gradually accumulated features since the emergence of the web and therefore has legacy concerns, among other problems. The CSS to solve any particular problem might not be able to meet all of these design qualities at the same time. Therefore, good quality CSS strikes a balance: semantic enough, robust enough, idiomatic enough, and so on.

Rapidly Written CSS

Some of the ideas here sound like they could take a long time to code – but good CSS is faster to complete – bad CSS burns up far more hours than good, in the quest to create a finished system.

Of course, mastering tools can take a long time. The payoff is that a master usually creates code (CSS or otherwise) with high “first time quality”.

</rant>

At Oasis Digital, we are not perfect. We do not yet do all of these things perfectly all the time; there is sometimes a tradeoff between delivery speed and polish. But we do take CSS seriously, and we work hard to move in the right direction along all these axes.

 

Has Google Crossed Over?

In the life of corporations, especially technology companies, there appears to be a tipping point where they cross the line and begin to bleed their customers at a greater rate than they provide new value. A couple of good examples are Apple, Cisco, and Microsoft. Earlier examples are IBM, Digital, and Wang.

microsoft-windows-xp-logoWhen Microsoft rolled out XP they demolished the competition and dominated almost the entire PC market. Once they felt the battle was won, they almost completely stopped innovating and providing value. There was little offered to bolster XP over the coming years and the market moved away from them. Microsoft’s focus in these years was building their bottom line, especially through licensing. Prior to XP licensing was important, they had to make money, but innovative value lead the way. We can clearly look back today and see the missteps they made in mobile, tablets, and netbooks.

smarnetCisco is an even clearer case. They built their company with strong marketing and strong value. Part of the value they created was through their maintenance programs (SMARTNet) on their products. This service cost money and was built into every sale providing rapid updates and support for all sizes of customers. Over time they became obsessed with these fees, increased them year after year, held customers hostage, and relegated any “uncovered” products useless. They had almost completely eliminated any real competition in the networking space but opened the door when they stopped taking care of the customer first. Once profits came first customers started leaving them and continue to do so at a strong pace.

apple_logo_rainbow_6_color-260x300Apple is a unique company in that they have actually gone through this cycle twice! In the 1990s they were on fire and poised to take over the PC space. Their operating system was polished and feature rich and their hardware was very good. Their arrogance in thinking that only they were capable of making decent hardware eventually opened the door for Microsoft. They fell so low that Microsoft invested heavily in them to prop them up and avoid Apple disappearing. What eventually happened is a literal repeat of history. They are riding high but clearly their view that they have to completely control hardware opened the door for Android and Google. It will be interesting to see how far they fall this time.

dr-seuss-google-logo-300x123Now we finally get to the question of Google. Google has built itself by providing very functional tools and applications for almost no cost to build a user base. This has worked so well they are now tops in mobile, tablets, and rising fast in the PC market with Chromebooks. This last few months a shift appears to have occurred and it was right in my face this last week in London. Google has started to show me results that benefit them and do not necessarily relate to my needs at all.

Anyone who has driven in London knows that there are good routes and awful routes, not much in between. I have been using Google Maps navigation since its inception eventually eschewing dedicated GPS devices for my phone or tablet. This has worked consistently and wonderfully. In London Google consistently wanted to route me past advertisers, sometimes adding as much as an hour to my route. This happened consistently every day. After we gained familiarity with the city we were able to intercept this silliness and avoid it, but it was costly the first couple of days.

Dead End Trail In Badland National Park South DakotaOne of the best examples was when we were near Hyde Park. We needed to navigate back to our cottage in Flaunden from that side of the busy shopping district. There was a very clear path that led straight away from the immense congestion and towards Hemel Hempstead but Google kept trying to re-route us past Harrod’s and Selfridge’s and Madame Tussaud’s through a couple of miles of deadlocked tour buses, commuter buses and taxis. The “recommended route” more than doubled our trip time and would have placed us in much more dangerous traffic. There is an interesting liability here as well. The navigation app would literally override our route selection to put us back on a stressful and slow path past advertisers. It is hard to communicate how horrible this was, and if we had not been educated we could have been in a very bad situation–including missing a flight when our nav route suddenly changed from around the city center to right through the business district. Google was certainly making our trip harder, not easier.

We have also begun to see search results that are more advertiser-driven  or politically-filtered, but that is a little harder to prove. I believe Google might have just tipped over a line that they will look back and regret. The way to stay on top is to provide value. Be so consistent that your customers do not even think twice about using your products vs. the competition. We will see if I am correct but we may look at 2014 and 2015 as the years Google started to decline. I am writing this on a Google Chromebook, using Google Docs offline. I will update this by hotspotting with my Android phone later. I am firmly into the Google ecosystem but it appears they have gotten a little fat and complacent. Starting to look for the next big wave.

 

The Failure of Not Failing

bigstock-Failure-stamp-48396098We place such an emphasis on success in our culture and it is quite annoying to me. Perfection seems to be something we celebrate, and in some ways we should. What we do is idolize success without failure. For some reason we forget that failure is a necessary part of our development. I would venture to say no human being in history stood up and walked for the first time without falling. They did not speak their first words with perfect diction. Failure is a requirement of learning.People are often amused that one of my standard sequences of questions during an interview go something like this:

What is your greatest professional success or honor?

What is your greatest personal achievement?

What is your biggest professional failure?

What did you learn?

If you are comfortable, what is your most profound personal failure?

What did you learn?

I believe that these are important questions. I do not believe you can be a good leader unless you have failed. Sometimes people fail spectacularly, I know I have. A good leader understands how to keep going in the darkness of adversity, especially when they caused it. Good leaders have learned how to pick themselves up and keep going with that sick feeling of failure in their gut. A good leader can encourage others when the outlook is bleak and nearly hopeless. Adversity and failure are a good source of wisdom.

Unfortunately our school systems perpetuate this myth of perfection. Some of the most inflexible, unproductive, and unteachable employees I have had were 4.0 students. This is not a criticism of those students! Top grades are a great achievement, and they should be proud. What it is not, is a badge that means they know more than everyone else. I would argue their education is still incomplete because they have not failed. They do not know what inner strength they might have because they have not faced that embarrassment. I would not go so far as to demean those students, or not have class rankings, but we need to have it in context.

As a society we need to stop attaching a stigma to failure, especially for young people. As a young person grows, failing a class or getting fired from a job can be a learning experience more powerful than any classroom lesson. The world, especially the business community, is a complex place. You have to be dynamic and move fast. We need to equip our youth with the ability to recognize failure now and learn from it, not hide it. We need to celebrate that question above, “What did you learn?”.

Personally I value teachability and self-awareness along with intellect. Some of the smartest people I have known were some of the least teachable. The wisest and most productive people I have known were simply humble and teachable.

Our political system and sensational media also drive this perfection myth. How many candidates in the last presidential election were eliminated because of some scandal or failure. Some of these were real and some were trumped up but the dialog was the same. Can the candidate recover from this? Are they stained beyond hope?

This was infuriating to me. I want people in Washington who have had to recover from failure. Our country is failing and we need these people to show us the way. Continuing to send spoiled, silver spoon lawyers that know nothing of personal adversity will not change the result. We do not need perfection in Washington, we need reality.

I would encourage parents to incorporate discussion of failure into their dialog with their kids. I would encourage all managers to add it to their dialog with their employees. I would encourage voters to add it to their criteria in assessing candidates.

Failure is not only an option, but a necessity to be a valuable member of our society. Can we please start recognizing this?

Apple the Great!

Market forces bring us to decisions we often would not make on our own. Part of the beauty of our economy and our way of life is the creativity in both business ideas and implementation. Throughout our history men and women have had the opportunity to invent both products and processes. Every once in a while companies get too big for their own outsized egos and we all suffer, this is a necessary evil of freedom. A painful part of capitalism is the correction when a company gains too much influence and starts to force its way on consumers. Either consumers respond and dump a product or the government steps in. Either way is a bit messy.

US History is littered with examples of prideful corporate falls and the technology industry just keeps delivering up near monopolies. We are reading about search abuses by Google. Everyone knows about Microsoft’s tip toeing with the Justice Department. Anyone recall Carrier IQ? Now we get served up a doozy by Apple.

iBooks Author is a great idea. A tool that takes Apple’s strength of making things intuitive and turning it towards the publishing marketplace. We need good publishing tools from credible sources, just like WordPress opened up the world of web design to anyone with initiative, Apple had the same opportunity with iBooks Author. The problem is that if you use the tool then Apple controls your content and it can only be sold through Apple’s marketplaces. This is an amazingly ugly reach that has the industry buzzing.

All Apple had to do was treat consumers with respect. Anyone who creates content deserves the right to that content. At a time when I was starting to relax and was honestly considering buying a Mac, I am going to pause and wait. I have always been hesitant to lock myself into an ecosystem and this latest development renews my distrust. Consumers should not be put into a situation where what they create is controlled by someone else. Just like Apple supports Digital Rights Management (DRM) for content on iTunes, they should support their customers creative rights as well.

We have to remember that these computer systems we use can be broken down into three very separate and important components, hardware, software, and the user. I lump the user into the mix intentionally, it appears Apple does as well. In most computing situations the manufacturer/individual in control of all three of these areas are different. This typically leads to a separation that actually protects consumers from abuse. In the case of Apple they have almost total control of two thirds of the equation, and it looks like they want to control all of it.

Why should we care? Anyone who has ever been stuck in a bad business deal understands why. Usually, once you give up your rights you can never get them back. Just like times when Facebook has over reached with their EULA, consumers need to respond to this breach of trust. This will die down in a short time and most people will go back to life as usual. Here is hoping that industry watchdogs and our government is watching, I think Apple needs to be reminded of their limits.

Giving Your Intelligence Away

Social-NetworkingSocial networking is now the norm for a majority of Americans. I have talked about some of the relational and social implications of this previously. Living life in the cloud is very convenient, there is a lack of intimacy that is almost numbing. People say things online they would never say in person, and this had led to a number of tragedies documented in the news. There is another major problem with having the majority of your communication and creative efforts online. You are handing a part of yourself over to someone else for safe keeping and you have no idea how trustworthy they are.

Data security is an obvious problem that most completely ignore. When servers crash it is not the service provider who cares about your personal or business information. A couple of situations this last year brought this point home to me in a personal way. Throughout the 1990′s I was the subject of a few dozen articles in local, regional, and national publications. These articles were published online as well as in print. Recently I started searching for the articles because they represent a chunk of my professional career. I was stunned to discover most of them were gone. In some cases the publications had been purchased and old content was not carried forward. In other cases they had simply purged old content. In one case the publication no longer existed. In any case my articles were gone, permanently.The second situation involved an online accounting system I had used for many years. As is often the case, we became complacent and did not regularly back up the data. The service provider had a large corruption of data and found that their backups were bad. They lost a year of our accounting data. Fortunately we had all of it in hard copy and most of it available to us in other forms. I will not list the name of the accounting provider here. I can tell you we no longer use the service.Data backup has always been a serious IT issue, one that “bytes” people all the time. It is even more critical in a cloud environment because you have no control over the care and upkeep of the server. You are completely dependent on their business practices. Recently Google had an accidental deletion of thousands of user accounts. All of their data was gone in a flash with no hope of recovery. Cloud computing is like a drug, it feels really good but it can have nasty side effects if not used properly.A second major issue is intellectual property. I know many young people that write songs and post them to Facebook or YouTube. What rights did they click away when they checked that box agreeing to their terms and conditions? Who owns the song? What rights does the service have regarding the content? Honestly there is no way of knowing until a situation goes through the court system. We have not seen how they will “split the baby” on this one. It is the same for poems, love letters, fiction, pictures, movies and opinion. We simply do not know for certain who owns it.After giving it a lot of thought I recommend the following rules when posting to the social web. If it is creative or unique to you then do not post it there. Don’t give your creative self away for free, you never know what might have value down the road. Eventually someone is going to have a top musical hit that was put on Facebook first. When millions of dollars are at stake you do not want a service provider with deep pockets snatching the value away.

Set up your own web site if you can for your creative pursuits. Post your photographic art, musical compositions, and writing there. If what you create becomes popular, there is no question as to ownership. Web sites are easy for anyone to create. Google, WordPress, and Yahoo all have free ways to do this that are easy to use. There are countless others out there also. Back up your site on a regular basis. A traditional approach is have a copy on the web server, a copy at your home, and a copy in a second geographical location. It is really worth it not to lose your information.

So what should you post to social networks? I try to keep it to general conversation with friends, comments on public events and a happy birthday or two. In truth, if it contains substance, I don’t post it. It would be like handing my personal communication to a stranger and asking them to pass it around eventually getting to the intended recipient. I know it might sound old fashioned but there is a level of creepiness to how many people use Facebook et al.

I certainly hope that when it comes to creative rights that the courts decide in the favor of the individual. I am seriously concerned they may not and I feel for whomever becomes the test case on which laws are based. That would be very painful and expensive. I will continue to be a user of all the major social networks for the foreseeable future. In the meantime I intend to be careful and cautious with my intellectual property. This is a case where discretion would be wise.

The Application Age

BlueStacksOk, I will admit it, I am completely geeked out right now. I just downloaded the alpha version of the BlueStacks Android app player for windows. Running my android apps on Win 7 is really intriguing to me because it amplifies a perspective I have held for some time. Our lives are no longer defined by what hardware we run no matter how strongly Apple and Microsoft try to push. I can run Evernote, Maps, Gmail, Office apps, Netflix, Youtube etc on any device I want. The difference between owning an ios device or android device is fairly moot already. This power we have as users has never been greater.

I will use the example of Evernote, probably my favorite application. I can grab a snapshot from my phone and it is automatically synced with any other device I own. Within a short time I can pick up my tablet(ASUS Transformer), my Win 7 laptop or login to any computer and my picture is right there. I can annotate over the image on another device and it is synchronized back to my phone and everywhere else I might use it. This is not just cloud computing, this is application centric life. If I want to go purchase an ipad tomorrow I simply download the Evernote app and start using it. Absolutely no hiccups in the process, all of my notes for the last two years are right there. What I was running it on made no difference.

The fear that must be present in certain Boardrooms around the world must be palpable as this realization takes hold. How do they continue to differentiate themselves? Geeks and Nerds will always care, but what about the average person? All they will care about is if they can run their apps. This opens a number of surprising doors and I believe we will see a number of new players jump through them. One door is the barriers to entry for new operating systems is very low. If you can support the open android apps you can play, we are about to witness this real-time with Amazon’s new Kindle offering. Here we have a company with money and content that is projected to be successful with a brand new operating system.

Why? Because it no longer matters. We can laugh at the very competent attempt at owning the world by Microsoft, Apple and Google because we now have the power. Our application choice will drive these companies instead of them driving us. In this new world when we download an app we place our vote and impact our electronic future.

Getting back to my geektastic experience with BlueStacks, I loaded it onto my media center pc. Powerful desktop mounted in my rack running Win 7. We typically use it for TV, DVDs, Netflix, Skype and general group web browsing. I installed the app successfully and I was able to run the various games and news applications that come with the alpha version of the application. Now the fun part, using their CloudConnect software I was able to push apps not preloaded to my pc from my phone. Being the addict, I immediately chose Evernote and pushed it to my pc. Once it loaded I was able to log in and use Evernote just like on my phone or tablet.

Some might say it is no big deal to run Evernote, I can simply download the windows application and roll right along. The exciting part for me is the dynamic of the interface. One of the problems to date with media center pc’s is the interface is built around desktop computing. Complex navigation (a windows norm) and keyboard interaction make it difficult and cumbersome to use in a living room. A phone or tablet interface on the other hand is made for a less granular input. It is optimized for the type of input you would use with a wireless mouse or controller. In other words it is easier to use android apps running on Win 7 than it is to use the native windows app. I found this to be true for Google Maps, Tweetdeck and others also. The interface was fast, clear and easy to use. What a novel idea.

Many have heard me lament our servitude to the benevolent dictators at Microsoft and Apple. I truly believe those days are numbered and we are entering a new age. Not just a cloud computing age but the “Application Age” where we will be able to influence our future more directly. We will simply not use poorly made applications. We will no longer be force fed a way we must interface with our information. What an exciting time, I cannot wait to see what great applications bubble to the top!

The Price of Privacy

Recent generations are placing less and less value on privacy. Increasingly intimate social networking systems are coming into play. Where is the limit? Or will we simply stop having any limits at all? The chaos that comes with a lack of rules and social mores is a consequence I hope we can avert.

The first step is to begin teaching what is appropriate in social communication and what should be left to private messaging. With our current generation we have a group that cannot comprehend why they would not post every thought that occurs to them. They look at me wild eyed when I let them know they do not own the content they place on facebook and other sites. They have no comprehension of the impact their crude language could have when they apply for a job. They do not grasp the impact lewd pictures of themselves with various partners can have on their future spouse.

Communication is key. If we regularly speak with the teenagers in our circle of influence this can change. This is a possible life changing point of impact. You could be saving their marriage or helping them to protect their intellectual property. If you were ever looking for the perfect segway to meaningful conversation with a youth, here you have one. I cannot stress enough that they do not have any sense of these consequences. As I have seen with my own children, they also need regular reminders.

When you post on facebook, you give them rights to whatever you have posted. There is not a limit to how personal it is. In addition, even deleted information is retained and can be sold to future interested parties. If you write a song and post the lyrics and video to your facebook account do you still own it? At best it is an unanswered question that to my knowledge has not been played out in the courts system yet. Facebook is not the only one. Google and Microsoft track your browsing history. Apple, Google and wireless providers track your location. Netflix & Hulu track what you watch. Every aspect of your online activities are tracked and logged in enormous databases that companies hope to mine for profit in the future.

web-map-image

When we “give up” our information to these sites we are making a conscious decision. We feel the ease of communication is worth the price of our privacy. This choice applies to all of us and we should make it carefully. There is an argument that we are anonymous in the masses of people doing the same thing. This probably is true until the spotlight is on you and everything you have done is search-able and open to interpretation.

Privacy compromise is even in places we do not expect. When you sign on for wireless at a local coffee shop you are sharing that with many others. Your computer is then in direct communication with them in the same way your computers access each other at your home or work. There are applications that allow for the attack and compromise of computers. These are available in your favorite application marketplace and many more destructive applications are available on the web in general.

This is a complex problem and very few people are literate enough in technology to truly protect themselves. I do not believe it is the problem we need to solve. The issue we face is the devaluing of our private lives. We need to re-enforce this concept in our own lives and raise our children with a greater consciousness of their actions. We need to raise the price of privacy before it no longer exists

I Admire the Ruby Community

Over the last year or so, I’ve spent perhaps 50 hours rethinking what kind of business Oasis Digital should be. I’ve studied business models. I’ve made spreadsheets. I’ve looked around that numerous other consulting firms. The results of all that… are slowly emerging. Stay tuned. In the meantime, though, I noticed something very interesting: the firms that appeal to me most, in terms of web site content, community involvement, portfolios, marketing approach, etc., are disproportionately Ruby or Ruby-Rails shops. I admire the “vibe” of the Ruby community:

  • Strong focus on design, to the extent that some Ruby-centric development firms have web sites which could pass for visual-design firms instead.
  • Ruby developers seem unusually aware of the extent to which syntax and conciseness matter.
  • There is much discussion of craftsmanship, though I’d need to survey a broader swath of production code to determine whether this discussion has a basis in reality.
  • Seemingly contrary to the above factors, Rubyists also appear to be unusually pragmatic.
  • This pragmatism translates to real-world financial impact: many developers make a good living with Ruby, and many firms are very happy with their Ruby projects.
  • Ruby events are numerous, nationwide.

There are numerous Ruby- or Ruby-Rails-centric development firms, and Oasis Digital is not one of them (we are perhaps a 5%-or-so Ruby shop, with Ruby expertise to effectively attack automated sysadmin, integration projects, and so on). We aren’t going to become a Ruby-centric-firm, either; and there are some technical aspects of Ruby that don’t impress me. Rather, we want to bring some of the cultural qualities seen in the Ruby community, to other languages and tools. We care about design much more than most firms, and it shows in GUIs we create. We care about user experience, and we are obsessed with quality, working results.