On Digitalised Product Management

Now the family left me here for the afternoon, I have some time to exercise blogging and put down a few thoughts on my recent job. To write in a cosy environment, a lit the fireplace at the house we are staying in. The result is as favourable as you may imagine. Only the missing bear fur could add to the feeling. The role in marketing, “Product Management”, hasn’t been that cosy recently, for a few reasons, that are more related to corporate behaviour than to individual contribution.

While I will need to avoid mentioning the actual product I am still working on, and it’s probably difficult even not to have any references, the below still tries to explain the tensions that exist in the world of traditional industry, moving towards a digitalised service business, in which tangible products get marginalised.

The primary reason for me, an computer engineer, having spent all his life in service business and so to say “in the cloud“, to come to a marketing oriented role is to design and develop – as in business, not as in a computer programming – a connected product.  The Internet of Things, if you want to. Whereas many companies have Things already. But they want to offer smarter things, that’s why everything gets connected. Now connectivity has to offer many benefits over traditional products, but they’re not the primary value proposition the customer pays for. The customer still pays for the product. And in the market, any customer will ask for the smartest product available. Just like I wanted to light a fire. One that was good and warm, and keep my cosy. And to do so, I had to collect some pinecones, that would easily catch fire. It was bothersome, but necessary. 

The things industry is not very familiar with service offerings. It’s actually something fundamentally different from the internet or services industry. To put it boldly, what a customer expects from a product: something solid. And what a customer expects from a service: something that is available anytime. (Like, literally, in the middle of the night!). While Things are sold physically and can be produced on stock, a service cannot be hold until the customer asks for it. Value through a service is created by making something more convenient. I’d have paid somebody to cut and carry the wood required to light a fire. But I had to do it myself, and that was  not only tiring but also heavy work. While, as a customer, the thing I’d buy is the wood, I would spend a premium for somebody to do the work. To add the service. Probably not much, but hey. The same happens for businesses.  While still everybody produces products, the more convenient products are in the customers favour, only at a small margin, though. Just to make an example, just recently Oracle, a business to a majority based on the sales of products, databases, announced to acquire Accenture, a consultancy service, to add services to it’s portfolio. Others have doubts this merger makes sense, exactly for the above reason. Margin driven things companies will have a difficult time appreciating low margin service as part of their portfolio.

Just like me. I wanted to sit in front of a warm fire when spending my time without the family. It’s very clear I’d need pinecones and wood to get that, and I’d pay for it. However, if some other guy selling wood sells cut wood and carries it to my house for a fee, I’d probably appreciate that more convenient offer. But that decision has to be made very conscious, and people responsible for the service in that organisation can’t be measured on financial goals as their product colleagues, but customer satisfaction.




Celery Worker wide configuration

Celery is a distributed task execution environment for Python. While the emphasis is on distributed in this software, the concept of having workers allows for settings beyond the individual task. While the first rule of optimisation is “don’t”, sharing database connections is a low hanging fruit in most cases. And this can be configured per worker with Celery provided signals. To create a database connection for individual worker instances, leverage these signals to create the connection when the worker starts.

This can be achieved leveraging the worker_process_init signal, and the corresponding worker_process_shutdown signal to clean up when the worker shuts down.

The code should obviously be picked up at worker start, hence the tasks.py file will be a good location to keep these settings.

Example tasks.py:

from celery.signals import worker_process_init
from celery.signals import worker_process_shutdown

app = Celery('tasks', broker=CELERY_BROKER_URL)
db = None

def init_worker(**kwargs):
  global db
  log.debug('Initializing database connection for worker.')
  db = sqlite3.connect("urls.sqlite")

def shutdown_worker(**kwargs):
  global db
  if db:
    log.debug('Closing database connectionn for worker.')

The example above opens a connection to a sqlite3 database, which in itself has other issues, but is only meant as an example. This connection is established for each individual worker at startup.

Digitalisierung – Die den Code der Welt von morgen schreiben

