Social Media Doomed to Fail

Consider for a moment the following headlines.

Now read Twitter's official policy position.

If the hypocrisy and cruel irony escapes you, it may be wise to check the news more often.

Facebook and Twitter have recently banned a variety of voices, including that of President Donald I. Trump, from their platforms. They claim falsely that the President actually invited the violence that occurred at the Capitol last Wednesday. He certainly did not help, but it's a major leap to accuse him of giving the criminal trespassers on the Capitol actual marching orders. To arrive at that level of blame, we must also hold a variety of politicians to blame for the riots in a variety of cities throughout the year 2020.

Then as a result, Apple, Google, and Amazon decided to pile onto the virtue signaling censorship movement and shut down Parler, the open social media competition. The violence at the Capitol gave all these players the pretense to silence their political enemies, and the results in Georgia assured them that nobody in Washington would hold them accountable. All impediments to their fascist rage against the right being removed, they acted swiftly.

But apparently the global policy boys at Twitter object to the same thing happening to their users as a consequence of the actions taken by a totalitarian regime in Uganda. How ironic. The Twitter pot seem to be calling the Twitter kettle black. 

I'll copy a comment I made in reply to a comment made on another post:

If we can't tolerate speech with which we disagree, we can't have freedom of speech. In high school, at the height of the cold war, our American Studies teacher asked if we were willing to allow the Communist Party to operate as a political party in the U.S. I was the only one who raised my hand. My classmates booed. My teacher chided them and gave me a guaranteed A.

If we begin to stifle speech because we fear it, rather than countering it with persuasion, we will produce a violent and unpredictable response from radicals who have been shut up rather than simply beaten on a fair and open playing field of ideas.

Will the rash actions of social media and other big tech players have unintended consequences? I think that is certain. Have they signed their own roadmap to decline and failure? Time will tell. Freedom will ring. Freedom will prosper. History is clear. Those who suppress the voices of millions are doomed to eventual failure. 

 

 

Cloud Native is an Anti-Pattern

Google, Apple, and Amazon AWS are not your friends. You may be applauding their actions against Parler, but let's think it through.

Setting aside the politics of Parler, the actions of these three vendors (and others) over the last few days should give everyone pause.

If you lock in your technology offering and make your business dependent on the goodwill of a cloud vendor or an app store, you are surrendering your business to their control under terms of service that can easily be interpreted in their favor at their whim.

The only way to mitigate this risk is to be sure you are not locked in and that no one single vendor controls your data and technology.

Again, setting aside the politics, what is your organization's strategy if your cloud vendor suddenly gives you a 24 hour shutdown notice on the weekend when your employees are off?

Could you survive such an action from your cloud vendor or an app store? If your users suddenly cannot access their data or interact with you, what will the consequences be?

Comments welcome but I hope you will limit your comments to vendor lock rather than the politics involved in this one case.

Before you comment, consider this quote from CS Lewis:

"Of all tyrannies, a tyranny sincerely exercised for the good of its victims may be the most oppressive. It would be better to live under robber barons than under omnipotent moral busybodies. The robber baron's cruelty may sometimes sleep, his cupidity may at some point be satiated; but those who torment us for our own good will torment us without end for they do so with the approval of their own conscience."

How to Find Truth on the Web

Here's a few things I do. They are not fool proof and I don't always follow my own advice, so take them for whatever value you find in them.

1. Find at least two sources from left leaning media and two from right leaning media. I have my favorites on both sides. 

2. Try to find original content rather than a simple duplicate copy of an AP story or two sources with nearly identical copy. There is a lot of intellectual plagiarism out there.

3. Ignore the headlines and pull quotes (the enlarged quotes of the article). These are designed only to get clicks and lead you to a biased conclusion.

4. Ignore opinions and conclusions. Anything that characterizes the facts or statements of people quoted in the story is not journalism; it's activism, designed to mislead.

5. Look for details that are common between the ideologically opposed sources. These are often truths. 

6. Look for details included in one side and excluded in the other. You won't immediately know if these are true. Often they lack complete context and are included in the way that they are in order to support the characterizations being made by the writer or editorial staff.

7. Assume that there is always more to the story than meets the eye.

8. Take photographic and video evidence with a grain of salt. It is altogether too easy to edit these and remove context that contradicts the slanted narrative. I've been caught by this more than once. We want to believe what we see and hear. This is where we are all most easily manipulated.

9. Assume that all media sources have an angle, a narrative, that they are pushing. 

10. Watch for stories that are covered only by one side. Ask yourself why. Dig for multiple sources. Often when a story hurts the narrative, the story is still covered but it's buried under a bland headline designed to avoid clicks.

11. Use more than one search engine. Every search algorithm has bias built in. Mostly that bias leans left, so you may need to dig deep to find opposing coverage from the right, but you will find it.

12. Distrust bloggers, podcasters, straight up opinion talking heads, and so-called independent fact check sites. Listen to them but do not believe everything they say. Research whatever they say using the steps above.

Again, this is not foolproof, but it does help me.

Agile - The Most Meaningless Word

Agile - The Most Meaningless Word in the Tech Lexicon

Has there ever been a more over-hyped word in the history of technology? A word that has been appropriated by everyone and assigned so many different definitions and book-length explanations and an army of consultants, each with their own medicine show, the word Agile has become meaningless pablum, a badge we all wear making it indistinguishable from any other technological accoutrement.

The word Agile has come to mean what any practitioner wants it to mean, used as a wrapper for the way they think things ought to be done. It has become a meaningless defense for management and delivery practices of all sorts. It has become the industry's magic safe word or imprimatur to sell a variety of process control systems and frameworks, giving rise to eager consultancies readily able to sell the miracle cure to eager executives in need of an enterprise cure that will hide their inability to manage the organization.

