Sustainability in digitalisation can be seen as one of the most pressing challenges of our time. Everyone sees the obvious. Smartphones, laptops, IoT devices are shipped from factories faster than ever. Internet and online community are growing to match the ever-growing demand at an alarming pace.
Hold on a second, but we are not in the devices business, are we? No, we are not, we are a consultancy.
We are here to help our customers thrive and make Gofore the best workplace for everyone while doing so. We do this through the use of new technologies, agile and lean ways of working, working on the customer with their innovation gains, generation of new sales and value growth opportunities, working towards higher productivity and bringing efficiency into processes.
So are we to only measure the positive impact of our customer’s end result?
Are we to only measure the positive impact of the end result?
Consider products or services, such as, development of smart home systems to optimise energy consumption at home. Reducing food waste through the development of food-sharing applications. Implementing more intelligent and AI-powered transport systems to guide traffic through cities to reduce emissions. Apps to promote and ease the use of public transportation, bicycles, or car-sharing.
We are working as consultants in many big companies in which the difference can be made and measured through the end result. It actually feels quite straightforward to measure the impact of the end result but then again not the journey of how to get there. A great deal of software design, development, product and project management, cloud infrastructure, and development operations are needed. So what about measuring the impact on sustainability for the journey of how to get there?
What about the sustainability in development activities?
What kind of activities could make us and our customers think more about sustainability when doing design, development, product or project management, implementing cloud infrastructure, or setting up advanced development operations? Could we actually measure the positive impact of the good development practices we use in software development on a daily basis? Would it truly be possible to promote, visualise and measure sustainability actually through our own individual actions in our customer’s digital transformation and not just only through the end result?
So how can we make a positive impact through sustainability in development activities? Can we actually work towards sustainability, for example, create services and products that consume less energy or use fewer resources? Simply put, yes I believe we can.
Technology will save the world but it needs to be organized around doing so
Technology will save the world but it needs to be organized around doing so. In order to show, measure and verify the positive impact, we need to start walking the talk and spread the message that we can actually make a positive impact on sustainability through the daily work we do. Most often the work starts from realizing that there is actually a negative or neutral impact being made contrary to positive.
But what would sustainability in different software lifecycle processes entail? What about in quality assurance, software testing, test automation, or load and performance testing? What about runtime sustainability not to forget maintenance and support? What about all other environmental, societal, governmental aspects of sustainability in general?
So how can we incorporate sustainability into our software development activities? What could we measure? What about monitoring consumption and aim towards reducing it? Not just because it should be cheaper but because it is more sustainable? Creating current state analysis and trackable metrics on sustainability? Sharing code and using open source to promote sustainable use of resources? Preventing the collection of irrelevant and non-mandatory customer data? Stop storing years worth of useless logs you newer go back to?
How could we do it? What could we measure?
What else? Could we consider this as a discussion starter, a wake-up call of sorts? How could we incorporate sustainability into our software development activities? How could we do it? What could we measure? Are we interested? Connect and let’s start ideating! Remember to also check out what Good Growth is about!
The Hello World
First, I want to introduce myself to everyone: “Hello” to everyone around the world, or at least to those reading this. My name is Aki Mäkinen, and I am a software developer, devops philosopher, and a professional rubber duck. I am a sailor in the seas of software development, on a journey to unknown shores while surviving the storms and avoiding the shoals, always ready to help a fellow seafarer.
My journey with devops started five years ago in my first project. Back then, I was a front-end developer in the project, and we had a dedicated “devops guy” taking care of doing the infrastructure as code and handling the deployments. It was also the first time I heard of devops. Initially I did not wonder what it was all about, or rather, I was happy with the fact that it was about automation and deployment (at least). The project continued and I slowly moved closer to the back-end part of the software. I worked on the API, started doing debugging and scripts to help me with it. Before even realizing it, I was working on the CI/CD pipelines and the infrastructure with Ansible. “So, now I am doing devops, right?” I was thinking.
Charlie Day of It’s Always Sunny In Philadelphia
Time progressed (alas, still no time travel) and so did the project. Then we started talking about features such as doing semantically versioned released of our software components and improving the monitoring and logging of the system. By itself this is not much to mention about, but it was mentioned to be part of the devops work. While this was not the first time I wondered where to draw the line with the concept of devops, it did cause me to further question my, at that time, current understanding of what it contains and where the responsibilities end. This did not help me understand the phenomenon any better and I could not elucidate a better explanation from it than “it is what brings together dev and ops”. I was left puzzled. Often on downtime, and especially in the shower, I was putting the pieces together trying to find the thread connecting all the little nuggets of information.
I moved on to the next project, my role in it being the “devops guy” together with one other team member. Our initial goals were to reduce the build time and the update time after each software change. Later as the team grew, we did other improvements to the software such as UI lazy loading, ahead of time compiling, near zero downtime UI updates, tooling, and so on. All this required that we understood the codebase at least on some level. All of these I added to my “devops philosophizing” and continued thinking.
The Gradual Enlightenment
After thinking long and hard, I saw the first ray of light from the horizon. No, I did not spend all night thinking and wondering devops, rather, it was the light of realization: it is not about tools, or a concrete methodology but a way of thinking, a philosophy. This was the reason I could not draw lines around what it is and what it is not, it was too broad to limit strictly. Based on the observations and some additional thinking, I designed my first version of the definition:
“DevOps is a way of thinking and a way to approach a software project, aiming to optimize the development pipeline and shorten the feedback loops.”
By Douglas O’Brien from Canada – IMGP2543, CC BY-SA 2.0,
This definition did not limit what methodologies one should use or whether some technology is or is not devops: if something counts towards the goals set in the definition, it is devops. Finally, I could move forward and start doing work based on that definition. My further work considered the role of developer experience, usability and quality of the tools, failures as a way of learning and so on.
The next step towards further enlightenment came in the form of a request to write material on devops. I happily accepted the challenge, but I needed further support and sources to quote. Once, when I was thinking this out aloud with a great colleague of mine, he told me about Google’s state of devops report: Accelerate: State of DevOps 2019 by DevOps Research and Assessment (DORA) / Google Cloud. I read through the report and was amazed. the report took into account both the technical and non-technical sides of software development, including human factors such as psychological safety and, through several factors, work recovery and risk of burnout. From the report, another source was also found: The Effective Devops. These two sources soon formed the basis of my devops research that continues today.
My journey describes the problem perfectly. The model of devops is not often taught, but instead learned and pieced together from observations and pieces of information, with the blanks filled in by common sense. A model born though this kind of process is known as a folk model, and in this case the result is a folk model of devops, an incomplete and at worst a partially wrong picture of the phenomenon. The result is that the model may lead to wrong conclusions and bad decisions, and at best, inefficiency in putting the concept into use from the point of view of the actual model. Based on the observations from different projects, this is a common phenomenon with devops and makes related communication much more difficult. Usually people use it as a term to refer to CI/CD, automation, testing etc., and in this sense, I agree that it has become a buzzword. However, behind the buzzword is an actual and very useful phenomenon that needs to be brought up much more.
So, what is devops? This is an incredibly complex question and impossible to answer in a single blog post. Rather than attempting to do that, I will concentrate on the definition, building on top of that in later posts.
While researching the subject, I have seen several attempts to define it. Some people see it as a software development process and visualize it as an infinity symbol with different phases written on it, but the problem is that it leaves the human mostly outside, as well as tooling. One could also argue that it is an extension of agile software development. While agile methodologies are important and are almost always de facto tools in the devops transformation, they are not strictly required to be able to bring the culture and other aspects of devops into an organization. To include communication, information sharing, organizational culture, national culture, technical aspects and the role of the person in the process and the organization, the definition needs to be vague enough to allow variation in the means but still define what it is about and the goals. Building on top of the definition by Google Cloud and using the aforementioned sources to define the goals, my definition is:
“DevOps is an anthropocentric organizational and cultural movement, and a philosophy with a goal of improving organizational and SDO (software delivery and operations) performance, productivity and the quality of the service.”
This definition takes into consideration that devops is a cultural movement and the means to achieve the goals may vary greatly depending on factors such as the national culture, team structures, maturity of the organization and the domain. The details behind the definition will be addressed in later blog posts, as for now the goals are more important to know.
In this short blog post I have shared my journey to devops enlightenment, and through my experience as an example, described the problem: the birth of folk models and the spread of these models. To fix the situation, more detailed and deeper information on devops must be spread and taught to everyone working in the field of software development. Now that the goals have been set, we are ready to go deeper and start looking into the specifics.
Now, one could ask how do I know this definition is the best and only correct one? The answer is that it is so far the least incomplete and inaccurate definition encompassing most of the true nature of devops succinctly. While knowledge on devops deepens and time goes on, I believe that it can be improved upon and made more precise to envelop the true nature of devops even better. For now, however, I consider it to be accurate enough to communicate the basic goals and idea.
I hope that this post has given my readers something to think and helped with their own devops journey. In the next posts I shall be taking a closer look into the fundamentals of devops, tooling, and methodologies. Stay tuned for the next post and stay safe!
Accelerate: State of DevOps 2019, Google Cloud / DevOps Research And Assessment, available at https://services.google.com/fh/files/misc/state-of-devops-2019.pdf
Effetive DevOps, Jennifer Davis and Ryn Daniels, published by O’Reilly, available at https://azure.microsoft.com/en-us/resources/effective-devops/
Human factors and folk models, Sidney Dekker and Erik Hollnagel, available at https://sidneydekker.com/wp-content/uploads/sites/899/2013/01/Folk-Models.pdf
Understanding people’s needs and goals is the best way of setting a course towards sustainable business, as well as being the basis of a well-functioning society.
Exceptional and uncertain times can make us want to curl up in a corner somewhere. Won’t it blow over soon? Unfortunately, there is no returning to past certainties or escaping change. Even the new normal is changing rapidly.
We must therefore find ways of reinventing ourselves.
Decisions to do so should be made on the basis of information about customers’ needs and goals. As a service designer and consultant at Gofore, I’ve been able to work with a range of fantastic organisations. My own and customers’ experiences suggest that listening to employees’ and customers’ needs is more helpful than historical data when seeking a future direction.
In the midst of uncertainty, certainty can be increased by understanding what customers value.
Service design is one means of renewal
Operations can be profitably developed by understanding customers, employees or partners. The keyword is ‘systematic’ – customer surveys or service design should be a continuous approach rather than individual projects.
Service design is a fascinating blend of human science and technology. It combines the best of both. When we combine understanding — gained by observing human activity, and from interviews and other participative means such as workshops — with data obtained via data analysis and artificial intelligence, we can solve problems of greater complexity than before. The cumulative effects of dozens of individual problems in the service-event chain can be hidden from view. These are child’s play for AI.
The root causes of problems are identified in this way. Once such causes are known, solutions can be developed that generate value at both the human and economic levels. This provides a basis for creating agile services that can and should be scaled and duplicated because they were made to be self-renewing.
For example, systems must not burden people during widespread uncertainty. They must adapt and reform. This is what I regard as business creativity, the starting point for creating sustainable value.
How to ensure continuous renewal?
Renewal must occur at both individual and organisational level. As a service designer, I continuously update my expertise because I know that only this enables me to help customers deliver positive value and grow sustainably.
I view continuous renewal as unavoidable. It boils down to three sub-areas:
(1) Listening to employees, customers and other key partners must be systematic and continuous. Credible changes arise from using a range of expertise to collect and analyse a range of data.
2) You need the courage to try. Even the best-informed guesses are no substitute for experimentation. Understanding people and practical experience of how solutions work helps to clarify, or even find an entirely new focus for, business and one’s own place within it.
3) You have to pick your playing field and understand your strengths in relation to those of others. Now more than ever is the time to be a team player. Not everything is worth doing yourself — finding a partner can lead to significantly better outcomes.
Business creativity and renewal are based on systematic teamwork aimed at making life easier for people: a comfortable workplace, good service and a thriving business. Every step towards a seamless service experience is a step towards good, profitable growth and a thriving business. That’s why even small steps should be taken right now.
In this blog post, I am going to write about the adventure I had that led to setting up an OCR telegram bot for converting Image to text. I made it for Persian speakers and for now, it supports Persian and English languages.
It is called Nevisaar (in Persian “Writable”)
Processed text of an image given to the bot
The idea of an OCR project
I have joined Gofore about a year ago as a researcher to do my PhD. So far, I have been working on my research which is assessing state-of-the-art assistive technologies for the blind and improving the current solutions by finding the research gaps in this area.
For that I needed to deepen my knowledge in computer vision and deep learning. About a month ago, when I was learning about LSTM (Long short-term memory) recurrent neural networks I came across one of the Google projects (Tesseract-ocr) which uses LSTM for OCR (Optical character recognition).
I found the project really interesting since it is open-source and it can be used as a module in the assistive solution that I am working on. So, I decided to dig the repository a little bit and test it with different languages. While testing it, I noticed that this engine has a very good performance on Latin based languages, since the models are trained with 400,000 text lines spanning about 4500 fonts. However, when it comes to some languages that use Arabic script such as Persian (Farsi/Dari), Kurdish, Punjabi, Sindhi, Pashto, or Urdu it doesn’t have very good accuracy.
An example of Persian script (I know, Persian script looks complicated :D)
Challenges & Solutions
I checked the model size and the trained data for the English language was 22.4 MB while the one for the Persian language was 500 KB. I think by just looking at the model size you can estimate the prediction accuracy. 😀
Later I found another repo by Google that had some better-trained models. There, I could find another model for the Persian language that was 3.4 MB and had much better accuracy. However, it did not support many fonts and could not recognize some characters like Arabic comma (،).
Since my mother tongue is Persian and I was bored at home because of Madrid’s Corona situation, I decided to work on it as a personal project.
At first, I thought about training my own model but I knew that this needs a powerful machine and even running it on Google Colab won’t help because according to the Tesseract 4.0 documentation, the training from scratch takes a few days to a couple of weeks. But after checking the training documentation, I found out that it is also possible to “Fine Tune” a model. This means taking an already trained model and improve it by adding new fonts and characters to it. THAT WAS GOOD NEWS!
So I decided to find some of the characters and fonts that are used a lot in the Persian language and the model is bad at detecting them. Then I decided to fine-tune the model using ± training for new characters and Fine Tune for Impact for the new fonts. I faced a lot of errors when I first tried to run the training. Due to the inconsistencies in the default training text and the charset of the already trained data, those errors were happening which took me a whole weekend to fix them and prepare a decent dataset for the training (I think this is because those who trained the Persian model did not know the language).
Evaluation results of default model that I got from Github repo (you can see the encoding errors in the evaluation)
Interestingly with about 10 (around 9000 words) pages of training text and 3600 iterations I could train the model to detect some characters like (، »« . ّ ) and get better at detecting “B Nazanin” font which is very popular among Persian speakers. The word error rate decreased from 25% to 5% by only giving some more training text, fixing encoding problems, and adding some missing characters.
Evaluation results after fine tuning
The creation of Telegram bot
The error rate is still high in comparison with the English language. I would train a model from scratch if I have the resources one day but even now It has satisfying performance. When I achieved better accuracy, I thought it would be cool if I share it with other Persian speakers and test it with different kinds of texts and get some feedback. Since people mainly use Telegram in Iran and other Persian-speaking countries like Afghanistan, I thought making a Telegram bot would be a good choice.
I searched a little bit on Github and fortunately, someone had already coded a bot that worked with Tesseract. However, the commands and interface of the bot were not user-friendly. I edited the code and made a more interactive interface using Telegram’s Inline Keyboard.
Bot asks user to choose the language of the text used in photo
Now I needed a server to run the project and test it with some users. I already had a Raspberry Pi for testing object recognition algorithms. I thought maybe I can give it a try and see if the Raspberry can handle being an OCR server. Interestingly it did! I set up the bot and shared it on my social media accounts. (I also put a daily limit of 1000 requests so that little raspberry won’t get hurt :D)
I usually keep it open to get some fresh air
People reshared it and I received more than 800 requests on the first day. Now after two weeks I have around 100 images processed per day. It is growing slowly but surely. I have been receiving some feedback from users and noticed that some do not use the bot properly. For example, some users send handwriting images and expect it to work! Or some others send skewed, distorted, and noisy images.
Tesseract automatically undertakes some preprocessing on the image by making it binary or removing noise which sometimes works. But still the preprocessing could be improved by adding deskewing algorithms or removing margins of the image. There are many techniques for doing that and I will improve the bot little by little.
I have received messages from people working in different sectors using the bot. For example, teachers and students found it pretty useful because in our post-COVID life, online learning is getting trendier, and sometimes converting a whole page of a book to the typed format is a cumbersome task and OCR comes in handy.
All in all, I really enjoyed doing this project. If you are interested in giving it a try, you can check it out here. You just need to send a photo for the bot, choose the language of the text, and wait for the result.
Related blog posts:
We are always on the lookout for skilled developers to join our crew. Check out our open positions and contact us!