Welche Verantwortung tragen Softwareentwickler für die gesellschaftlichen Veränderungen, die sie vorantreiben? Die Antwort ist komplexer, als es der Mythos vom Programmierer als Rockstar erscheinen lässt.

Auch die Süddeutsche greift das Thema der moralischen Verantwortung von Programmierern auf. Teil des Problems ist, dass die Profession – der Wahrnehmung des Authors nach jedenfalls – als rein technische Tätigkeit wahrgenommen wird. Vergleichbar des Berufs eines Maurers und weniger der eines Architekten oder Bauingenieurs.

Tatsächlich versetzt die Digitalisierung aber jeden in die Position, mit äusserst abstrahierten Programmiersprachen, die teilweise mehr schon menschlicher Sprache ähneln, einen Beitrag zur weiteren Digitalisierung zu leisten. Webservices oder Chatbots zu programmieren ist mit detaillierten Anleitungen einfach zu erlernen und Schritt für Schritt auch dem Laien nachvollziehbar. Viele der zu Betrieb notwendigen Services sind kostenfrei erhältlich.

Es gibt gewissermaßen keine Einstiegs-Hürde. Weder in der Ausbildung noch finanziell. Diese technische Ermächtigung der Gesellschaft und die Lücke in der Wahrnehmung ist zu einem erheblichen Teil auch der Demographie geschuldet, so finden sich unter Digital Natives kaum über 40-Jährige.  Genauso wie sich unter Konzernlenkern kaum unter 40-Jährige finden.

Und so ist die Tätigkeit des Programmierens nicht länger dem Programmierer – mit einem Diplom von 1995 – vorbehalten, sondern in der Breite der Gesellschaft angekommen. Phänomene wie 4Chan oder Anonymous entstehen aus dieser technischen Möglichkeit, entkoppelt von moralischen Richtlinien. Dort werden Beiträge erzeugt, die tatsächlich ethische und moralische Fragestellungen aufwerfen.

Es werden nicht Regeln von heute sein, die das Zusammenspiel der Gesellschaft in Zukunft regelt, die kommende Generation wird im Internet neue Regeln für den Umgang miteinander finden.

Source: Digitalisierung – Die den Code der Welt von morgen schreiben

New Years Resolution

New Years resolutions follow the same procedure as every year.

It’s “write more” this year again. Things noteworthy today include my appointment to the IEEE R8 Committee, in particular to the “Action for Industry” committee.

A similar position existed until two years back, when it was still called the “Industry Relations Subcommittee”. Outreach to industry is of particular focus for IEEE for a while already, while the committees recruit themselves from volunteers. One of the reasons this exists is that IEEE has a (felt?) dominance of academia in it’s membership, or at least in the active volunteer base.

And in 2017 it will be my honor to contribute in this role and change the world toward the better.


Python Release Python 3.6.0 

Oh, Python 3.6 was released one day before Christmas. New features include:

  • PEP 468, Preserving Keyword Argument Order
  • PEP 487, Simpler customization of class creation
  • PEP 495, Local Time Disambiguation
  • PEP 498, Literal String Formatting
  • PEP 506, Adding A Secrets Module To The Standard Library
  • PEP 509, Add a private version to dict
  • PEP 515, Underscores in Numeric Literals
  • PEP 519, Adding a file system path protocol
  • PEP 520, Preserving Class Attribute Definition Order
  • PEP 523, Adding a frame evaluation API to CPython
  • PEP 524, Make os.urandom() blocking on Linux (during system startup)
  • PEP 525, Asynchronous Generators (provisional)
  • PEP 526, Syntax for Variable Annotations (provisional)
  • PEP 528, Change Windows console encoding to UTF-8
  • PEP 529, Change Windows filesystem encoding to UTF-8
  • PEP 530, Asynchronous Comprehensions
 Merry Christmas everyone!

Source: Python Release Python 3.6.0 | Python.org