When we have exhausted these five simple letters, we will pick a new word and make it meaningless.

 #management #technology #business #agile #meaning #meaningless

Wrapping Up and Moving On

I've been laid off and the reasons don't matter. It's just business. My last official day is tomorrow. My soon-to-be former employer has a product that enterprises need and good people to back it up. Happily the future is bright and there are opportunities in the world of technology for the taking.

I'm excited for the future and know that soon I'll be doing something new, interesting and challenging. The friends and colleagues I leave behind will do well in the technology economy no matter where they go.

It's a prosperous time to live if you have valued technical skills. I'm grateful for all of the experience I've had that has brought me to this point. I look forward to utilizing it to help other organizations solve their technology problems and advance their organizational goals.

I believe that whatever changes the future holds, I will continue to blog from time to time and work on my personal OSS projects. Stay tuned.

Serverless–AWS Lamba vs Azure Functions

Who will win the Serverless Wars? Azure Functions is the latecomer but has much to like. AWS is the original trailblazer but appears to be slacking off in terms of innovation. I’m not sure there needs to be a winner. There will certainly be those who prefer AWS and those who prefer Azure for a variety of reasons. In this post, I’ll attempt to catalog the differences I’ve been able to find.

lamdavsfunctions

Incidentally, if you have not been introduced to the topic of Serverless Architectures, I suggest Martin Fowler. I have watched with fascination Martin Fowler’s posts on Serverless architectures. There are many other sources you will find through the magic of Google, but give Martin a read before you resort to the others.

Warning! The comparison below is by no means comprehensive and should not be considered conclusive. These are my initial impressions based on research only.

Serverless Features AWS Lamda Azure Functions
Supported Languages Node.js, Python, Java Node.js, Python, PHP, F#, C#
Web Dashboard adequate excellent (VS Online included)
Physical Logical Container single container deployed from zip (Linux) App Service contains multiple functions (Windows)
Continuous Deployment CLI (some 3rd party tools) GitHub, BitBucket, Dropbox, VS Team Services, VS Online editor
Source Code closed open
HTTP endpoint per function/lamda requires API Gateway configuration (greater flexibility at cost of simplicity) automatic (one per)
Authentication unknown Facebook, Google, Twitter, Microsoft
Cross-Origin Resource Sharing (CORS) unknown supported
Maximum execution time per request 5 minutes unlimited (potential unlimited cost)
Persistence of instance and environment variable no yes

 

If you don’t speak the language, you won’t be much good at communicating, so for me the choice is easy. Azure Functions supports C#, my language of choice. All the rest is just gravy. I’m sure your choice and mileage will vary.

Also check out Google’s Cloud Functions as well. Though I doubt they will succeed like Azure and AWS, anything is possible.

The 4+1 Architectural View Model v2

You can find the well written brief on Phillippe Kruchten’s 4+1 architectural view model on Wikipedia along with a link to the original white paper published nearly 20 years ago. Kruchten worked for Rational, as I understand it, and so this is often referred to as the RUP 4+1 model.

4p1Architectural_View_Model
Courtesy of Wikipedia

Although I have used this model or some variant of it at times, I had quite forgotten its name and origin until someone reminded me of it the other day. Of course, we often forget that UML also came out of Rational’s famous Grady Booch, Ivar Jacobson and James Rumbaugh..

And yet today I find it difficult to find software developers who know much of anything about the 4+1 model and only a few regularly use UML and even then only for simple class diagrams. So why the disconnect?

Perhaps a Version 2 of these approaches is required. What would you get if you mixed the 4+1 model with more clearly defined non-functional requirement scenarios as I’ve previously discussed and the C4 model presented by Simon Brown along with just a bit more UML that most developers are not currently accustomed to using? I’m thinking this through and will post more thoughts on it soon.

Venn-like View of Software Quality Attributes

Two days ago I posted Non-Functional Requirements for the Software Architect in which I suggested that quality attributes or non-functional requirements could be categorized into a two by two grid, operational and non-operational by internal and external.

Thinking further along those lines led me to picture the illustration below and hop out of bed to put it to virtual paper.

qualattribvenn

Most quality attributes will fit into one or two of the big four: security, performance, usability and modifiability. And each of these largely corresponds to its depicted quadrant.

Security is largely an internal concern. Often external stakeholders will profess their concern with this attribute, and hence the Venn-like spill over into the external quadrant. Generally the concern for security and assuring security falls within the domain of internal stakeholders and the implementation team.

External stakeholders are mostly concerned with performance and usability. There are a number of other quality attributes such as availability that fall within or at least are closely related to one or both of those.

Modifiability is almost exclusively a concern of internal stakeholders and implementation teams. Interoperability and testability are largely related to modifiability while interoperability nearly always shares at least some security concerns.

You may mix these differently to match your circumstances and priorities, but the illustration covers the majority of software development efforts but of course does not spell out the details. For guidance on that, I recommend my previous post. If you are concerned with software architecture, perhaps this will help you to visualize how these quality attributes or non-functional requirements compete and compliment one another.

To paraphrase Bass in Software Architecture in Practice, an architecture will either inhibit or enable the achievement of a system’s desired quality attributes. Understanding your desired quality attributes well will drive the critical decisions in your architecture. And your architecture will then provide the requisite containers into which you will place your functionality. To quote, “Functionality is not so much a driver for the architecture as it is a consequence of it.”

While I am not completely certain that is always the case, it is a principle that is well worth considering when creating and refactoring the architectural elements of your system. And it is my hope that by seeing this illustrated, it will get you thinking about how your own desired quality attributes interact with internal and external teams, which are operational and non-operational, and how they may compete with or compliment on another.