{"data":{"posts":{"edges":[{"node":{"excerpt":"","id":"65930467-2328-534f-aa46-090ceb6c826c","fields":{"slug":"/blog/what-are-design-sprints/"},"frontmatter":{"title":"What are design sprints?","order":null,"content":[{"body":"<https://www.boldare.com/work/why-design-matters/>From an undefined broad concept to a tested product in just five days? That’s a design sprint. Okay, maybe not a “product” but a prototype, definitely. A good design sprint means **positive and measurable progress** for the client, and significant motivation for the development team. \n\nThere are two versions of the design sprint. The first (classic?) version is neatly defined on [Wikipedia](https://en.wikipedia.org/wiki/Design_sprint):\n\n> A Design sprint is a time-constrained, five-phase process that uses Design Thinking to reduce the risk when bringing a new product, service or a feature to the market.\n>\n> This process helps the team in clearly defining goals, validating assumptions and deciding on a product roadmap before one line of code is written.\n\nThis first version was first presented in the 2016 book, [Sprint: How to Solve Big Problems and Test New Ideas In Just Five Days](https://www.thesprintbook.com/) by Jake Knapp, with John Zeratsky and Braden Kowitz. In this book, Knapp lays out a method of rapid development that he created while working at Google. Applying the key stages of Design Thinking to a five-day timetable, Knapp’s original model is:\n\n1. Monday – **map the problem**; understand it in depth, including the business opportunity, the potential users of the solution; agree your metrics to measure success.\n2. Tuesday – **sketch out the solution**; individual team members explores ways of addressing the understood problem (note: feasibility is not a criteria at this point, quantity of options is).\n3. Wednesday – decide **which potential solution is worth pursuing**; explore that solution further using tools such as storyboarding.\n4. Thursday – **prototyping**; design and build a prototype for testing.\n5. Friday – **testing**; present the prototype to five people from the target user audience.\n\nStages one to three come with structured exercises to help the sprint team address the issues efficiently and in depth. However, as with anything new, sooner or later improvements are made…\n\n![Boldare team](/img/team-meetings.jpg)\n\n## Design Sprint 2.0\n\nThe latest version of design sprints cuts down on the time factor, being a four-day process, not five. The extra time is saved by effectively combining Monday and Tuesday’s activities into a single day, working at a faster pace, keeping the energy and momentum high.\n\n**The new timetable looks like this:**\n\n1. Monday – map the problem; sketch out the solution.\n2. Tuesday – decide on a solution; storyboard\n3. Wednesday – prototyping.\n4. Thursday – testing.\n\nThe time-saving is achieved by fine-tuning the exercises relating to understanding the problem, and devising and choosing solutions. The final two days – prototyping and testing – are as per the original model.\n\n## When is a sprint not a design sprint?\n\nWhen it’s **agile**. In other words, there is some overlap in terminology and a design sprint is not the same as an agile sprint (using, for example, the scrum framework), though both aim to achieve significant progress in a sort space of time.\n\nWhereas an agile sprint is a part of a multi-sprint process, creating and exploring a sequence of product features and iterations, a design sprint is usually a **‘one time only tool’ **during your project, focused tightly on understanding the problem in depth and deciding on a way forward.\n\nPut simply, the focus of the design sprint is to decide **what the product should be** and whether it should be built. An agile sprint (one of many, remember) is a case of, does this version/feature of the product work?\n\nA design sprint may be followed by a series of agile sprints. Although, if you’re tackling a complex, multi-faceted problem, as the product begins to take shape via the agile sprints, you may also be running another design sprint focused on a different aspect of the problem or feature of the eventual product.\n\n![Boldare team](/img/team.jpg)\n\n## Purpose of design sprints\n\nNaturally, a design sprint is not always the right tool for the job. According to sprint originator [Jake Knapp](https://www.invisionapp.com/blog/popular-design-sprint-questions/), design sprints should be used for when:\n\n* You have a big project or big problem to solve;\n* You’re just starting out;\n* You don’t already have the answer to your problem;\n* You’re faced with a potentially expensive project and need a cost- (and time-) effective way of proceeding.\n\n**So, when should you not sprint? **\n\n* When there is insufficient information available – for an effective design sprint, you need information often accessible only via key stakeholders in the client organization, including the overall product vision (though this may already have been worked through in a Product Vision Workshop), user needs and views, details of any previous attempts to solve the problem, and also details of any current version of the product (if applicable).\n* When it’s just not possible to produce a prototype in one day. The prototype should be sufficiently representative of the aimed-for solution for test users to provide meaningful feedback. Sometimes, that can be done in a day.\n\n## The Design Sprint 2.0 process\n\nEach day of the four-day design sprint process includes the following:\n\n### Monday (understanding the problem & solution-storming)\n\nUnderstanding the problem is done via a series of exercises and structured conversations. In a nutshell, it’s about ‘downloading’ all the necessary information to the sprint team in as efficient a way as possible. To begin applying this knowledge, key questions and long-term goals are identified, and the product is mapped.\n\nNext it’s time for a solution focus. In place of the well-established group brainstorming method, each team member ‘storms’ individually, sketching their own potential solutions using a straightforward critical thinking process.\n\n### Tuesday (choosing a solution & storyboarding)\n\nAgain using recommended exercises, the team decides which solution will be taken forward to the next phase. Once a decision is made, a storyboarding process is used to illustrate a step-by-step plan for the prototype.\n\n### Wednesday (prototyping)\n\nThe decision-making is done, it’s time to build, to bring the storyboard to life in the form of a physical prototype. This is not a version of the product (viable or otherwise) but a realistic-looking representation that will tell you if you’re on track or not.\n\n### Thursday (testing & feedback)\n\nTesting, testing, 1, 2, 3… Five users are shown the prototype in five different 1-to-1 structured interviews geared to obtaining the maximum possible useful feedback.\n\n![Boldare team](/img/team-meeting-in-apollo.jpg)\n\n## Benefits of design sprints\n\nEvery time you run a design sprint, you’re aiming to get answers to key questions concerning the problem and the product, a sufficiently-detailed prototype, feedback from users following testing, and a plan for the next stage of your digital product development. These outputs are the obvious benefits. However, there are more…\n\nFirstly, you’re **bringing people together.** People with different knowledge, experience and expertise who can benefit from working with each other. Not only in the sense of achieving the best possible product at the end of the process, it’s also a collaboration that is a foundation for any future working together.\n\nNext, you’re ensuring **project transparency **across the organizations involved. By accessing and discussing project information collectively, you know that everyone is on the same page and working with the same goals in mind.\n\nThe design sprint process, for all its speed, is a cautious one. You’re **moving fast** but in such a way that you’re less likely to go too far down any blind alleys. Rigorous testing of the key features/functionalities via the prototype reduce risk and mean that when you come to make the big technical and time investment developing the full product, your efforts will be highly focused.\n\nYou’re **involving the target users **right from the start and their feedback is a key guiding influence on the direction of development. As opposed to being an end-of-process add-on.\n\nFinally, regular use of design sprints for the right projects is part of developing a more innovative culture in an organization. A design sprint is a concentrated burst of focused creativity and for anyone taking part, it can be a powerful experience.\n\n![moodboards](/img/boldare-website-moodboards.jpg)\n\n## Design sprints in Boldare – a case study\n\nWhen sister companies XSolve and Chilid were in the early stages of our merger to create **Boldare**, we naturally used the same business tools for the project that we use on our client projects. The goal was to create a unified entity that could offer the full range of digital product development services. To test that business idea, we used a version of the design sprint method.\n\n**The detail of our process looked like this:**\n\n1. Our designers, developers and content writers got together to analyze the situation.\n2. Having decided to proceed with the Boldare website as the product, the sections and content elements of the site were mapped out using the tried and tested sticky notes.\n3. Having effectively produced the information architecture and a rough wireframe, the developers began coding, creating the [UX](https://www.boldare.com/work/why-design-matters/) and visual elements.\n4. The resulting prototype was tested and feedback received.\n\nThis process was part of a four-week project, ending in a website created to minimum viable product (MVP standards. That MVP is now the basis of the boldare.com website as the merger progresses.\n\nRead [Boldare case study](https://www.boldare.com/work/case-study-boldare/) to learn more. \n\n## Summarizing design sprints\n\nA design sprint is a very specific process for getting from business idea to user feedback within a week. As a digital product development method, it reduces project risk and expense and leads to rapid creation of a physical prototype (and the consequent focused user input) via the most efficient route possible. In addition to the benefits to the project, design sprints, when used regularly, can be part of creating a culture of innovation in an organization and enhancing the quality of that organization’s teamworking."}],"job":null,"photo":null,"cover":"/img/lean-startup-moodboard.jpg","lead":"The design sprint method is a great tool for **digital product development**. That’s why, when it’s a fit with a project, we at Boldare use it to create a shared understanding of the client’s product and rapidly develop a **useful prototype**. Design sprints carry a number of benefits, some specific to the project and other longer term advantages for the organization that uses them.","templateKey":"article-page","settings":{"date":"September 12, 2018","slug":"what-are-design-sprints","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"b5d246ec-f16d-5e88-aacf-fbfd7fcc38a8","fields":{"slug":"/blog/how-machine-learning-is-boosting-businesses/"},"frontmatter":{"title":"How machine learning is boosting businesses","order":null,"content":[{"body":"## Artificial Intelligence: the next digital frontier\n\n_“Artificial intelligence is poised to unleash the next wave of digital disruption, and companies should prepare for it now._” So says a recent report from the [McKinsey Global Institute](https://www.mckinsey.com/~/media/McKinsey/Industries/Advanced%20Electronics/Our%20Insights/How%20artificial%20intelligence%20can%20deliver%20real%20value%20to%20companies/MGI-Artificial-Intelligence-Discussion-paper.ashx) titled, _“Artificial Intelligence: the next digital frontier?”_\n\nThe report is one of the most comprehensive reviews of the **artificial intelligence** and **machine learning** landscape. Drawing on data regarding investment levels, the strategic direction of the major internet companies, a survey of 3,000+ senior executives, a variety of industry case studies, and forecasts of AI's likely impact on the marketplace, MGI paints a convincing picture of how certain industry sectors are leading the way in what amounts to an AI revolution. Early adopters are already seeing practical benefits and investors are interested. \n\nAt **Boldare** – the digital product design & development company - we see artificial intelligence, and specifically machine learning, as critical to the future of product development and often central to the digital transformation journey of our clients."},{"body":"## Artificial Intelligence: a quick definition\n\nIn general, artificial intelligence, or AI, refers to machines performing tasks that previously would have required human thinking; for example, pattern recognition, data synthesis and analysis, and forecasting from current (i.e. limited) information.\n\n## Factors driving the coming AI breakthrough\n\n>  “The ingredients for a breakthrough are in place. Computer power is growing significantly, algorithms are becoming more sophisticated, and, perhaps most important of all, the world is generating vast quantities of the fuel that powers AI—data. Billions of gigabytes of it every day.”\n\n<BlogQuoteAuthor text={`“Artificial Intelligence: the next digital frontier?”, page 6`} />\n\nThese and other drivers are behind the growing use and influence of AI in our **digital development**. Another factor is finance. Even if a lot of investment is a case of jumping on the AI bandwagon, there are still impressive quantities of money flowing into AI research and development. MGI cite a 2016 figure of total investment in AI of $12 billion, with 60% of that amount going to machine learning.\n\nHowever, despite the well-known cases of Google and Amazon, we’re yet to see widespread **commercial adoption of artificial intelligence**. The MGI research drew on 160 global use cases from a range of industries but only one in eight projects had left the experiment stage behind. Outside of Silicon Valley (or more accurately, outside of the tech sector) there are few companies embracing AI for process automation and data-handling despite the technology being well-proven and subject to continuous improvement. We’re at the tipping point for AI but we haven’t quite ‘gone over the edge’ yet.\n\nThat said, MGI have identified a six-point profile of companies most likely to invest in AI (i.e. the current early adopters):\n\n* **Forward-looking** – companies already investing in related technology are more likely to invest in AI and machine learning.\n* **Resources available** – investors tend to be larger companies.\n* **Broad scope** – early adopters tend not to specialize in just one type of technology. They use multiple AI tools for multiple needs.\n* **Focused** – the AI investment is linked to the company’s core business, it is more than a case of exploring an interesting side road on the company journey.\n* **Creative** – such companies are using AI for product and service innovation, not just to automate repetitive, rules-based processes.\n* **Committed **– there is a strong pro-AI leadership at the c-suite level.\n\nOutside of companies like this, investment remains cautious (MGI found only 20% of companies are planning to increase AI spending by more than a tenth) but these early adopters are leading the current wave of interest in artificial intelligence."},{"body":"## Potential benefits of investing in AI\n\nBut what exactly is driving these early adopters. What benefits are on offer with AI and machine learning?\n\n### Accuracy\n\nTechnology is approaching a point where it can take over certain tasks from the human brain. However, unlike the human brain, AI doesn’t get tired and this has an obvious benefit for accuracy and error rates. \n\n### Profits & financial performance\n\nSome of the big names leading the AI vanguard in the commercial sector have shown its financial viability. Amazon’s purchase of Kiva (a robot ‘picking and packing’ company) led to more than a 75% reduction in packing times and a 50% increase in inventory capacity; meanwhile operating costs fell by 20%.\n\n### Forecasting\n\nBetter supply chain forecasts result in the design of a better offer, specifically tailored to the market. The MGI report suggests that in the retail sector, sales lost due to product unavailability can be reduced by up to 65% thanks to AI-powered forecasting.\n\n### Production\n\nProduction processes can be optimized using AI; for example, ‘collaborative robots’ (i.e. capable of interacting intelligently rather than simply carrying a rigid sequence of movements) can potentially increase productivity by 20%. \n\n### Marketing\n\nPromotion of goods and services depends on offering the right package to the right person with the right message and the right price, at the right time, and that depends on being able to use the available data to its fullest advantage. \n\n### Delivery\n\nA great customer experience should offer value, be personalized, and lead to increased revenue. AI-driven ‘monitoring’ of customer activity can be used to, for example, make real-time purchase recommendations. And new smart payment systems mean the customer’s purse or wallet doesn’t leave their pocket (though the money WILL leave their account!)\n\n## AI and Machine Learning at Boldare – a real application\n\nAt Boldare – **the digital product design & development company** - [we see artificial intelligence](https://www.boldare.com/blog/machine-learning-content-moderation/), and specifically machine learning, as critical to the future of product development and often central to the digital transformation journey of our clients. We aim to create machine learning models that can automate tasks, improve decision-making, optimize costs and processes, help to understand customers, and boost profitability.\n\nOne example of boosting a client’s business with machine learning tackled **the problem of content moderation**. Whether it’s profile pictures, forum posts, or in this case, automobile tires, as content is added to a system, checking that content is a tedious, repetitive task. One of our projects was creating and maintaining an integrated system for a tire wholesaler. As new products are added to the system, each one must be checked and that checking process is time-consuming. \n\nBy collecting the **product data** and a set of manual moderation in an external database, we could train a machine learning model to predict the probability of the data of an unverified product being correct. The AI’s predictions concerning new products were then compared to the results of the manual process until we could guarantee an agreed level of accuracy, leading to fully automatic moderation of the system’s content."},{"body":"## The future of AI in business?\n\nThe MGI report offers a prediction as to which industries have more of these early adopter organizations and companies. These are sectors that a) have a strong business case for the use of AI, and b) are already seeing technology developed in that direction.\n\n**Financial services** – AI anti-fraud systems offer improved accuracy and speed of checks.\n\n**Retail** – potential benefits come from improved inventory forecasts, automated customer operations, and targeted marketing campaigns.\n\n**Health care** – prediction of high-risk patient groups encourages preventative medicine rather than treatment, AI-automated diagnostic tests are faster and more accurate with cost savings and better patient outcomes.\n\n**Advanced manufacturing** – fully automated assembly lines suffer fewer errors, sales/leads prioritization can be enhanced, and transport & delivery logistics optimized.\n\nMachine learning and artificial intelligence are the future. The only question is, how do you [ensure you're part of that future](https://www.boldare.com/blog/machine-learning-digital-product-costs/)?\n\n## A summary of the current AI landscape\n\nArtificial intelligence usage is ready for a breakthrough. Levels of investment in AI development continue to grow and thanks to a range of early adopters and some big names (Amazon, Google, etc.) artificial intelligence is set to expand its influence. Sectors such as retail, healthcare, manufacturing and financial services are set to advance their use of AI and a number of clear potential benefits can be seen in terms of forecasting, production, marketing, customer delivery, and profit."}],"job":null,"photo":null,"cover":"/img/developers-working-on-machine-learning.jpg","lead":"**Artificial intelligence** will soon become universal. Currently, investment rates are high but complete, tested products in operation are still relatively unusual. That said, a report from **McKinsey** clearly indicates that we are at a tipping point and AI and [machine learning](https://www.boldare.com/machine-learning/) are set to be a dominant theme in tomorrow’s technology.","templateKey":"article-page","settings":{"date":"September 12, 2018","slug":"how-machine-learning-is-boosting-businesses","type":"blog","category":"Future"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"7e0e1169-5c9d-5504-a3c6-bdff665380e7","fields":{"slug":"/blog/scaling-your-product-thriving-in-the-market/"},"frontmatter":{"title":"Scaling Your Product – thriving in the market","order":null,"content":[{"body":"Is bigger usually better? When it comes to the number of users for a digital product, the answer is a definite yes. However, specialized and niche your chosen market, you’re still hoping to capture as much of that market as possible.\n\nHopefully, so far in your product development journey, the users and the market have been constantly in mind, with **their needs providing a clear target** for the development team to aim at. Let’s assume that your product concept has been validated and proven worthy of following up, and that your fledgling product has evolved (i.e. gone through repeated cycles of improvement) to the point where there is a good product-market fit. **Now it’s time to scale up.**\n\nYou need a product that is not only functional and saleable but that can also grow with your users. There are two key drivers here: the increasing size of the user group and new development requirements that come from an expanded user base.\n\nAt **Boldare**, this is another stage in our [digital product development process](https://www.boldare.com/full-product-development-cycle/), based on a combination of the lean startup approach and the agile scrum framework. Maybe we’ve been with you from the very start of the process, or perhaps you’ve come this far without us but now could benefit from some scaling expertise. \n\nEither way, we will take your product and ensure it is robust enough to weather your expansion plans.\n\n## What is scaling?\n\nIn a recent podcast on the topic of scaling, Airbnb CEO Brian Chesky said,\n\n> There's really two stages of a startup's product. The first is design a perfect experience and then you scale that experience.\n\nWhile the definition of perfect is probably best left to philosophers, we can agree that the goal of the product development so far has been to create the best possible product for its target market. Scaling is about ensuring that **product is robust enough to survive** and then thrive in that market. The overall aim is an efficient, secure product, serving a larger number of users.\n\n![scale stage](/img/full-cycle-product-development-stages-scale.png)\n\nMarket success and consequent scaling often requires companies to ‘scale up’ other aspects of the business, including the sales and marketing strategy, hiring new team members, maybe even seeking out additional funding but in terms of digital product development, it means adapting the product to cope with rapid growth of the user base, usually by developing an enhanced and improved version through a series of iterations, each changing or adding an element of the product, and each followed by user testing to validate the effectiveness of the change.\n\nThe reality is that the product you released, the product that fit the market’s needs so well, is not your final product. The world changes and so do markets. Scaling is how you keep your product aligned with the market, making it better in the process.\n\n## Why you need to scale your product\n\nIn a nutshell, if you want your product to not only take slice (a big slice?) of the market but also keep it, and expand it, then you need to scale your product. It’s as simple as that. \n\nAt Boldare, when scaling your digital product and bringing it to maturity, we focus on three core aims:\n\n* Growth\n* Incorporating new technologies\n\nand\n\n* Improving product reliability without affecting current performance\n\nWhat this means in practice is that we look closely at the means of expanding the product’s scope, both horizontally and vertically. We apply our engineering know-how with scalability and stability in mind. We refine the current functionality, and seek out opportunities for new functionality that fits both the product and the market.\n\n## When scaling, how do you know what to change?\n\nThough options for change and improvement (like inspiration) could come from anywhere, once your product is on the market, there are a several common sources for potential scaling work:\n\n* **Additional or new user needs** – The development process so far has included user input and repeated testing with early adopters. But… the more people using your product, the more suggestions for features you’ll receive; and some of them won’t be niche or individual wishes, they’ll be must-haves.\n* **Tracking user activity** – By following how people use the product (especially simple if the product is a website) you can gather useful data, including which elements are most popular, which are most avoided, and any features or processes that users frequently give up on. This tracking process gives you data which can be followed up with users to more clearly establish what changes would benefit them.\n* **Users will find problems for you** – However ‘perfect’ you think it is, your users will find issues with your product; often issues that you wouldn’t have thought were a problem (which is why the user perspective is so useful). \n* **Unexpected uses** – Not everyone will use the product in the ways that you intended. Maybe the product’s core feature is not accessed by a significant percentage of users. Maybe a feature that you saw as ‘useful but not essential’ turns out to be wildly popular. How people use your product day-to-day can indicate unexpectedly fruitful avenues of development.\n\n**What are the benefits of product scaling?**\n\nScaling your digital product carries the following benefits:\n\n* **Speed** – Scaling should be about small, rapid changes; each an improvement on product functionality. At this point, your product is already on the market and quick responses to user needs and feedback will help grow your user base.\n* **Efficiency** – The rapid iteration and testing process when scaling maximizes the use of developer time.\n* **Non-disruptive** – The small (but cumulatively significant) changes in scaling mean minimum disruption or difficulty for users. In an ideal world, they notice and appreciate the improvements without the negative aspects of change.\n\n## Scaling – the Boldare process\n\nWhether you’ve been with us for the whole product development journey or just calling on us for support with scaling, at Boldare we use the relevant aspects of the lean startup build-measure-learn cycle combined with the agile scrum framework.\n\n![Build measure learn chart](/img/lean-startup-build-measure-learn.png)\n\nTo put scaling in context, our template development process is as follows:\n\n* **Product basis** – We explore the underlying product concept through product vision workshops.\n* **General UI/UX prototyping** – Often using a clickable wireframe prototype, we put together a [user interface (UI)](https://www.boldare.com/work/why-design-matters/) concept and work on the graphic design of the product (usually with mood boards as a tool to test options).\n* **Minimum viable product** – A working version of the product (often only with the core features) is further tested with users to ensure basic viability in the marketplace.\n* **Product-market fit** – The releasable product is developed through repeated iteration and user testing, arriving at a version fit for wider distribution.\n\n(For more detail, see [How we do digital products at Boldare and what it means for your business](https://www.boldare.com/blog/agile-process-for-digital-product-development/)).\n\nThroughout this process, at every stage we work closely with the client, involving them at each point to ensure the agree product vision is being delivered. Part of that close collaboration includes a knowledge transfer of our key expertise to the client’s own team, with the goal of broadening the client organization’s development options in the future.\n\n## Scaling in practice – [Ionoview](https://xsolve.software/case-study/case-study-building-a-scalable-saas-product/), a case study\n\nIonoview is a **SaaS product**, comprising of web and mobile apps for housekeeping services, based in the UAE, the Kingdom of Saudi Arabia and Lebanon. The core functionality enabled users to carry out bookings, scheduling, logistics routing, payment and accounting for their cleaning businesses. When the client approached us, their SaaS product had been well-tested and validated and was ready for scaling to really optimize its use and value. As a product already in 24/7 use, it was crucial that any improvements be seamless for users to minimize any disruption to the service.\n\n![Ionoview ](/img/ionoview-hd.jpg)\n\n**The scaling work included:**\n\n* Preparing for continuous integration\n* Moving the development environment to containers\n* Aligning configuration with production servers\n* Fixing major bugs\n* Redesigning key elements of the UX\n* Implementing new functionalities\n* Migration of the legacy solution to supported versions of the programming languages and more up-to-date frameworks\n* Moving the product to a cloud solution\n* Moving some of the crucial business processes from the monolith application to microservices\n\nThe outcomes were a subsequent tenfold growth in use (500,000 bookings made), 3 million USD raised in funding, and an average of 40% more orders annually.\n\nBoldare’s collaboration with Ionoview continues…\n\n**Summarizing digital product scaling**\n\nScaling is a process of improving the finer details of a digital product, making it the best it can be under the current (and foreseeable) market conditions. It depends on rapid changes and adaptations, including where indicated, the introduction of new features, which are tested with the product’s user base. The product has already been proven fit for the market, scaling is about taking full advantage of that market’s opportunities."}],"job":null,"photo":null,"cover":"/img/ionoview-web-app-mockup.jpg","lead":"In the **digital product development process**, scaling is the activity that gives the product sustainability and stability. A series of small but significant **tested iterations** that respond to, and anticipate, the market’s requirements. Not only does scaling involve responding to user feedback and suggestions, but also anticipating user needs in order to increase market share.","templateKey":"article-page","settings":{"date":"September 12, 2018","slug":"scaling-your-product-thriving-in-the-market","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"3914c4ff-8699-5b32-8b57-338e0a21a76c","fields":{"slug":"/blog/wondering-about-viability-let-impact-mapping-reassure-you/"},"frontmatter":{"title":"Wondering about viability? Let impact mapping reassure you","order":null,"content":[{"body":"It leads to raised awareness in building a product and more mature delivery, because all interested parties are focused on what is important for the time being and not just pushing extra features at the end users. \n\nAs a result, the development team builds a product that actually responds to a specific business objective or at least intentionally tests some assumptions to check the potential value.\n\n## Why?\n\nOne of the most important advantages of** impact mapping** is that it supports stakeholders while making roadmap decisions and let them adapt quickly to the changing business environment. What is amazing about this technique is that it is quite fast, visual and collaborative, because business representatives work side by side with the technical experts. \n\n**Awareness of both the goal and big picture **enables the development team to prepare better recommendations, not only related to selecting a specific technical solution. During the decision-making process more options are available for discussion and usually the optimal, shortest way from deliverable to a goal is selected. That often prevents teams from creating over engineered solutions.\n\nIf a software solution is not the best choice it might be reasonable to solve a problem with a non-technical option and focus on building some other software that will actually bring the business value. In my opinion, impact mapping can be used both for high level business as well as more detailed product goals.\n\nAdditionally, **using impact mapping saves money** - we can test an assumption or solve a problem fast, and a working code is not always the winning solution. \n\nMoreover, it might be also useful for managing personal goals because - why not?\n\n## Who?\n\nThe technique is designed to improve collaboration between business stakeholders and senior technical people. However, I personally think it might also be suitable for the development team members as long as they have extensive knowledge about the product and understand business goals.\n\n## How?\n\nHow do you start with impact mapping? At our company, we started with trying it out on ourselves. I did attend a workshop lead by **Gojko Adzic** and afterwards conducted two similar internal trainings with the team. It is quite easy to start with, as Gojko prepared ready-to-wear open source instruction that helps you to prepare your own workshops. Reading his book ‘_Impact Mapping: Making a big impact with software products and projects’_ may also clarify a lot. But the easiest way is to practice and I would very much like to encourage product owners and their teams to do that.\n\n## What?\n\nLet’s have a look at the impact map structure and try to understand its flow. An impact map consists of four levels: goal, actors, impacts and deliverables."},{"body":"**Goal - why are we doing this?**\n\nThe business objective will always be the heart of an impact map. It supports us in the reflection of what aim we want to achieve and answers the question ‘why are we doing this in the first place’. Moreover, comparing the solution with the original goal will help the team understand and check its value. \n\nIn order to write down a good goal do not hesitate to ask the question ‘Why?’ multiple times till you are sure you have arrived at the real reason. It is also good practice to agree on metrics for the goal (not only of success, but also for what we feel will be a failure). Real numbers will definitely be of help while figuring out impacts and deliverables.\n\n**Actor - who is affected?**\n\nWe specified the goal, now we need to think about who will be impacted by decisions made in the context of that goal. Building products is always about the people, we focus on their pain points, needs and goals. And it is not only about the end users, but also a company’s employees or competitors. \n\nThis part seems to be the easiest one, but do not forget about secondary and off-site actors as well as people who might obstruct the goal.\n\n**Impact - how should the behavior change**\n\nWhat is exactly an impact? The easiest definition? A behavior change that we would like to achieve to measure the business value.\n\nIn this step we should focus on what we really want. This is the time to consider the relations of our actors in the perspective of a business goal and create impacts that answer the question how should the actors’ behavior change? What actions should stop, start, occur less or more in order to satisfy the business aim.\n\nTo define a good impact we can try to focus on small changes and limit the options for instance to one user type, one location, or a specific time period, just to test the idea and explore it further if it appears valuable to the business.\n\n**Deliverable - what can we do to make the impact happen**\n\nNow we can talk the scope. It seems to be the least important part of impact mapping, but definitely a good place to think about functionalities. List as many ideas as you can and try not to limit yourself to technological solutions, maybe there are offline options that will fit the goal perfectly?\n\n## What’s next?\n\nOnce you have a list of deliverables that actually reflects the goal that you are aiming at, there are several steps to take next:\n\n1. Estimation - check how complex the ideas are.\n2. Prioritisation - based on estimation (or not) decide which actions suit the need best.\n3. Road map - if you want to implement more of the deliverables, it is high time to divide them into a high level plan.\n4. Creating epics, user stories, user story map - once we have a plan which deliverables are first to try out we can focus on getting to know more about them.\n\n## Tips and tricks\n\nIt is crucial to define a good goal in the center of the map. If you feel that there is trouble with forming the right objective, maybe instead of trying right away with an impact map, just start with a goal refining session, focus only on the ‘why’ question. \n\nPlease do not be tempted to put a deliverable in the place of a goal, because the entire process will likely fall apart.\n\nIf you are using impact mapping for the first time, the impacts might need some more attention. Try to find some examples or prepare some cheat sheets for the mapping session in order to help your team grasp the general idea.\n\nAt the deliverables stage it is worth checking if the solutions that had been written down actually respond to a specific impact and are not just a loose wish list.\n\n## Conclusion\n\nAs simple as impact mapping is, it might be a bit confusing to use for the very first time. Defining goals and impacts may be a challenge to start with, but once you get used to the rules the whole method will help you keep track of priorities and plan the shortest path to fulfilling the business goal. \n\nAnd the last tip? Impact mapping really makes sense if you use it not only once, but make it a habit throughout the process.\n\nWant to learn more?\n\nFollow Gojko, go for a workshop, read the book or best - try it out!"}],"job":null,"photo":null,"cover":"/img/team-meeting-in-apollo.jpg","lead":"Impact mapping is a strategic planning technique to help you manage goals, decide on priorities, and spot risks, as well as figure out solutions.","templateKey":"article-page","settings":{"date":"July 06, 2018","slug":"build-product-that-make-impact","type":"blog","category":"How to"},"contributor":"Natalia Kolińska"}}},{"node":{"excerpt":"","id":"ce64d144-f9f4-528b-be78-62cda2836cbb","fields":{"slug":"/blog/5-signs-you’re-ready-for-holacracy/"},"frontmatter":{"title":"5 Signs You’re Ready for Holacracy","order":null,"content":[{"body":"Of course, the **OS analogy** implies that whatever your business goals, and whatever you build, they must fit within the rules of holacracy — obey the system protocols. Which in everyday ‘people language’ means limitations. After all, there are things we can do with iOS that can’t be done with Windows, and vice versa. Maybe that means that holacracy is better for some types of organization than others. Is it right for you?\n\nHolacracy definitely carries some strict recommendations in its **Constitution**, laying down guiding principles (e.g. safe enough to try) and procedures (e.g. the structure of Tactical Meetings) but… my practical experience as CEO of Boldare, a newly-holacratic company, tells me that holacracy could work anywhere. The questions is, **are you ready?**\n\nHow do you know if you’re „ready”? I recently put the same question to a group of software development company CEOs. This article is the latest in a series chronicling Boldare’s journey into holacracy and outlines 5 key indicators that your company might well be ready for holacracy.\n\n## Company Culture\n\nThe big question first, underpinning everything else: what’s your company culture like? If you take a look at the matrix below, you’ll see that the broad categories of organizational culture can be expressed as, **Collaboration, Control, Cultivation**, and **Competence**.\n\nIf I was to come to your business and ask, How do you do things around here? what kind of answer would I get?\n\n![Schneider Culture Model ](/img/matrix.jpeg)\n\n[Schneider Culture Model ](http://agilitrix.com/2011/03/how-to-make-your-culture-work/)\n\nHolacracy requires a **flat organizational structure**, in which people work closely together and improvement is a constant goal. In other words, if you see yourself on the left hand side of the matrix (with a dollop of Competence, of course) then holacracy could be for you. And if you’re company that uses agile software development than it’s more than likely your software department is very much into a culture of self-organization already.\n\n## High levels of trust\n\nOperating within a collaborative culture, holacracy is all about individual responsibility and in order for responsibility to be given, accepted, or used, trust is needed. Each member of a circle must know they can trust their colleagues to deliver, to contribute, to help. Most of all, they must trust themselves. Traditional, hierarchical organizational structures have encouraged us all to rely on managers to be responsible, to take and approve the decisions. However, a holacratic “candidate” company has a flatter structure, and what used to be called „managers” **are no longer there** to supervise everyone else. They are there to refine and improve the processes, help evolve the holacracy model to suit the business needs and as for organization and instruction, those come from within the teams. \n\nThe teams are trusted to **organize their own work**, make their own decisions, identify and tackle their own problems (known as „tensions” in holacracy). In fact, the team — through the various roles — take on the leadership skills previously associated with managers, like problem-solving, decision-making, planning, delegation, communication, and time management. What’s more, individuals within the teams trust each other.\n\n**How do you recognize** this widespread trust? For us, one indicator can be seen in the fact that we have no executives in fancy corner offices. Management roles sit in the main space with everyone else. No status-heavy views from the window. No secretaries or personal assistants. No traditional trappings of management at all. And the result? The unspoken but clear message is that we’re all of value to the company, status and hierarchy are flattened out, and it’s much easier to communicate without ‘status barriers’ getting in the way.\n\nIf your teams are making their own strategic decisions, and receiving coaching and mentoring instead of direction from your managers, then you’re already part way to working holacratically.\n\n##"},{"body":"## Absolute transparency\n\nTrust is more likely to thrive in a secret-free environment. If your organization operates on a need-to-know basis, holacracy still be some way off. Holacracy depends on everyone knowing what everyone else is doing (or at least, having access to the information). Yes, a holacratic company has very clearly-defined roles and accountabilities, but that doesn’t mean restrictions, just information: financial results, company structure, plans for the future, open hiring/firing processes, and so on. For example, at Boldare, we publish our financial results daily on the company Slack channel for everyone to see.Transparency gives everyone the context to make the right decisions. After all, if you limit information to selected people, only those people will be equipped to make decisions.\n\nSo, how open are you? How transparent are your dealings? We used to do the usual things: openly publish a quarterly summary of our past 3 months and a yearand the plans for the next… We also used to have quarterly planning sessions, pulling in our various ‘traditional’ departments: Customer Service, HR, Finance, Strategy, Sales… We used Atlasian’s Confluence to keep our knowledge and visibility about product planning nice and clear…\n\n![](/img/slackbot.jpg)\n\nThanks to Slack bot at Boldare everybody are updated daily of a financial context, so they can make better decisions promptly\n\nIn other words, we had a pretty good degree of openness already. But that just inspired us to see what could be done if we were prepared to go further. Now those classic shared services are covered by accountabilities within each team, or circle. Each circle has its own Slack channel to communicate on processes, progress, news, changes, and so on. To sum up, we used to be translucent, now we’re truly transparent. And that’s paying off in terms of trust.\n\n## With great power comes great responsibility\n\nThe biggest challenge of switching from traditional to holacratic mode is the transfer of power. In a classic hierarchy, the further you are from the day-to-day action of the business, the more responsibility and decision-making power you have (and almost definitely, the less well-informed you are). If this sounds backwards, it’s because it is.\n\nIn a** holacracy,** everyone has clear accountabilities and, within the bounds of those accountabilities, they are the decision-maker. A superior circle is responsible for setting each circle’s purpose and strategy, so it’s clear what decisions will suit the company and which will not. If it seems to offer a good chance of improvement and it’s ‘safe enough to try’ then do it! This can and should be very liberating, making for better-informed, more rapid decisions. But not everyone will find it comfortable, at first.\n\nWe were fortunate in that we already had a fairly **simple structure of responsibilities** (just three key ‘divisions’: Business, People, and Engineering, where very often decisions were made on a consensus) so we weren’t dismantling anything too complex. What’s more, as an agile organization, we were used to a Product Owner mindset. Even before holacracy, Boldare's employees were effectively Product Owners in their own projects, keeping the ‘management interference’ to a minimum. If you’re the same, keeping the decision-making authority with the people best-placed to understand the situation (or maybe you just see the value in moving in that direction) then holacracy could be your best option.\n\n##"},{"body":"## A startup mindset\n\nIt’s no surprise that holacracy was developed by a software company with an agile approach to the world. And returning full circle to the first indicator: you’re probably half-holacratic already if you have a startup culture in your organization. Are you:\n\n* Constantly questioning the status quo?\n* Always searching for the next improvement?\n* Curious? — Let’s try it!\n* Open to change? — it’s always difficult but is it safe enough to try?\n* Open to failure?\n* Open to feedback?\n\nIn other words, open! This openness is all about a **willingness to try new things**, which in turn links back to the point about responsibility and decision-making. In a holacratic organization, everyone has the right to **address a tension**, make a proposal, if that tension is within their accountabilities and the proposal is safe enough to try, then the decision is theirs.\n\n![](/img/paulina-product-designer.jpeg)\n\nOf course, as in any other kind of business, failure happens. But for us, as an agile holacracy, **failure means learning not punishment**. In fact, we see failure as one of the best teachers, a key part of the learning and improvement process. If this sounds familiar, then you could be ready for holacracy.\n\nA collaborative culture, trust, transparency, responsibility and a startup sensibility… these key ingredients will make it easier to transition to holacratic working. In fact, if you already have these factors in place, holacracy would seem a perfect fit for you.\n\nBut of course, the transition to holacracy will still be difficult — all change is. There have been several high profile cases of companies ‘converting’ to holacracy and then later abandoning it. It’s not for everyone. We’ve been working holacratically for six months now and I can tell you, people will complain, they will face barriers. As well as learning new principles, they have to unlearn the old ways too. Unlearn their natural reliance on managers as sole decision-makers.\n\nMaybe the most important factor is enthusiasm, a willingness to make it work even when the going gets a little tough. After all, holacracy is just a tool (and operating system) and it’s not the tool that gets the job done, it’s the energy, attitude and mindset of the people using it."}],"job":null,"photo":null,"cover":"/img/team-meeting-during-holacracy-workshop.jpg","lead":"Holacracy is often referred to as an ‘operating system’ for organizations. The premise is, I suppose, install the operating system and then build your structure and ways of working like apps based on that OS, and then everything will run smoothly.","templateKey":"article-page","settings":{"date":"June 05, 2018","slug":"5-signs-you-are-ready-for-holacracy","type":"blog","category":"Ideas"},"contributor":"Piotr Majchrzak"}}},{"node":{"excerpt":"","id":"2c5d6b57-5f85-5d02-9fe0-8696c2519059","fields":{"slug":"/blog/a-step-by-step-guide-to-event-storming-–-our-experience/"},"frontmatter":{"title":"A step by step guide to Event Storming – our experience","order":null,"content":[{"body":"At these meetings **we focus on goals, problems and personas**. These are all extremely important to understand the business objective but don’t really give the developers an overview of what actually happens in the business nor how all these elements create a coherent product.\n\nIn 1974, a statistician named **George Box** stated that all models are wrong but some are useful. This sentence guided us in our attempt to learn how to use event storming. We wanted to adopt something useful, something that would help us to model a business but in an agile way. We focused on interactions and behaviors rather than on data structures and object states. The goal was to bring out what is actually important: **dependencies, relations between behaviors, bottlenecks**, etc.\n\nIn this article, I would like to share with you our experience from the first two event storming workshops that we held; events that helped us decide that this approach to modelling would be of use to us.\n\n## Event Storming Basics\n\nEvent storming is a workshop-based method invented by **Alberto Brandolini** to quickly find out what is happening in the domain of a software program. It has its roots in the DDD approach, although you don’t need to know anything about DDD to use event storming with your team.\n\n## What is Event Storming for?\n\nThe obvious answer is, to **create a business model that can be used during development**, to get the big picture of the product environment, its needs and goals, and to assess its complexity. But there is more. Event storming supports group learning and is a fun way to integrate development and product teams. It helps if teams want to create alternative solutions together (especially interesting for startups) by visualizing and selecting them. Event storming may also be useful for teams with mature products to order the process and find out about bottlenecks and areas of conflict.\n\nBut above all it **is about conversation**. It’s a new way to share understanding about business objectives and product goals; a way of starting a discussion to discover gaps and hindrances.\n\n## Why is event storming useful from a business perspective?\n\nThe simplest answer is: the better the development team knows your business domain, the more profound the initial analysis will be and the preparations to start the implementation phase will be more focused. That directly impacts the general quality of the product you are building, but also the overall cooperation between business and development teams.\n\nIt is also a great chance to learn about dependencies in the entire domain that might be less visible on a daily basis, but can significantly affect decisions made about the product, both on the technical and business ends.\n\nMoreover, during an event storming session, the group has the opportunity to extract and discuss small pieces of the domain. And the less complexity at the beginning, the less complicated the problems are as the product development progresses.\n\n## How does it work?\n\n### Organize the people\n\nThe key of a successful event storming session is to gather a bunch of people who know their stuff: developers that can ask questions about what should happen and business representatives who know the answers to those queries.\n\nAnd also a facilitator to guide them through the process of exploring events, commands and grouping them into aggregates.\n\n### Organize the space\n\n#### Essentials\n\nIt is extremely important to provide unlimited modeling space (either a wide wall for stickies or a very long piece of paper), tons of stickies in several colors, markers, some masking tape and finally, a relaxed atmosphere.\n\n#### Make sure there is enough modeling space\n\nA facilitator has to remain focused on the available area during the session, in order to ‘add’ to the modeling space before the participants notice that there is no more room to add a sticky note. If the participants stop for a moment they might lose momentum or (worse) a great idea and it will be difficult for them to get back on track.\n\n#### Would you like to sit down? Not happening!\n\nBrandolini advises that all tables and chairs should be removed for the session time. At our workshop, we decided to leave some of them so that there’s somewhere to put a coffee mug, and because we planned time for discussion of other issues.\n\nHowever, I must admit that some people used the chairs during the storming session and it did feel that they were disconnected from the rest of group.\n\n### The Workshop\n\nBefore the workshop, all attendees were asked to read Alberto Brandolini’s short post about event storming basics, so that all of us could understand the general idea behind the event storming process.\n\nWe started the workshop with a **short discussion** on how we feel about event storming, ensuring all participants had the same essential knowledge of the technique, and also whether we see a use for it in our company. The possible options taken into consideration included checking if a problem actually requires a tech solution, designing, and feedbacking internal projects and processes.\n\nWe also thought about using this method as an alternative to a story map and developing a partnership with business representatives. We wondered how to determine product risks, gather data for technical recommendations, and how to realize the domain complexity (which sometimes is not that obvious at first glance). **Quite a long list, isn’t it?**\n\nThen we briefly discussed the business that we were attempting to model. During the first session, two scrum masters from our team offered to act as **business representatives** for an in-house application for project management that our company created a couple of years ago. Next time, we decided to try the process with a simpler domain and one of the facilitators acted as business representative of a company that sells tickets for various events.\n\nIn both cases, the representatives were given time to make a short introduction. It was also useful to spend a moment to talk about the goal of the event storming sessions. Participants may be approaching it from many different angles, depending on the nature of the goal: mapping an existing product, a problem that needs to be solved, or searching for enhancements to a business process.\n\n![Event Storming 1](/img/sticky-notes-5.jpg)\n\n#### Step 1 – domain events\n\nAfter this short introduction, we started with naming the domain events. We tried to answer the question ‘what happened’ in the context of our business domain.\n\n**The facilitator added the first post-it** with a domain event to encourage everyone else. Then the group just ‘stormed’ the ideas, not focusing on the actual timeline. Some of the participants pointed out that it might be helpful to define the events marking the beginning and end of the business process, so that it would be easier for people to continue.\n\n![Event Storming 2](/img/sticky-notes-4.jpg)\n\nRemember to note the events in the past tense -> this helps participants to focus on the ‘what happened’ aspect. I believe it might be also important to highlight that participants should not focus on the actors who perform the actions while writing down the events (there will be place for that later in the process).\n\n**In my opinion**, there’s no need to add all the events at this point. I feel that this part of event storming is designed to encourage people to collaborate and let them integrate. Especially given that some of the events will be thrown out during the next stages and new ones will be added.\n\n#### Step 2 – commands\n\nWhy did this happen? This was the question that we started the next session block with and it was the right way to begin ordering the events chronologically. It is relevant at this stage to point out to the participants that command is something that people can do in the business domain, otherwise they may become stuck in places where actions are not triggered by users, but other factors instead.\n\n![Event Storming 3](/img/sticky-notes-3.jpg)\n\nAt the end of the block, **we spent a moment to reflect on events and commands**. We concluded that if we would start from the commands, not from the events, probably focusing on new features and not on the cause and effect sequence. Starting from events helped us focus more clearly on the domain’s objective.\n\nAt this point, I noticed that adding the commands and other triggers raised more discussion than during the first part of the process. People were actually asking questions and thinking about what should happen, adding new events. Thus, for the next workshop I will definitely spend a bit more time on that phase.\n\n#### Step 3 – other triggers\n\nEvents may have their roots in commands, but they might also be triggered by people, time, documents, or external or cascading events. During this session, we filled our model with these additional elements. Some stickies with commands were now replaced by notes representing an external event or time.\n\n![Event Storming 4](/img/sticky-notes-7.jpg)\n\n![Event Storming 5](/img/sticky-notes-2.jpg)\n\nDuring the feedback session, the participants raised the issue that it would probably more effective for them if they knew in advance all types of triggers that we planned to use.\n\n#### Step 4 – aggregates\n\nAs a next step, we grouped events and commands around aggregates. Each aggregate represented a specific business concept that had a local responsibility.\n\nWe marked those groups on our timeline. However, we kept in mind that marking the aggregates might break the timeline.\n\n![Event Storming 6](/img/sticky-notes-6.jpg)\n\n#### Step 5 – bounded context\n\nAfter spending some time on aggregates, we discussed ubiquitous language. All people involved in the prduct development should speak the language of the domain (workshop, requirements, code, etc.) to support a shared understanding. Based on that, we should be able to distinguish between areas in which a word has a different meaning from the business perspective.\n\n**Bounded context** is the setting in which a term appears, determining its meaning. Each context has a clear boundary and is consistent, having it own rules but still communicates with others.\n\nThe participants’ task was to draw boundaries between the multiple consistent models that would coexist in our test domain.\n\nThe last two steps – determining aggregates and bounded context were the most difficult to understand for the participants. If facilitating a similar event, you may consider leaving a bit more space for discussion here.\n\nAs a group, we were also discussing how aggregates and bounded context may be useful for business people (as the concept is already quite familiar for programmers interested in DDD). The conclusion was that it can help them visualize their businesses and spot relationships between different departments.\n\n## Takeaways – Facilitation Tips and Tricks\n\nThe method is quite simple, so if a professional facilitator is unavailable to run the event storming session, a development team can conduct it on their own. In our case, the participating devs were confident that they could conduct something like this with their clients.\n\n### Questions and narration\n\nIf you are taking part in a workshop or actual session as a facilitator, your role is to help the participants stay focused and fully explore the domain. With this in mind, ask them questions such as:\n\n* How does the process look on a regular basis?\n* How would it behave in an ideal world?\n* What could possibly go wrong?\n* Who is affected by a particular action?\n* How can we measure progress?\n\n**Reverse narrative is also good practice; for example:**\n\n* What must happen before a specific event can take place?\n* What path led us to this moment?\n\n### Sticky notes\n\nThe color of the notes matters. I used a variety of light pastel colors but in practice it was difficult to tell the different colors apart at first glance here. Vivid colors are definitely a better choice.\n\n### Business domain\n\nIf you are just learning and not modeling an actual business, consider selecting a less complex business domain to practice with. That way, during the workshop, the group can focus on the event storming process and not the complexity of the business itself (though of course the business should be the focus of a real event storming session).\n\n### Language\n\nThink about the language that you use to conduct the workshop. I was prepared to use English, which I consider to be more natural at work, so all my examples, slides and materials were in English. Imagine my surprise when the participants wanted to use Polish! Eventually, we managed but I might have overlooked a few details.\n\n### Legend\n\nThat leads us to creating the legend. It should be prepared in the same language as the workshop and put directly onto the wall. It would also be a great idea to create legend board rules and some follow-up questions (e.g. ‘command’ can be accompanied by ‘something that a person does’ and ‘why something happened’?)\n\n![Event Storming 7](/img/sticky-notes-1.jpg)\n\n### When are we done?\n\nAt the end of the workshop, someone asked how do we know when the business model is ready. Unfortunately, there is no definitive answer but there are actions that we can take in order to gain a level of certainty:\n\n* Make a short summary at the end of each block. If people worked in groups, ask them to sum up the discussed areas. After that check with the business as to whether they see any important aspects that have not been mentioned so far.\n* Ask questions regarding the areas that were discovered. At some point there will be no more paths related to event or command.\n* Make a map of the discussed areas. It could be a base for your user story map, but it also serves as an outline of covered topics.\n\n## Conclusion\n\nAfter the first workshop, we were left with two unanswered challenges:\n\n1. What can we do to encourage people to discuss things earlier? I noticed that only at the commands stage were we able to start a discussion about the actions (and there were no strangers present).\n2. How can we figure out a remote option to conduct this kind of workshop?  Obviously, we are aware of the fact that the best way is to meet and cooperate face to face, but with international clients from all over the world, we need a reasonable solution for that.\n\nHopefully, the rising popularity of virtual reality will solve at least the latter of our two problems. Do you have any ideas on how to solve the first one?"}],"job":null,"photo":null,"cover":"/img/woman-in-room-with-glass-walls.jpg","lead":"Usually, at Boldare we start each product with some kind of **kick-off workshop** that help the development team get to know the client’s business better. So far, we have used several approaches (e.g. user story mapping, product vision canvas, user journey) but sometimes they are just not enough from the developers’ perspective.","templateKey":"article-page","settings":{"date":"June 05, 2018","slug":"event-storming-guide","type":"blog","category":"How to"},"contributor":"Natalia Kolińska"}}},{"node":{"excerpt":"","id":"a4fe2a8a-4bf4-5978-855a-7ea9ca9f5c05","fields":{"slug":"/blog/best-outsourcing-practices-meetup-–-designed-for-ctos/"},"frontmatter":{"title":"Best Outsourcing Practices Meetup – designed for CTOs","order":null,"content":[{"body":"It’s 9am on a sunny winter morning. In a conference room, two monitors are waiting to display the first presentations. On the table, notebooks that will soon be filled with questions and thoughts are awaiting their new owners. Outside, you can hear the first conversations: English is mingling with Spanish and Danish. In no time at all this exchange of pleasantries will turn into a dynamic discussion. Breaks for lunch or dinner won’t stop it. It will last until late at night.\n\n## Meetup designed to exchange knowledge\n\nThat is how the 3rd edition of the **Best Outsourcing Practices Meetup**, organized by [XSolve](https://xsolve.software/what-we-did/) and [Chilid](https://chilid.com/work/projects/), started. Each of the previous events, to which XSolve invited** CTOs** from various companies and sectors, had been packed with hours of substantive discussion. It was no different on the 22nd February 2018, when guests representing 10 companies from eight different countries and industries, including digital media, e-commerce, public services and higher education, arrived at the Gliwice office. All of them came with just one purpose – to talk about outsourcing – but at the same time, everyone brought a different problem and an individual perspective.\n\n![null](/img/best-outsourcing-practices-tour.jpg)\n\nDuring the long meetup day, the guests addressed many topics that arose from their previous experience with outsourcing. There was no holding back and** the spectrum of problems was broad**: from fluctuation of employees within teams and products and their job satisfaction, to methods of estimating tasks and measuring progress and results. There were also questions about security and confidentiality, methods of communication between internal and external teams, scrum team structures, and good cooperation practices with companies whose core business is not software development.\n\n**Let me give you an example.** Our guests were surprised that at XSolve we don’t have project managers. The team structure is devs plus scrum master and a product owner from the client’s side. This approach was entirely new for the CTOs. However, the explanation is simple – this setup eliminates the communication proxy between the PO and a team in the person of the project manager. Without that role, the client’s PO talks directly with every team member or with the whole group at once. That was greatly different from the past experiences of our guests.\n\n![null](/img/best-outsourcing-practices-meetup-participant.jpg)\n\n## Tough questions and stimulating discussion\n\nOf course, that’s just one example of the many topics discussed during the meetup. We wanted to make sure that no question was left unanswered, therefore participating in the Q&A session (which we called [“CTO asks“](https://xsolve.software/blog/tag/cto-asks/)) were **XSolvers equipped with knowledge from various fields:** from the CEOs of XSolve and Chilid to business representatives, scrum masters and developers. Thanks to this, our guests could address their problems to the specific people best-placed to answer them.\n\nAlthough the questions were detailed and individual, we were able to form some general conclusions. This was possible thanks to the atmosphere of openness and enthusiasm which was almost palpable in the conference room and during the face-to-face talks. A simple Q&A session quickly turned into a multifaceted discussion, in which all participated by offering their unique knowledge and perspectives.\n\n![null](/img/best-outsourcing-practices-meetup-participants.jpg)\n\n## The greatest value lies in personal contact\n\nThe meetup agenda and formal sessions were just one side of the coin. The most significant value of the meeting lay elsewhere – in **personal contacts**. As always in such situations, the first conversations are quite timid and revolve around typical themes. A good icebreaker turned out to be our Teal Office, which we encouraged visitors to explore. After a while, when we had all got to know each other better and started to understand each other’s needs, t**he networking really kicked off**. \n\nOur guests often mentioned that it was essential for them not only to solve their problems but also to meet and talk to other CTOs who are in similar situations. The networking was encouraged by the relaxed but professional ambience and joint outings for lunch and dinner. It was during such breaks that the most interesting discussions took place as the exchange of knowledge and experiences continued. And the food was delicious too!\n\nYou can’t sit in one place for a whole day, so of course, as well as the outings, there were also various activities during which participants could get to know the company and its culture better. Our guests had the opportunity to take part in [event storming workshops](https://www.boldare.com/blog/event-storming-guide/), talk to the teams, or participate in a feedback session by the design team. All these elements were combined in a long but fruitful meetup day.\n\n![null](/img/relax-space.jpg)\n\n## See you next time\n\n**The CTOs came to Gliwice** with some concerns about the nature of the meeting. Most of them openly admitted that they had had somewhat negative experiences with outsourcing. And yet, they received an invitation from an outsourcing company. An interesting coincidence, isn’t it? Many of them were wondering if this meeting wasn’t just some crazy scam or a selling session. Nevertheless, they came, and with each subsequent hour, these concerns were dispelled. Thanks to the openness and professionalism of the participants, we managed to build an atmosphere of mutual trust and commitment in which we shared our experiences and know-how.\n\n_“Impressive, convinced”, “informative, useful meeting”, “I think it could work,” “loving the atmosphere, an international way of thinking”_, and _“not pitching but sharing knowledge”_ were just some of the words of feedback that we received from the CTOs after the meeting. We hope that our guests left Gliwice richer in knowledge and personal contacts and **maybe, just maybe**, they’ve changed their opinion about outsourcing."}],"job":null,"photo":null,"cover":"/img/outsourcing-best-practices-meetup-group.jpg","lead":"XSolve and Chilid become one - Boldare. However, Boldare is not a fresh start, but it is the natural evolution of both companies. This article is one of the examples how Chilid and XSolve have been sharing their knowledge with the community. This knowledge-sharing call is also a part of Boldare DNA.","templateKey":"article-page","settings":{"date":"June 05, 2018","slug":"cto-asks-meetup","type":"blog","category":"People"},"contributor":"Kamil Mizera"}}},{"node":{"excerpt":"","id":"28bad4be-ff41-5eb1-a1fa-922cfa1e511c","fields":{"slug":"/blog/how-to-create-a-teal-space-for-enhancing-creativity-and-productivity-of-self-managing-teams/"},"frontmatter":{"title":"How to create a teal space for enhancing creativity and productivity of self-managing teams","order":null,"content":[{"body":"Some years ago, Telenor, the Norweigan telecom company conducted an experiment. They got rid of most of their coffee machines and expanded their cafeterias. Why? To see if office design really does have such a huge impact on the innovation and productivity of employees. The result? Staff from different departments interacted, shared information and collaborated, and Telenor yielded a cool $200 million in profit. That’s some impact.\n\nAnd so, freshly inspired, we embarked on our own investigation into workplace design, something we enjoy calling: **The Best Teal Space Ever**. We decided to design our new HQ in a way that would support the way our teams work. We wanted to enhance our ethos and make sure that we sustain core principles such as the exchanging of ideas between departments and teams. After many months of research we created the perfect office space for us, along with some tips that will apply to companies, both established and just starting out.  \n\n![teal space](/img/open-space-second-floor.jpg)\n\n## Think Outside The Cubicle\n\nThirteen years of experiments, observations and debates on the use of office space have led to the undeniable fact that an open-concept layout benefits the company and employees alike. Here are some ideas on how to create this kind of environment:\n\n**1. Remove all partitions:** The two main benefits of an open-concept space? Communication and transparency. \n\n![teal space](/img/desks-in-open-space.jpg)\n\n**2. Team mobility and collaboration:** Consider installing flexible workstations at every desk so it’s easy for developers to move around, changing seats and teams. The added comfort will encourage pair programming as well.\n\n![teal space](/img/monitor-plug-in.jpg)\n\n**3. The layout: **The space should be ample enough for people to get up without bothering those around them, as well as allow people to comfortably create impromptu meetings just by turning their chairs around.\n\n![teal space](/img/bartosz-tomecki-and-anna-zarudzka.jpg)\n\n## Associates Assemble\n\nAs imperative as an open-plan work place is, there also need to be private spaces for meetings and conference calls. Some things to consider in the design of these rooms:\n\n**1. Multiple meeting rooms:** If possible, each team should have access to their own meeting room where they can safely leave their notes and scribbles without the threat of it being removed.\n\n![teal space](/img/room-in-open-space.jpg)\n\n**2. Sound proofing: **Noise pollution can be a real distraction at work. Noise-absorbing panels, carpeting and even plants can all reduce the level of obtrusive sounds.\n\n![teal space](/img/work-space.jpg)\n\n**3. Good teleconferencing equipment:** Teleconferences may never be the same as meeting with a client in person, but you can still invest in the best devices.\n\n![teal space](/img/video-call-at-conference-room.jpg)\n\n**4. Moveable tables and chairs:** Choosing the right furniture means a changeable space for any teams’ needs.\n\n**5. Cosy atmosphere:** For longer and more taxing meetings, provide comfortable chairs and soft lights. Try to recreate a homely atmosphere so people feel more at ease given the long hours.\n\n![teal space](/img/relax-space-two-hammocks.jpg)\n\n![teal space](/img/work-space-poufs.jpg)\n\n## Opening Up\n\nThe issue of transparency goes beyond jus tearing down partitions. It’s a question of bringing people together and moving away from closed-door office culture. So quite literally:\n\n**1. Glass walls:** One of the first steps towards transparency, glass walls allow people to locate each other easily. Almost every meeting room in our company has glass walls.\n\n**2. Monitors: **Keep everyone in the loop by displaying burndown charts, projects’ predictability, backlogs or important stats for anyone to see.\n\n![teal space](/img/tv-in-open-space.jpg)\n\n**3. Management sit with their team: **Try having higher management sit among their team rather than close themselves up in their offices. It’s a team effort at the end of the day.\n\n## Less Is More\n\nInteractions between team members that don’t normally work together will happen organically when the structure of the office is such that they must cross paths to get the work done. This means getting minimalistic:\n\n**1. One printer:** If there is only one printer, there’s a high possibility that people will strike up a conversation while they wait for their turn to use it. The same goes for the coffee machine.\n\n**2. No reception:** Encourage all employees to take action and greet people at the door. You’ll send a strong message about your company culture to clients and candidates alike.\n\n![teal space](/img/kids-room.jpg)\n\n**3. Spread out: **Placing shared equipment in different locations throughout the office encourages both movement and chance interactions. For example, in our office the main bathrooms are at the other end of the floor.\n\n![teal space](/img/open-space-recruitment-room.jpg)\n\n## A Change Of Pace\n\nThe days of timed lunch breaks are thankfully coming to an end. Now with the knowledge that regualr breaks actually increases productivity, it’s time to start thinking about how to take your breathers:\n\n**1. Silent section:** When you need to collect your thoughts, work on something away from the bustle, or even steal a quick power nap.\n\n![teal space](/img/silent-room.jpg)\n\n**2. Clamour chamber:** A designated place for noise and commotion. It might include a PlayStation, ping pong table or even a drumset. Whatever your team needs to let loose for a while.\n\n![teal space](/img/cinema-room.jpg)\n\n**3. The great outdoors: **Somewhere with some fresh air and a bit of greenery (a terrace or a garden for example) where people can regain a sense of peace and focus.   \n\n![teal space](/img/fun-and-relax-space.jpg)\n\n![teal space](/img/fun-and-relax-space-outdoor.jpg)\n\n**4. Café:** Allow employees to experience cafe culture in its truest sense, with a coffee, a magazine and their minds free from stress.\n\n![teal space](/img/cafe-sofa.jpg)\n\n![teal space](/img/morning-in-cafe.jpg)\n\nA final tip from us would be to consider the style of interior design you want. Take care before jumping into the fashionable primary-colour scheme, flamboyant furniture and unnecessary accessories. While it may look fresh and exciting, and perhaps benefit the look of your brand, the same may not be said a few years down the line when the furniture begins to look worn and people have grown bored of the fruitella dispenser. Keep it simple and easy on the eye. The staff will add their own colour in time.\n\nWe hope some of our ideas will be useful towards improving the agility of the staff and workspace within your company. Please get in touch with any questions, comments or anecdotes about your experience with office design.\n\nYou can download a list of our Teal Space furniture and equipment [here](https://blog.chilid.com/app/uploads/2017/09/Agile-Office-furniture-and-equipment-chilid.pdf).\n\nStay with us for a while longer and enjoy some photos: \n\n![null](/img/conference-room.jpg)\n\n![null](/img/standing-work-space.jpg)\n\n![null](/img/chaos-room.jpg)\n\n![null](/img/boldare-offcie-open-space-and-stairs.jpg)\n\n![null](/img/relax-space-hammock-and-bike.jpg)\n\nAll images by [Janina Tyńska](http://janinatynska.com/)"}],"job":null,"photo":null,"cover":"/img/relax-space-big-hammock.jpg","lead":"We decided to design our new HQ in a way that would support our teams work. We decided to create The Best Teal Space Ever. This is how we did it.","templateKey":"article-page","settings":{"date":"June 05, 2018","slug":"teal-space-for-creativity-and-productivity","type":"blog","category":"Ideas"},"contributor":"Patrycja Kasperkiewicz"}}},{"node":{"excerpt":"","id":"364acb1e-105f-5dc3-b49b-265e7ef8c5a9","fields":{"slug":"/blog/how-to-start-a-neural-network-with-javascript-in-5-minutes/"},"frontmatter":{"title":"How to start a neural network with JavaScript in 5 minutes","order":null,"content":[{"body":"The question is: can a JavaScript developer, aware of the pace of progress and the complexity of this technology, start creating simple or even advanced **neural networks**? Especially if he or she has never had anything to do with them before, specializing instead in web applications?\n\nThe answer is **YES**. In this article I’m going to show you how to create a **simple network using JavaScript in just 5 minutes**.\n\n## A brief theoretical introduction\n\nA little bit of theory will be of use before you begin your adventure with neural networks – this will help you not only to create a working network but also to be familiar with the way it functions.\n\nThe neuron is both the most important and the smallest element in the network structure. It’s a simple input/output function, processing multiple input signals into a single output signal. The way the signal is converted is determined by the activation function (e.g. step, sigmoid, or linear), the signal weight, and the bias.\n\nThe [bias](https://www.quora.com/What-is-bias-in-artificial-neural-network) is a signal whose weight always equals one, which allows the adjustment of the activation function (moving to the left or right).\n\nGraphically, an individual neuron can be presented this way:\n\n![Neural Network 1](/img/neural-network-schema.jpg)\n\nsource: http://www.ece.utep.edu\n\nTo better illustrate the way a neuron functions, I’ll try to determine its output on the example of some example data. Our example neuron has three input signals – one of them is the bias (value: 0.5), the weights of the others are 0.4 and 0.5 respectively. I’m going to use the unit step (for values higher than 0, the value of the signal is 1) as an activation function.\n\nIf both of the inputs (leaving out the bias) have a signal whose value is 1, the output of the neuron can be calculated in the following manner:\n\n_y = f(0.5\\*1 + 0.4\\*1 – 0.5) = f (0.4) = 1_\n\nNow that I have the basic network unit I can take the next step – that is, create a layer from it and adjust the network to a particular problem. A layer is a sequence of connected neurons which can transmit signals from one to another There are three kinds of network layers: input, output, and hidden. The input and output layers only have one level each, while the hidden layer can have multiple levels.\n\nGraphically, our example network can be presented this way:\n\n![Neural Network 2](/img/neural-network-chart.png)\n\nsource: https://commons.wikimedia.org\n\nThese are the basic elements of a simple neural network. In this article, I want to go even further and show you a more interesting and practical example. To do that, the notion of the [Hopfield network](http://mlexplore.org/2017/03/12/hopfield-networks-in-go/) must be introduced. It can be illustrated this way:\n\n![Hopfield Network](/img/the-hopfield-network.jpg)\n\nsource: http://galaxy.agh.edu.pl\n\nThese are the characteristic features of the Hopfield network:\n\n* Feedback (any time you calculate the value of the neuron, you must take the value calculated in the previous cycle into account),\n* The neuron value calculated in one iteration is transmitted to all other neurons,\n* If the initial neuron weights are zeroed out, the network acts as associative memory,\n* There is only one layer of neurons.\n\nIn practice, the network will learn the patterns based on the provided data, adjusting the neuron weights by means of adequate rules. If you’d like to know more on this subject, have a look at this article.\n\nExamples of how a Hopfield network can be used include pattern recognition, classification, and process optimization.\n\n## Implementing a simple neural network\n\nNow that you know the basics, it’s time to get down to work. I’d like to show how easy it is to get from theory to practice. The test project consists in **creating a simple dictionary** containing three words and training the network so that it could recognize the words even if they contain small deformations. To do it, create a .js script and run it with Node. Node is a tool to start JavaScript on the server.\n\nTo begin, let’s create a catalogue for the project – in my case it’s called “Hopfield network”. Open the project in the terminal and initiate it through the command:\n\n_– npm init_\n\nThe command initiates the project by creating the **package.json file** and saving the project details there. To start the project and download packages, you can also use yarn.\n\nNext, download the latest version of **SynapticJS**. This is a library that lets you design, train, and use neural networks; use the command:\n\n_\\-npm install synaptic –save_\n\nNow everything is ready, you can start working with the network. Create the index.js to store the logic of the project.\n\nAfter creating the project, add the library and create some constants:\n\n```\n// Add synaptic library\nconst synaptic = require('synaptic');\n\n// Create dictionary as our source of knowledge\nconst dictionary = [\n'cat',\n'bob',\n'ice',\n//...\n];\n\n// Define binary size for one letter\nconst binarySize = 7;\n\n// Define number of neurons in our network. It's word length multiplied by binarySize\nconst neuronsCount = 21;\n```\n\n**In the code above:\n**\n\n* The dependency of the synapticJS library has been created,\n* A simple dictionary of words used to train the network has been created; in this example, it contains only three words – in practice, the set training neural networks would be much larger,\n* The binary size for one letter has been defined – this refers to the number of binary characters included in one letter after transformation into a binary string, resulting from the size of the binary string according to the ASCII character table (max. 128 characters in the basic version),\n* The number of neurons in the network has been established – it can be defined as the product of the number of binary characters in one letter and the number of letters; for the purposes of this example, let’s assume that the learning set can only contain three-letter words.\n* Then, two auxiliary functions are created to help translate the words into a binary string, which is the form understood by the neural network, and to transform the binary string into a single word.\n\nThen, two auxiliary functions are created to help translate the words into a binary string, which is the form understood by the neural network, and to transform the binary string into a single word.\n\n```\n// Transform word to binary string\nconst wordToBinary = function (word) {\nlet binaryWord = '';\n\nfor (let i = 0; i < word.length; i++) {\nbinaryWord += word.charCodeAt(i).toString(2);\n}\n\nreturn binaryWord;\n};\n\n// Transform binary string to word\nconst binaryToWord = function (binaryWord) {\nconst wordLength = binaryWord.length / binarySize;\nlet word = '';\n\nfor (let i = 0; i < wordLength; i++) {\nword += String.fromCharCode(parseInt(binaryWord.slice(i * binarySize, i * binarySize + binarySize).join(''), 2));\n}\n\nreturn word;\n};\n```\n\nNow you can move on to implementing the **neural network**:\n\n```\n// Create Hopfield Neural Network\nconst hopfieldNetwork = new synaptic.Architect.Hopfield(neuronsCount);\n\n// Create dictionary of binary words\nconst binaryDicitonary = dictionary.map(word => wordToBinary(word));\n\n// Learn our network new patterns\nhopfieldNetwork.learn(binaryDicitonary);\n\n// Let's check if it works\nconsole.log(binaryToWord(hopfieldNetwork.feed(wordToBinary('cob'))));\n```\n\nAt the beginning, create the network using the architect provided by the SynapticJS library – you could design the structure of the network yourself, but that can take a lot of time. Next, transform the dictionary into a binary string and train the network. In the last line, the result of the neural network prediction for the word ‘cob’ is checked.\n\nNow the app is ready to open. This can be done by this call:\n\n_node index.js\n_\n\nYou can see that the terminal shows the word ‘**bob**’. Why is that? The neural network knows three patterns defined in the dictionary. When the word ‘cob’ was entered in the network, it iterated until it encountered one of the patterns it remembered (it happens sometimes that the network recognizes a [spurious](https://www.quora.com/What-are-spurious-states-in-Hopfield-networks) state). The designated pattern was then transformed from the binary form – readable for the network – into a form understandable for you: a word.\n\nIf you want to become more familiar with the algorithms of learning, teaching, and finding patterns, **take a look** [here](https://www.eriksmistad.no/hopfield-network/).\n\n## Summary\n\nJust like I promised at the beginning, **you need no more than 5 minutes** to create a functioning neural network that can guess words with small typos. It must be mentioned, however, that the Hopfield network has some disadvantages and is not able to guarantee the recognition of a proper pattern each time. This is caused by the fact that sometimes an erroneous local minimum is found which reflects a false pattern.\n\nSo it turns out that the basic issues related to neural networks are not as overwhelming as you might expect. The Hopfield network is just one of many that can be used nowadays. In practice of course, more complicated structures are employed, sometimes combining more than one algorithm.\n\nLast but not least, I’d like to encourage you to take a closer look at the [SynapticJS](https://github.com/cazala/synaptic) library as well as at other libraries that enable you to create and use neural networks by means of JavaScript:\n\n* [deeplearnJS](https://deeplearnjs.org/)\n* [ConvNetJS](https://cs.stanford.edu/people/karpathy/convnetjs/)\n* [brainJS](https://github.com/harthur/brain)"}],"job":null,"photo":null,"cover":"/img/barbara-strak.jpg","lead":"Software development is advancing incredibly fast these days and neural networks are becoming increasingly important. You may not even be aware of the role they already play in everyday life; in [houses](https://www.huffingtonpost.co.uk/kris-bondi/the-house-that-learns-how_b_17987040.html), [cars](https://futurism.com/teslas-neural-network-is-receiving-a-massive-amount-of-data-from-cars/), and workplaces.","templateKey":"article-page","settings":{"date":"June 05, 2018","slug":"neural-network-with-javascript","type":"blog","category":"Tech"},"contributor":"Kamil Mikosz"}}},{"node":{"excerpt":"","id":"31250d56-d30d-516c-a1e6-eddf4a60ad16","fields":{"slug":"/blog/how-we-do-digital-products-at-boldare-and-what-it-means-for-your-business/"},"frontmatter":{"title":"This is how Boldare Development Teams process addresses your business needs","order":null,"content":[{"body":"Our software development process is based on the Agile Manifesto and Scrum framework. But those are just tools which we use to ensure that our partners' business needs will be fulfilled. Based on our experience, we believe that an **agile approach** is the most efficient way to deliver real business value to our partners. And our whole development process is designed to make it happen. So, how exactly do we do software at Boldare?\n\n## Our process\n\n### Product development kick-off\n\nBefore we start development, we go through a stage of collaboration and product kick-off. This is a series of events involving the client/partner and the whole team, led and facilitated by our Scrum Master. These include:\n\n* Meet the team\n* Discover the product\n* Plan a release\n\nDuring this phase, we all meet, discuss, and exchange information, but we are also looking for ideas, solutions, and, as a result, we create a Product Backlog and plan for the first release. To accomplish this, we use various techniques, which include:\n\n* [Event storming](https://www.boldare.com/blog/event-storming-guide/), \n* Impact mapping, \n* User story mapping, \n* Planning poker\n* Design thinking\n\nWe follow our checklists to make sure we cover all relevant topics.\n\n### Delivering product increment in 2 weeks\n\nWe follow the Scrum Guide (as defined by scrum.org) to organize our development. We work in 2-week sprints, delivering product increments and collaborating creatively with each other.\n\nEvery sprint includes:\n\n* Sprint Planning (Development Team, Product Owner, Scrum Master)\n* Daily Meeting (Development Team, Scrum Master)\n* Sprint Review (Development Team, Product Owner, Scrum Master)\n* Sprint Retrospective (Development Team, Product Owner, Scrum Master)\n* Project management\n\nProject management in Boldare relies on a Scrum Team, including the Product Owner, Scrum Master, and [Development Team](https://www.boldare.com/development-teams/). These three roles, along with well-defined processes and responsibilities, cover our project management. \n\n### Budget, scope and change management\n\nWe deliver software using Scrum principles, which means changes are natural and can be introduced to the Product Backlog at any time, and then reflected in the Sprint Backlogs.\n\n**What do development scope and budget management look like in our process? **\n\n* The Development Team and Scrum Master are accountable for recommendations or decisions on how to approach the product development process, collaboration and feature/story solutions to find the best fit between development efficiency, product quality, and the client’s (Product Owner's) budget expectations/limits.\n* The Development Team is responsible for continuous estimation of Product Backlog items and tracking the work to ensure the most accurate information about the actual speed of delivery.\n* The Product Owner is responsible for (non-technical) backlog decisions: scope (epics and stories), priorities (Product Backlog ordering), and formulating the most important scope to deliver in the current sprint and release.\n* The Scrum Master and the Development Team are responsible for maintaining predicted delivery dates for releases (for example: when an MVP can be released), as defined by the Product Owner and estimated by the Development Team.\n* By continually knowing the predicted delivery dates, scope, and Development Team size & structure, we can estimate budget for the release.\n\nThe above process is repeatedly iterated, with all parties involved, and is actually the budget and scope management of our software development process, giving the Product Owner (and other product stakeholders) more precise control and predictability than in any waterfall process, or in a top-down controlled environment.\n\n### Risk management\n\nFirst identification of product development risk is performed before the product development starts, at the product discovery workshops. We organize a meeting with product stakeholders to identify and plan a response to risks. \n\nDuring product development, risk management sessions are performed every iteration and are included in Scrum meetings. By generating frequent feedback from the team (including the QA roles), the Product Owner can react quickly and reduce problems before they really appear.\n\nEvery time a risk is identified we communicate it to product Stakeholders, including possible consequences, proposed solutions or actions to address the risk item.\n\n### Reporting\n\nAfter each sprint, the Product Owner and other product development stakeholders receive a summary of the sprint, which includes a summary of delivered Product Backlog items, a sprint burndown chart, key decisions, identified risks and actions needed.\n\n## Our standards\n\n### Our coding standards\n\nOur teams always follow coding standards to provide consistent, easy to understand and maintain codebase. Depending on the technology, we chose the best standards. Continually running forward, we’re implementing the best new solutions for our products - using reliable frameworks, tools, and trends in technology.\n\n### Definition of Done\n\nEvery functionality or change in the code we deliver meets the criteria listed in our definition of done, which assures quality and consistency in our delivery. \n\nWhen starting a collaboration, we always agree what ‘done’ means. Our standard definition of done states, that a user story or bug from the Product Backlog is done when it is…\n\n![definition of done](/img/definition-of-done.jpg)\n\n### Peer code review\n\nWe have a code review process, which ensures every piece of code is reviewed and approved by at least one another experienced software developer. This approach, combined with continuous integration, automated tests, and other practices ensures the highest quality of the code and helps us to keep good programming practices in our software. This procedure is one of the most critical processes we practice, and we focus a lot of our attention on it.\n\n### Code metrics\n\nWe regularly check our code with automated tools to measure it against the crucial indicators of well-designed code: cyclomatic complexity, repeated code, test coverage, etc. We use tools like Sonar, Jenkins, Travis CI and our proprietary extensions. With these outcomes, we aim to improve our results by comparing data from reports and alleviating bottlenecks. Working with these tools allows us to achieve outstanding code coverage results.\n\n### Continuous integration\n\nWe use the Continuous Integration (CI) rule in our development practice. We merge the code frequently, which helps to avoid integration problems. We use leading platforms like Travis CI or Jenkins CI with a set of automatically generated quality reports of our code. This ensures us that only code which passes all the tests and quality meters will be delivered.\n\nWe use CI tools to schedule time-based and event-based automated test runs to regularly check for regression and provide immediate feedback to the team about actual code and quality status. These tools and our regular, scheduled, time-based regression tests help us to significantly improve our code quality and this is the first level of verification of code correctness."},{"body":"## Quality assurance\n\nDepending on the particular business needs of the client, we prepare an individual plan to assure the delivered software is of the best possible quality. \n\nTo provide the best quality of the software we follow a  comprehensive process as below. \n\n### The scope of testing\n\nDepending on the product, we execute:\n\n* Unit tests - individual units of source code are tested to determine whether they are fit for use.\n* Functional tests - individual software modules are combined and tested as a group.\n* Smoke tests - initial testing to reveal basic application functionalities failures.\n* User interface tests - testing graphical user interface to design guidelines and mock-ups.\n* User experience tests - measuring the degree of application usability.\n* Regression tests - testing that verifies previous functionalities still work properly.\n* Security audits - verifying application regarding the maintenance of data security.\n* Performance tests - testing system performance, responsiveness, and stability under workload.\n* Manual acceptance testing - checking if the requirements of the specification are met.\n\n### Dedicated Quality Assurance Engineer\n\nMost of our teams contain Quality Assurance Engineer (QAE), who supports the team in test automation, delivering, maintaining and executing end-to-end regression tests, performing test scenarios, including acceptance and functional scenarios and executing tests strategies for future sprints. In many cases, it is crucial for the team to have such support to maintain best quality and stability of the product over time.\n\nOur QA Engineers have proven experience and certified knowledge and take an active part in our quality assurance process. They provide immediate feedback regarding quality, giving the team enough time to react if any quality issues arise. Our QA Engineers not only produce automated tests but also work closely with all product stakeholders to assure all needs have been discovered and verified in code. It means analyzing business requirements and implementing the best solutions in line with them which is the fundament of creating high-quality applications.\n\n### Automated tests\n\nIn our work, we obey the following techniques and tools:\n\n* Behavior Driven Development (BDD) approach to clearly translate business language into working code. We write acceptance scenarios using Gherkin notation, so it’s clearly understandable both for engineers and business - this way of preparing scenarios increases our transparency.\n* Test Driven Development (TDD) approach in coding, for faster and easier detection of bugs in the initial phase of software development.\n* Automation tools and frameworks to write functional tests, such as Selenium WebDriver, Protractor, Jasmine, Selenide, Appium, Sikuli and others, depending on product specification and target devices.\n* To deliver the best matched and effective tests, we’re preparing test suites covering user stories from product backlog and other scenarios.\n\n## The excellence and quality\n\nThe process described above is the result of several years of experience, as well as our approach to the dev teams which is based on long-term relations and trust between all the people involved. It helps us create valuable software products for our clients, no matter if it is a long-term collaboration or MVP. \n\nNevertheless, at Boldare we put people and the relations between them before the process. That is why we always create software in collaboration with our partners. Software, which reflects client's business needs and domain. Which helps our partners achieve their goals.  \n\nAnd this is exactly what Agile means for us."}],"job":null,"photo":null,"cover":"/img/open-space.jpg","lead":"Boldare's approach to digital [product design and development](https://www.boldare.com/product-design-and-development/) is always focused on the client’s business needs. Over the last 14 years, we have established and perfected a process designed to fully meet our partners' requirements. It's deeply immersed in the **agile software development philosophy** and concentrates on delivering a **working increment at a fast pace**.","templateKey":"article-page","settings":{"date":"June 05, 2018","slug":"agile-process-for-digital-product-development","type":"blog","category":"How to"},"contributor":"Kamil Mizera"}}},{"node":{"excerpt":"","id":"66c4db9b-3dd4-5ab6-b8ef-9c515cf2c141","fields":{"slug":"/blog/lean-process-for-a-better-product/"},"frontmatter":{"title":"Lean process for a better product","order":null,"content":[{"body":"Proposed by **Eric Ries** in 2008 and published in a book \"The Lean Startup\", this new approach to developing businesses has become one of the most influential methodologies in the last decade. It helps both startups and companies change the way how they think about a product and business development. The lean approach offers a new framework for testing product hypothesis with minimal cost and effort. Lean is based on five principles:\n\n* Entrepreneurs are everywhere\n* Entrepreneurship is management\n* Validated learning\n* Innovation accounting\n* Build-Measure-Learn\n\nFor this article, I will focus on the last one. You can find more information about the lean startup in Eric Ries' [book](http://theleanstartup.com/) and on his [blog](http://www.startuplessonslearned.com/). \n\n## Build-Measure-Learn. Repeat and change\n\nThe lean approach encourages a fundamental shift in thinking about the product. The question is not '_Can you build a product?_' but instead '_Should you build it?_' The business graveyard is full of companies which perished because no one wanted their products. An idea, no matter how brilliant, is never enough. The idea has to be evaluated as soon as possible.\n\n**The primary question is:** What value does my product offer a customer?. Here’s a clue, you’ll never know the real answer if you don’t ask the customer. To do so, you can build an **MVP** (minimum viable product) to test client's real needs. However, the MVP is not a miracle cure for everything, it shouldn't exist in a vacuum. In the lean approach, an MVP is just a stage of the whole process, nicely shortened to three words: **Build-Measure-Learn**.\n\nThe lean startup methodology offers a framework for testing your business or product hypothesis as a continuous, cyclical process:\n\n_Ideas - BUILD - product - MEASURE - data - LEARN - ideas -..._\n\nIn this process, the **BUILD** stage stands for formulating a hypothesis (one or more) and criteria for evaluating it which will be tested using the MVP. The product is your MVP, available to customers, who will interact with it and give you feedback. In the **MEASURE** stage, you gather data in the form of previously designed metrics. The collected data will help you to **LEARN** customer needs more deeply, evaluate your primary hypotheses and, if necessary, change them or formulate new ones and start the process again. In some cases, based on the data, you may even consider a pivot. \n\nOne sentence can **summarize this whole process**: Try to learn about your client’s needs as much as possible. Learning is the core of the lean approach. Your business must be based on constant learning and adjusting. \n\nThe process described above is, by necessity, simplified. At every stage, you will need to consider many factors and use the right tools. For example, in the context of metrics, the lean startup approach distinguishes between two types: **vanity metrics** and **actionable metrics**. The first are deceptive - they may show good results but in fact, don't measure anything that could truly verify the hypotheses. \n\nOne of the most popular examples of a vanity metric is the number of new users gained in a specific time. Every company, especially internet-based, is happy when more and more users visit their website. However, this metric can be deceptive because it doesn't indicate the cost of acquiring each user. If the cost is higher than the revenue from each user, the company can quickly go bankrupt. Actionable metrics, on the other hand, give you genuinely useful information.\n\nAs you can see, lean startup is a framework and a guide but not a guaranteed recipe for a successful business."},{"body":"## The lean approach in use - Polco case\n\nLet’s go beyond theory and look at lean startup in real life. A few years ago, Boldare was a partner with a U.S.-based company, **Polco** to build  a platform that allows people to vote, give their opinions, and comment on policies while allowing policymakers to gather real-time feedback from citizens. \n\nPolco had a lean startup approach to development which perfectly resonated with how Boldare thinks about digital product development. After formulating the product's hypothesis, Boldare prepared an MVP of the platform and was collecting data about users. At the same time, Polco took the product to Harvard University students. They tested the app and gathered crucial usability data and interface feedback for over two months. \n\nBased on feedback and data collected in this way, Boldare implemented changes to the product. But that wasn't the end of the process. In the next iteration, the MVP was released into the real world - the first test bed was Austin, Texas. This further stage of testing helped Boldare to collect more data about users needs, learn from them and introduce more changes. \n\nThanks to the lean approach to product development, Polco could test their hypothesis swiftly and with limited risk. In the end, it resulted in a full product in the form of the voting platform Polco.us.\n\n**Interested in Polco? **Check out our [case study](https://www.boldare.com/blog/case-study-polco/).\n\n## Lean approach for your product\n\nThe lean approach is just a framework but it is proven to work. It helps you to understand better your business needs, as well as your potential customer. It speeds up product development without losing focus on the ultimate goal. It is based on constant learning from data which helps you to rapidly fine-tune the product in light of user needs and market requirements. The philosophy behind the lean approach (data gathering, verifying, learning, changing and adjusting) not only works for startups or new products. It can also be used when running a business too minimize risks and meet market needs. And finally, it is also an approach which helps you build better products. \n\nAt Boldare, we use the lean approach in our process of digital product development to help our clients with their business needs."}],"job":null,"photo":null,"cover":"/img/team-meeting-in-mir-room.jpg","lead":"Lean startup is a methodology for developing both products and businesses. However, despite the name, this approach isn't limited only to startups. In fact, the lean framework can be used (and it is) by any company to develop a new product for the market.","templateKey":"article-page","settings":{"date":"June 05, 2018","slug":"lean-process-for-better-product","type":"blog","category":"Digital Product"},"contributor":"Kamil Mizera"}}},{"node":{"excerpt":"","id":"3ddb8338-24b7-5e73-8490-339437d999a7","fields":{"slug":"/blog/building-digital-products-based-on-machine-learning-the-cost-perspective/"},"frontmatter":{"title":"Building digital products based on machine learning - the cost perspective","order":null,"content":[{"body":"Any company wanting to cash on the machine learning wave will have to act fast. But to do so, specific know-how is needed in the shape of **IT professionals** capable of developing and implementing solutions based on machine learning. And this is where the problems start because those specialists are not cheap. \n\n## The need for AI and machine learning specialists\n\nIn my last piece about the [current state of the machine learning market](https://xsolve.software/blog/current-state-machine-learning-market-3-charts/), I broached the topic of the skyrocketing **demand for machine learning specialists**, and ML engineers in particular. This hunger for specialists has resulted in an increase in ML and AI professionals’ salaries. This trend manifests itself in two ways:\n\n* Lack of specialists – there are not enough people with the necessary skills because they are quickly harvested from the market by the bigger players with huge budgets offering fat paychecks.\n* High employment costs – this results from the first point; those specialists still on the market have high earnings expectations, knowing that there is an enormous demand for their skills.\n\nBecause of that, companies which plan projects involving artificial intelligence, machine learning, and other linked technologies are facing the problem of **high recruitment and salary costs**. How high are they actually?\n\n## Salary of a machine learning engineer\n\nThere are numerous job positions related to AI and machine learning, but for this article, I focus on machine learning engineers because the market demand for this role has increased significantly in the past few years. **How high are the earnings of ML engineers?**\n\nFinding a simple answer to this question is difficult. There are various sources and data available and I’ve used three separate sources: Glassdoor, PayScale and Indeed. Summing up my findings in just three words: **through the roof!**\n\nAccording to [Glassdoor](https://www.glassdoor.com/Salaries/machine-learning-engineer-salary-SRCH_KO0,25.htm), an ML engineer can expect a salary ranging from **$87,000 to $158,000** (on average **$121,000**), depending on experience and skills. On [PayScale ](https://www.payscale.com/research/US/Job=Machine_Learning_Engineer/Salary)the range is: **$78,000 – $112,000 – $161,000**; [Indeed](https://www.indeed.com/salaries/Machine-Learning-Engineer-Salaries), in turn, provides a range of $51,000 – $135,000 – $259,000. This data only applies to the U.S. market.\n\nBy averaging from just these three sources, we can estimate that the average salary of a machine learning engineer is around** $123,000 per year** which is consistent with findings from TechRepublic, and IBM reports.\n\n![Salary in U.S. dollars per year](/img/13_machine-learning-engineer-salary-in-u.s.-dollars.png)\n\nHowever, the above chart doesn’t give the whole picture – it’s just **the tip of the cost iceberg**. For example, an AI specialist with experience and a Ph.D. can expect a salary as high as $ 300,000 – $500,000 per year and the average salaries of Google’s DeepMind staff in Great Britain is $345,000, according to a [NYTimes feature article](https://www.nytimes.com/2017/10/22/technology/artificial-intelligence-experts-salaries.html).\n\nFor businesses with **“slightly” smaller budgets** than Google, these costs can be overwhelming.\n\n## ML engineers – the market demand\n\nThere is no conclusive data which can provide an answer to the question how big is the market demand for machine learning jobs, particularly for ML engineers. According to an IBM report [cited by Forbes](https://www.forbes.com/forbes/welcome/?toURL=https://www.forbes.com/sites/louiscolumbus/2017/05/13/ibm-predicts-demand-for-data-scientists-will-soar-28-by-2020/&refURL=https://xsolve.software/blog/outsourcing-machine-learning-projects-shouldnt-cost-perspective/&referrer=https://xsolve.software/blog/outsourcing-machine-learning-projects-shouldnt-cost-perspective/#3496a1b57e3b), by 2020, in the U.S. alone, there will be 700,000 openings for data scientist-type jobs, including ML engineers. At the same time, Tencent [estimates](https://www.theverge.com/2017/12/5/16737224/global-ai-talent-shortfall-tencent-report) that there are only 300,000 AI engineers worldwide when millions are required.\n\nI decided to **search LinkedIn**, using specific keywords to shed some light on this matter (with the reservation that data obtained this way may not be representative nor necessarily reflect reality). According to LinkedIn, there are **45,307 job offers** related to machine learning worldwide, of which **3,439** directly refer to machine learning engineers (**2,239** are in the U.S.):\n\n![Machine Learning jobs](/img/14_machine-learning-related-job-offers-linkedin-.png)\n\nEven if this data is not precise, one thing is for sure; the demand is increasing. According to the LinkedIn report, there are almost **ten times more jobs for machine learning engineers** than there were five years ago, and this figure will only rise in the future.\n\n## Can outsourcing be a solution?\n\nSkyrocketing earnings and huge market demand for ML engineers might be challenging for companies considering machine learning projects. For some companies, outsourcing ML projects to an external provider with trained and experienced ML engineers might be a solution. Of course, this approach has pros and cons, but that’s a topic for an entirely different article.\n\nNevertheless, in the face of extremely high costs related to the employment of machine learning engineers (and other AI-related specialists), the price and time factors are gaining a whole new dimension, and soon most companies wanting to take a **cruise on the ship called artificial intelligence** will face the dilemma: **outsource or not**?"}],"job":null,"photo":null,"cover":"/img/team-meeting-discussion.jpg","lead":"We are standing at the beginning of a new business era shaped by artificial intelligence and [machine learning](https://www.boldare.com/machine-learning/). In 2016 alone, revenue from the [artificial intelligence market worldwide](https://www.statista.com/statistics/607716/worldwide-artificial-intelligence-market-revenues/) reached more than **$1.3 billion** and by the end of 2025, that figure will likely reach a **$59 billion**. To maintain their competitiveness, businesses are embracing this new technology. But being at the vanguard of AI revolution can be costly, big time.","templateKey":"article-page","settings":{"date":"June 05, 2018","slug":"machine-learning-digital-product-costs","type":"blog","category":"Strategy"},"contributor":"Kamil Mizera"}}},{"node":{"excerpt":"","id":"a179fdd9-84ab-5f5d-9673-c344c54057e0","fields":{"slug":"/blog/how-to-use-javascript-classes-three-different-ways/"},"frontmatter":{"title":"How to use JavaScript Classes? Three Different Ways","order":null,"content":[{"body":"As you probably know, the definition of JavaScript class isn’t as obvious as in other popular languages like **Java, C#** or **PHP**. In this language, a class is unusual because this mechanism is working on prototypes.\n\nLet’s focus on three types of classes to understand how you can use them in JavaScript. They are: \n\n* prototype-based classes,\n* singleton objects and object literals,\n* ES6 classes.\n\n_Note: This article assumes that you have already basic knowledge about JavaScript  and will follow some examples without detailed explanations._ \n\n## Prototype-based classes\n\nWhat is interesting in this case is that the class syntax is versatile. Let start with a simple **prototype-based** example. The example below presents a method defined internally. This solution can prevent pollution of the global namespace because all methods are defined within the constructor function.\n\n```\nfunction Person(name) {\n    this.name = name;\n    this.welcome = function() {\n        console.log(“Welcome “ + this.name);\n    };\n}\n```\n\nThe second example shows the method added to the prototype. In this case, the “welcome” method is not recreated every time when the new object is initializing. It’s not a popular solution but in some cases can be what we want to achieve. \n\n```\nfunction Person(name) {\n  this.name = name;\n}\n\nPerson.prototype.welcome = function () {\n  console.log(\"Welcome \" + this.name);\n}\n```\n\nIt’s time to present how to demonstrate an object using the Person constructor function, setting some properties and call methods.\n\n```\nconst person = new Person(\"Bob\");\nperson.welcome();    // Welcome Bob\n```\n\n<RelatedArticle title={`Introducing Data Visualization in D3 JavaScript library`} />\n\n## Singleton objects and object literals\n\nLet’s focus now on a method which allows you to use a function to define a **singleton object in the JavaScript language**. This seems really similar to the previous example but is more compact. In the below example, you can see that defining a function and invoking creation of the object is running at the same time.\n\n```\nconst person = new function () {\n  this.name = \"Bob\";\n  this.welcome = function () {\n    console.log(\"Welcome \" + this.name);\n  }\n};\n\nperson.welcome();    // Welcome Bob\n```\n\nIt’s little confusing because it has been used as an anonymous constructor function and we can’t add **dynamic arguments**. As a result, we have only one single instance of this class. \n\nThe other alternative includes the object literals syntax which allows immediate definition of singleton objects. \n\n```\nconst person = {\n  name: \"Bob\",\n  welcome: function () {\n    console.log(\"Welcome \" + this.name);\n  }\n};\n\nperson.welcome();    // Welcome Bob\n```\n\nIn this case, the instance already exists and is ready to use. It’s easy, right?\n\n## ES6 Classes\n\nLet us take a look at what has been introduced in ES6. One of the new things is “syntactic sugar” for classes which is like the overlay on this mechanism. \n\nThereby, “syntactic sugar” means that the new features of the language are not really new because the mechanism is the same with improvements in syntax only.\n\nTherefore, the class constructs allow defining prototype-based classes with clean syntax for programmers. Let's work through an example to understand what they look like.\n\n```\nclass Person {\n  constructor(name) {\n    this.name = name;\n  }\n\n  welcome() {\n    console.log(\"Welcome \" + this.name);\n  }\n}\n\nconst person = new Person(\"Bob\");\nperson.welcome();    // Welcome Bob\n```\n\nIt is essential in all these types of class definition to remember that:\n\n* the class constructor can’t be called without a “new” operator,\n* there cannot exist more than one constructor in the class\n* during object creation, the first step is running the “constructor” method with a particular initial set of properties and values,\n* if “constructor” does not exist in the class then what is generated is an empty function. Then you can execute other implemented methods on created objects,\n* the code inside the class is automatically in strict mode.\n\nThe new class syntax also supports **inheritance and static methods** in a simple way. The inherited object contains all the properties and functions of its parent object. In addition, it allows the specification of its own set of unique properties and functions or the overwriting of existing properties and functions. \n\nIn consequence, inheritance helps us write cleaner code and re-purpose the parent object to save memory on repeating the object property and method definitions. \n\n```\nclass Mechanic extends Person {\n  constructor(name) {\n    super(name);\n  }\n\n  fix() {\n    console.log(this.name + \" fixed your car\");\n  }\n\n  static clean() {\n    console.log(\"Static method\");\n  }\n}\n\nMechanic.clean();      // Static method\nconst mechanic = new Mechanic(\"John\");\nmechanic.welcome();    // Welcome John \nmechanic.fix();        // John fixed your car \n```\n\nLet's explain what’s new about the above code. We used the word static in the “clean” method which defines static methods. This type of method is mainly used to implement methods that belong to the class but are invoked without class initialization. That means that it can’t be invoked by the instance of the class. Furthermore, static methods can also be inherited and can be invoked from subclasses. \n\nYou’ll also notice a new word \"super\" in the **constructor**. The super keyword is used to access and call functions from an object's parent. Additionally, you need to remember that the constructor can be used before the “this” keyword is used. \n\n## Summary\n\nLet’s wrap this article up. By and large, we can’t say with a clear conscience that classes exist in JavaScript because the whole mechanism is based on prototypes. Notwithstanding that, the flexibility of this language provides the developer with many different ways to achieve the desired results.\n\nNew versions of **ECMAScript** standards were introduced with more developer-friendly features. In consequence, this allows writing code in a more readable way. But on the other hand, it does not mean that we shouldn't think about why and how some covers work in this way because that can be turn out to be important in some cases of usage.\n\n<NewsletterSmall id={`article-bottom`} />"}],"job":null,"photo":null,"cover":"/img/dev-team-at-work2.jpg","lead":"Programmers love JavaScript. They love it for its extremely flexible approach ****and the countless possibilities for creating the same mechanics in completely different ways. A perfect example of **JavaScript flexibility** is the way classes are defined in this language.","templateKey":"article-page","settings":{"date":"March 21, 2019","slug":"how-to-use-javascript-classes","type":"blog","category":"Tech"},"contributor":"Sebastian Musiał"}}},{"node":{"excerpt":"","id":"d3068389-ad96-565d-9537-85d7499f1df0","fields":{"slug":"/blog/python-vs-c-sharp-detailed-comparison/"},"frontmatter":{"title":"Python vs C# - a detailed comparison","order":null,"content":[{"body":"## Python vs C# - high level comparison\n\nTl;dr: both are cool 😎\n\nBut if such a laconic statement doesn’t satisfy you, I am happy to report that **C#** is a general-purpose high-level\\* statically-typed\\* programming language and **Python** is a general-purpose high-level dynamically-typed* programming language. \n\nSounds more or less similar but some caveats have popped up - that’s because in both cases your mileage may vary. If you need to write low level pointer arithmetic software in C#, nothing is stopping you. Similarly, if you would like type checks in Python, you can have them as of version 3.6. All in all, the way you write your code comes down to personal preference, or the team’s coding standards.\n\n## Differences between C# and Python\n\nWere the two programming languages the same, this comparison would be very brief indeed. Let’s explore some of their quirks that a keen observer can use to tell them apart.\n\n### Hello world!\n\nA mandatory and customary point in every such comparison - how do you print a piece of text data to the console? Let’s have a look at the code you would usually write to achieve that.\n\n**In Python:**\n\n```\nprint(\"Hello world!\")\n```\n\n**And in C#:**\n\n```\nusing System;\n\nnamespace MyApp\n{\n    public static class App\n    {\n        public static void Main()\n        {\n            Console.WriteLine(\"Hello world!\");\n        }\n    }\n}\n```\n\nCharacter-wise you can immediately see that Python's software is about brevity - no curly braces, no semicolons, no classes, namespaces, all that fluff, only the thing that counts - greeting the world like a polite person would. \n\nBut those two pieces of code are not equal at all! In C# we’re declaring a namespace, a class, a method and then calling our print function. That’s a lot of boilerplate for a simple hello world app, do we really need it?\n\nNo, we do not. The following is a valid C# script:\n\n```\nConsole.WriteLine(\"Hello world!\");\n```\n\nThe programming language is the same but most of the code has vanished. We can achieve that by not doing the usual thing™ and putting the code through a regular compiler but instead using the C# interactive compiler or dotnet-script tool, although, to be fair, the namespace, class and Main() method are still defined, just not explicitly by us, which I believe to be the point of it all anyway.\n\n![developers](/img/02346-_tst1374-2x.jpg)\n\n### Whitespaces\n\nPython uses **semantic whitespace** to delimit blocks of code as seen in the snippet below:\n\n```\ntext = input()\nfor c in text:\n    if c == \" \":\n        print(\"Found space!\")\n```\n\nIf we were to reduce the indentation level of the _print_ function call, the interpreter will refuse to work:\n\n```\n File \".\\whitespaces\\whitespace.py\", line 4\n\tprint(\"Found space!\")\n    \t^\nIndentationError: expected an indented block\n```\n\nOn the other hand, C# doesn’t give a damn about indentation and while the following is a well-formatted snippet according to the [coding conventions](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/inside-a-program/coding-conventions),\n\n```\nstring text = Console.ReadLine();\nforeach (char c in text)\n{\n    if (c == ' ')\n    {\n        Console.WriteLine(\"Found space!\");\n    }\n}\n```\n\nthe alternative is also valid, though painful to behold:\n\n```\nstring text=Console.ReadLine();\nforeach(char c in text)\n{\nif(c==' ')\n{\nConsole.WriteLine(\"Found space!\");\n}\n}\n```\n\nAs a bonus fact, it is possible to omit the curly braces if the loop or if-statement body consists of a single statement, allowing for a quite Python-y C# snippet:\n\n```\nstring text = Console.ReadLine();\nforeach (char c in text)\n    if (c == ' ')\n        Console.WriteLine(\"Found space!\");\n```\n\nOn the other hand, it might be [worth typing these anyway](https://nakedsecurity.sophos.com/2014/02/24/anatomy-of-a-goto-fail-apples-ssl-bug-explained-plus-an-unofficial-patch/). And while I do admit to being notorious for breaking this rule for the sake of brevity, adding those few lines is not a big price to pay for the correctness of your code and the reliability of your software.\n\n### Typing\n\nIt was said in our introduction to these two programming languages, C# is statically typed, Python is dynamically typed. And this holds true most of the time, as seen here:\n\n```\ngreeting = \"Hello, world\"\ngreeting = 100\n```\n\nCompletely fine.\n\n```\nstring greeting = \"Hello world\";\ngreeting = 100;\n```\nCauses a compiler error:\n```\nCannot implicitly convert type 'int' to 'string' [static.csx].\n```\n\nYou can also write the following:\n\n```\ndynamic greeting = \"Hello world\";\ngreeting = 100;\n```\n\nWhich will do as advertised - **dynamic**ally change the runtime type with no errors.\n\nAs well as this:\n\n```\ndef print_greeting(g: str) -> None:\n    print(g)\n\ngreeting = \"Hello world\"\nprint_greeting(greeting)\ngreeting = 100\nprint_greeting(greeting)\n```\n\nWhich will… also run just like any correct Python code would but with some help from mypy, or a checker bundled with an IDE like PyCharm, you can get some type errors! More details can be found in this article.\n\n<RelatedArticle title={`Speeding up e-commerce content moderation with Machine Learning based on Amazon Web Services`} />\n\n### Execution model\n\nWith C# being a compiled language and Python an interpreted one there doesn’t seem to be much room for a comparison. They are just different, right? \n\nTaking a closer look, we learn they are not that far apart. In both cases we begin with **source code in the form of a text file** (sometimes more than one). The C# compiler, when fed such files, emits .exe or .dll files which contain IL - intermediate language understood by the .NET runtime. \n\nIL can be generated from any **.NET compliant language** - C#, F#, Visual C++, VB.NET and many more. These files can be executed using the runtime which uses a JIT compiler to create native machine code as it runs the IL for the first time. Any subsequent call to the code that has been JITed will use the native instructions instead.\n\nOn the other hand, Python interpreter turns the **source scripts into Python VM bytecode** which is then executed, skipping the whole JIT business. That is, unless you are using a different Python implementation - [PyPy](https://pypy.org/) - which comes with its own JIT compiler which helps to achieve better performance, particularly for long-running, pure Python (i.e. not calling C/C++ code) programs.\n\nIn Microsoft’s .NET framework world, it is also worth mentioning that there is a project called [CoreRT](https://github.com/dotnet/corert) which aims to enable the creation of standalone, native binaries out of .NET code. It is in an early stage of development but if it succeeds, the world of framework-free, compact, high-performance applications will open for the .NET devs.\n\n\n### \"is\" keyword and == operator\n\nFalse friends, you might call them, because both exist in either programming language but have different meanings, depending on the context. \n\nIn C#, the **is** keyword can be used to check whether a variable **is of a certain type**, whereas in the object oriented Python it is for checking if two variables **refer to the same object**. To check the latter in C# you would use the == operator but for **reference types only** - if used with built-in value types, it will check value equality. \n\nThis behavior can be changed by overriding the operator for a type like it has been done for _string_, a reference type, where comparison using == checks the actual values. \n\nThis is also the case for this operator in Python - you need to override the \\_\\_eq\\_\\_ method in a class for the comparison to work. It is worth noting that in Python you can override \\_\\_eq\\_\\_ and leave \\_\\_ne\\_\\_ as is and it will be just fine, while in C# it is a compile-time error to override just one of the == and != operators.\n\nI feel I should mention that there is more to [equality in C#](https://blogs.msdn.microsoft.com/seteplia/2018/07/17/performance-implications-of-default-struct-equality-in-c/) than [described here](https://docs.microsoft.com/en-us/dotnet/api/system.iequatable-1?view=netframework-4.7.2) but it is also heavily tied to [CLR internals](https://blogs.msdn.microsoft.com/seteplia/2017/09/21/managed-object-internals-part-4-fields-layout/) and as such is well beyond the scope of this article.\n\n## Similarities between languages\n\nA great number of concepts and features sets the two programming languages apart, though there are a few striking similarities between the two. Besides classes, ifs, and fors, which can be found in any language that supports object-oriented, imperative programming, there are some more unique features to be found in the two languages in question.\n\n### async/await\n\nAs of C# 5 and Python 3.5, both programming languages support async/await keywords which help make asynchronicity and concurrency in code more manageable. Here’s how the two languages compare:\n\n```\nimport random\nimport asyncio\n\nasync def greet_after(who, when):\n    await asyncio.sleep(when)\n    print(f\"Hello, {who}\")\n\n\nasync def main():\n    tasks = [asyncio.create_task(greet_after(x, random.random())) for x in [\"John\", \"Jill\", \"Jane\", \"Jake\"]]\n    await asyncio.wait(tasks)\n\nasyncio.run(main())\n```\n\nAnd for C#:\n\n```\nasync Task GreetAfter(string who, int when)\n{\n    await Task.Delay(when);\n    Console.WriteLine($\"Hello, {who}\");\n}\n\nvar random = new Random();\nvar taks = new[] { \"John\", \"Jill\", \"Jane\", \"Jake\" }.Select(x => GreetAfter(x, random.Next(0, 999)));\nawait Task.WhenAll(taks);\n```\n\nThose two snippets greet the people from the list in parallel but will wait a random amount of time before each name. If these two snippets got any more alike, would we even consider them written in separate languages? Probably not, given that C# is quite adamant about its semicolons.\n\n<NewsletterSmall id={`article-middle`} />\n\n### Tuples\n\nTuples are lightweight data objects often used to return multiple values from a function without having to wrap them in an aggregating record, like a class. Comparing tuples in the two languages, they can be near identical syntactically (unless you omit the braces), with some differences in how they behave. \n\nIn Python they are simple collections (like a list) which are immutable (unlike a list), while in C# ValueTuples are increasingly more versatile objects with some dedicated syntax to create them out of other objects. \n\nHere’s some basic Python code:\n\n```\n# cannot have named fields by default - use namedtuple for that\ntup = (\"this\", \"is\", \"a\", \"tuple\")\n\nfor t in tup: # can iterate over items\n    print(t)\n\n# t[0] = \"that\" # error - Python tuples are immutable\n\ndef makeTuple():\n    return \"The answer is\", 42\n\nt = makeTuple()\nprint(t) # prints ('The answer is', 42)\n\nt1, t2 = makeTuple() # tuple deconstruction\nprint(t1, t2) # prints The answer is 42\n\nprint(t + t) \n```\n\nAnd here’s some marginally less basic C#:\n\n```\n// C# tuples can have named items\nvar tup = (\"this\", \"is\", \"a\", literallyTuple: \"tuple\");\n// Named items can still be accessed by the .ItemX property\nConsole.WriteLine($\"{tup.Item4} is the same as {tup.literallyTuple}\");\n\n// foreach(var item in tup) // error - tuples are not iterable\n// {\n//     Console.WriteLine(item);\n// }\n\ntup.Item1 = \"that\"; // values can be reassigned\n\n(string, int) MakeTuple() => (\"The answer is\", 42);\n\nvar t = MakeTuple();\nConsole.WriteLine(t); // prints (The answer is, 42)\nvar (t1, t2) = MakeTuple(); // tuple deconstruction\nConsole.WriteLine($\"{t1} {t2}\"); // prints The answer is 42\n\nclass TheAnswer\n{\n    public int Answer { get; set; }\n    public string Description { get; set; }\n\n    // classes can have deconstructors (not to be confused with finalizers)\n    // you can have as many as you like, out parameters define the resulting tuple\n    public void Deconstruct(out int answer, out string description)\n    {\n        answer = Answer;\n        description = Description;\n    }\n}\n\nvar theAnswer = new TheAnswer\n{\n    Answer = 42,\n    Description = \"The ultimate answer to life, universe and everything\"\n};\n\nvar (a, d) = theAnswer;\nConsole.WriteLine($\"{d} is {a}.\");\n// unsurprisingly prints The ultimate answer to life, universe and everything is 42.\n```\n\nThis feature is available from C# 7 and is separate from generic Tuple<>. If you see a compiler error along the lines of Predefined type 'System.ValueTuple`2' is not defined or imported, make sure that you have referenced the System.ValueTuple NuGget package.\n\n### Ranges and indices\n\nAs of C# 8, the language supports two new types - Range and Index. They were inspired by a similar syntax in languages like Swift, Perl and, obviously, Python, and their purpose is to simplify any code that operates on collection subsets. In Python, one would write code similar to the following:\n\n```\nmyList = [n for n in range(0, 10)]\nprint(\"Whole:\", myList)\n# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\nprint(\"From index 2 onward:\", myList[2:])\n# [2, 3, 4, 5, 6, 7, 8, 9]\nprint(\"From index 2 onward, skip every other:\", myList[2::2])\n# [2, 4, 6, 8]\nprint(\"From index 2 to 4:\", myList[2:4])\n# [2, 3]\nprint(\"From index 1 to second from the end:\", myList[1:-1])\n# [1, 2, 3, 4, 5, 6, 7, 8]\nprint(\"Last: \", myList[-1])\n```\n\nWhereas in C# the syntax is near identical, although does not support declaring ranges which skip a number of elements. Moreover, at the time of writing this article, only Arrays and Spans can make use of this feature, but it may change before the final release.\n\n```\nvar myArray = Enumerable.Range(0, 10).ToArray();\nPrintArray(myArray, \"Whole\");\n// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\nPrintArray(myArray[2..], \"From index 2 onward\");\n// [2, 3, 4, 5, 6, 7, 8, 9]\n// PrintList(myArray[2..^0:2], \"This does not work\");\nPrintArray(myArray[2..4], \"From index 2 to 4\");\n// [2, 3]\nPrintArray(myArray[1..^1], \"From index 1 to second from the end\");\n// [2, 3, 4, 5, 6, 7, 8]\nConsole.WriteLine($\"Last: {myArray[^1]}\");\n// 9\n\nstatic void PrintArray<T>(IEnumerable<T> list, string description) =>\n    Console.WriteLine($\"{description}: [{string.Join(\", \", list)}]\");\n```\n\n### Open source? Cross-platform?\n\nThis is not really a language feature but it is well worth mentioning that both Python and C# are fully open source, which, for the former, is not a new affair but quite so for the latter. With the advent of .NET Core, not only can we have a sneak peek at what is going on under the hood of the compiler, but the [runtime](https://github.com/dotnet/coreclr) and [BCL](https://github.com/dotnet/corefx) as well. \n\nYou can also run the code written in both programming languages on all major platforms like Windows, Linux, MacOS, Android and iOS. More on that later.\n\n![Developers](/img/02262-_tst1290-2x.jpg)\n\n## Frameworks and applications\n\nIn the following section, we will learn about a number of different scenarios where both languages can be applied and see how well-suited they are for a given task.\n\n### Cross platform apps\n\nWPF, WinForms, UWP - all of these come from the .NET framework world and can be used to write Windows desktop apps. With the addition of projects like AvaloniaUI and the upcoming Xamarin.Forms support for desktop scenarios, a C# developer is able to target any major desktop platform out there. \n\nFor Python devs, there’s Qt (or PySide with a more permissive license), Kivy, BeeWare, PyGTK/PyGObject, and TkInter, the latter being bundled with the default Python installation. All of them allow the making of cross-platform desktop apps, so if you know Python and need to write such an app, you are covered.\n\n### Mobile apps\n\nXamarin, Kivy and BeeWare all serve as mobile frameworks as well as desktop ones. We could mention UWP as well but given that Microsoft’s Windows 10 Mobile was discontinued, it is safe to ignore it for mobile scenarios. If you need your app to run on Android or iOS, you have some choice as a Python developer, less so in C#, but both options remain viable.\n\n### Web\n\nYou could fill whole libraries with articles comparing various web frameworks with one another, so for the sake of being DRY, let’s just say that for any developer coding in any language, options do exist to make a web application. Just looking at the [TechEmpower Fortunes](https://www.techempower.com/benchmarks/#section=data-r16&hw=ph&test=fortune) benchmark can reveal that there are both C# and Python based tools readily available. \n\nYou can run the following JavaScript snippet in the browser’s console to filter out all the languages unrelated to the topic of this article:\n\n```\nvar rows = document.querySelectorAll(\"div#bar-fortune table tr\")\nfor(r of rows) r.style.display = r.children[6].innerText != \"Py\" ? \"none\" : \"initial\"; // or “C#”\n```\n\nFlask, Bottle, Django, Pyramid, to name just a few - all of them will help make a Python web app. NancyFX and ASP.NET, or in particular - ASP.NET Core, are there for you if you would rather use C# and might even be a better choice if performance is of critical priority as ASP.NET Core made it to the top 10 of the benchmark.\n\n### Serverless\n\nAs a bonus, it is worth mentioning that both AWS Lambda and Azure Functions support either language to write serverless code, with Azure’s support for Python being experimental. Google’s Cloud Functions can be written in Python but .NET is not supported.\n\n### Gamedev\n\nAs a gamer, I sometimes find myself wondering what programming language and frameworks were used in the making of the games I play. As it turns out, one of my all-time favourites, _Mount and Blade_, was written in Python! \n\nPyGame or Panda is what you should become friends with if you are looking out to create game software using that language. On the other hand, C# can be used with MonoGame (an open source implementation of Microsoft’s XNA Framework), Unity3D, Xenko, or even CryEngine.\n\n### Machine Learning\n\nThis is the part of the programming world where Python reigns supreme. Numpy, SciPy, TensorFlow, PyTorch, Apache Spark, Keras, the choice of software available is staggering for a Python dev. With a metric ton of courses and tutorials available both free and paid on the web, it is arguably THE language for your ML needs. \n\nAs for C#, there’s a new kid on the block, ML.NET, as well as some older libraries like Accord.Net and[ bindings for TensorFlow](https://github.com/migueldeicaza/TensorFlowSharp). Microsoft’s Cognitive Toolkit (CNTK) also supports C# for both evaluation and training (since v2.2) but at the same time has a more polished Python api.\n\n## Conclusion\n\nIt is hard to decide which is top, really. Both languages have free, mature tooling, a plethora of frameworks and libraries, and active communities. They are also flexible enough to fit any task a programmer can come up against, and are truly cross platform, running on desktops, phones, in the cloud, and even IoT devices. \n\nOne is the king of Machine Learning, the other shines on the servers, and even, if you are feeling adventurous, in browsers via WebAssembly. Personally, I would not give up C#’s type system for Python’s concise syntax, but hey, that’s just me and as it was stated in the beginning - **your mileage may vary**. \n\nJust use the tool that you feel is right for the task, and you should be good."}],"job":null,"photo":null,"cover":"/img/python-vs-c-_cover-duz-y-2x.jpg","lead":"Coders nowadays have quite a wide array of tools and languages to choose from when faced with the task of writing an application. Not all programming languages are made equal, though. In this article we learn about two specimens from two seemingly different worlds - Python and C#.\n","templateKey":"article-page","settings":{"date":"March 13, 2019","slug":"python-vs-c-sharp-a-comparison","type":"blog","category":"Tech"},"contributor":"Krzysztof Miczkowski"}}},{"node":{"excerpt":"","id":"ba18bf7b-b537-52c3-8689-9abaf926ada0","fields":{"slug":"/blog/the-new-dawn-of-functional-reactive-programming-in-node-js-marble-js/"},"frontmatter":{"title":"The New Dawn of functional reactive programming in Node.js - Marble.js 2.0","order":null,"content":[{"body":"## The core philosophy\n\nMarble.js is a functional reactive framework built on top of the Node.js platform. The core concept assumes that almost everything is treated as a stream of events passing through over time. **If you come from a functional programming world** you might notice that the framework draws on many functional programming concepts. The purely functional languages like Haskell express side effects such as I/O and other stateful computations using monadic actions. \n\nWith the growing popularity of reactive extensions, with Marble.js **you can create a referential transparent program specification** made up of just functions that may produce side effects, like networking, logging, database access, etc. Using its monadic nature we can map I/O operations over effects and bring in other sequences of operations.\n\nBecause it is a functional reactive framework, RxJS is the first class citizen here. Despite the single event nature of basic HTTP, there are are no contraindications against using it for single events. In Marble, **RxJS is used as a hammer** for expressing asynchronous flow in a monadic manner, even if you have to deal with only one event occurring over time. \n\nThe framework **doesn't operate over basic protocol only** but can be used also for both WebSocket and event sourcing purposes, where its multi-event nature shows its claws.\n\n<RelatedArticle title={`Marble.js – new open source framework for JavaScript`} />\n\n## Everything is a stream\n\nThe main building block of the whole framework is an Effect, which is just a function that operates over a stream of events. \n\nMarble.js abstracts this concept in a way that can be applied in many different scenarios - from a very basic REST API to a feature-rich real-time WebSocket-based system.\n\n![marble.js 1](/img/image3.png \"Marble.js 1\")\n\nAs previously mentioned, Marble.js defines a common functional interface for many different kinds of Effects. Combined with a **unidirectional data flow**, it provides predictability and traceability of the events passing through. \n\nThanks to that, **it makes the framework consistent** across the different areas that it needs to operate on. \n\nIf we look at the WebSocket protocol and try to apply the reactive programming concepts under the same core principles defined by the framework, we can achieve a **coherent environment** for dealing with asynchronous events passing over time.\n\n![marble.js 2](/img/image2.png \"Marble.js 2\")\n\n## The powerful set of features\n\nFrom the very first version, **Marble.js was built as a middleware-based system.** It is a common requirement to encounter the necessity of having various operations needed around incoming data. \n\nIn Marble.js, as with any other Effect, **the middleware is a stream of side-effects** that can be composed and plugged into our incoming data lifecycle to perform certain actions before reaching the designated point.\n\n**The second major release** takes even bigger steps toward being a fully featured framework. Besides the fluent API for working between different protocols (such as WebSockets) one of the main goals of the newest release was to increase the type safety and improve data type inference within Effects. \n\nWith Marble.js you can validate and check at runtime that **incoming data has the shape that you would expect**. With the deep integration of the io-ts library, you can even extract a static type from validator that is guaranteed to match any data structure that passes validation.\n\n![marble.js 1](/img/image1.png \"Marble.js 1\")\n\nThe functional nature does not stand in the way of proposing its own mechanism for implementing **a Dependency Injection (DI) system**. It is a very simple concept which can be implemented in many different ways. \n\nBased on the **need to provide different modules on demand**, Marble.js comes at the DI problem from a different, more functional direction, potentially very similar to other popular pure functional implementations. From version 2.0, it introduces a Context - an abstraction over the Reader monad.\n\n## **Lean Startup**\n\nBuilding a framework or even a bigger library is not something you can do overnight. It is always a process with a clear philosophy behind it. At first, Marble.js was born as an HTTP middleware library for Node.js. \n\n**Applying lean startup principles to an open source** product is not something you see very often, but in practice, a lot of popular open source projects were born with lean startup principles in mind, even if the authors didn’t realize. \n\nStarting from the market analysis, in just a one week, **Marble had a working proof of concept** that tried to combine a reactive programming paradigm with the event nature of HTTP protocol. \n\nAfter just one more week it was presented as an **open source MVP product** to a wider audience on GitHub. The initial concept was validated in the beta phase and was iterated with new ideas and improvements from version to version. \n\nThe latest 2.0 major version was released after about 6 months from the first debut. Similar to other popular JavaScript frameworks, such as Angular, Marble.js tries to operate on exactly the same release cycle, which means that **you can expect a major release every 6 months.**\n\n<NewsletterSmall id={`article-bottom`} />\n\n## Open Source\n\nOpen source is all about the people and their support. From the very beginning, the framework received an incredibly **positive response from the JavaScript community.** In the first week of its publication, it earned more than **700 stars** and for a few days, it was the most popular TypeScript repository on the GitHub. \n\nBesides that, it gains its fair share of exposure on social media, getting attention from, among others, **Ben Lesh (the RxJS project lead)** who gave a big shot of support from the very beginning.\n\nWith such interest in the presented concept, Marble.js got a big response with a bunch of proposed improvements and cool ideas from the community. **The second major version, released on the 2nd of March,** is an acknowledgment of the trust that the community gave from the very beginning.\n\n**Keep an eye on the** [**Marble.js GitHub repository**](http://github.com/marblejs/marble/pulls)**, on** [**Twitter**](http://twitter.com/marble_js)**, and on** [**docs.marblejs.com**](https://docs.marblejs.com/) **for the latest information and updates!**"}],"job":null,"photo":null,"cover":"/img/marble_fb.png","lead":"We all want to make our products more responsive and better performing. We all want to deliver a smooth user experience without freezing and slowing down. **Reactive programming is not just a buzzword** but nowadays is a de facto standard for building web apps on the frontend. On the backend, the concept is still not so popular as we might think. **The Marble.js framework comes as a response** to that need and offers a way of building scalable and functional products with reactive data flow in mind.","templateKey":"article-page","settings":{"date":"March 12, 2019","slug":"functional-reactive-programming-nodejs-marblejs","type":"blog","category":"Tech"},"contributor":"Józef Flakus"}}},{"node":{"excerpt":"","id":"c1ec5b4f-7e91-5e73-bc13-fd87f40119a9","fields":{"slug":"/blog/top-3-products-weve-built-in-php-challenges-and-conclusions/"},"frontmatter":{"title":"TOP 3 products we've built in PHP – challenges and conclusions","order":null,"content":[{"body":"Along with Mateusz, Paweł, Mariusz, and Sławek – our Senior PHP Developers – we’re setting out to create a **series of posts discussing the biggest and most demanding projects**. How were they constructed? What opportunities did they provide for us, developers? What knowledge did we gain thanks to them?\n\nIf you’ve already entered the **“show-me-what-you-got” mode**, here we go! Stay with us till the last sentence.\n\n## Tojjar – we made Etsy for the Middle East!\n\n### Recap\n\nThe first product we’d like to proudly present to you is Tojjar. The backend team working on it included Mariusz Bąk and Mateusz Rosiek, our Senior Software Developers, who both joined us almost 9 years ago. \n\nTojjar is an **e-commerce platform operating in Saudi Arabia**, directed to various users (B2C) pretty similar to eBay or more specifically - Etsy. Its main goal was to increase women’s participation in the labor market by enabling them to sell various handmade products.\n\n**Additional functionalities** in the product included, for example, the possibility of booking a stand space in various governmental institutions or the opportunity to take part in tenders organized by companies. \n\nThere were also other options typical for e-commerce solutions, such us **integrations with payments, SMS gateways, and shipping companies’ APIs** (specific for the Arab market). The subsequent plans concerned extending the platform by B2B functionalities.\n\n### Challenges\n\nThere were a couple of challenges, various at each stage of implementation. **Initially, we realized the MVP**, whose objective was to demonstrate the prototype and to secure funds for the upcoming stages by the Client.\n\nOne of the challenges was the **very short implementation period (6 weeks)** and the resulting fact that we had to co-create, together with the Client, a certain range of functionalities that would be sufficient for the investors and possible to realize in such a short time.\n\n<RelatedArticle title={`Predictive maintenance for wind turbines - an interview with Boldare’s machine learning engineers`} />\n\nFrom the very beginning, a lot of pressure was placed on the perfect mapping of the provided designs. Despite the short deadline, we immediately realized the MVP in the **API + SPA architecture,** so that we were able to create code that could evolve and develop in the following 18 months.\n\nLater, we underwent a **dynamic team scaling process** (from 3 members to a dozen at one time). At that stage, the challenge we faced was to organize work in such a way that the value could be quickly delivered to the Client.\n\nWe also had to become better acquainted with the **specific traits of the Client**, who considered a wrong shade of green or a button displaced by two pixels as more problematic than the actual error occurring after clicking that button.\n\n![tojjar php symfony project](/img/tojjar-app-designs.jpg \"Tojjar team planning\")\n\n### What's inside?\n\n**Tech stack:** PHP 5.6 and 7.0, API, Symfony 3.0, MySQL, ElasticSearch, ELK, REST, AngularJS 1.5, Gulp, Protractor, Flexboxgrid, SASS, SPA, RWD.\n\nWorking on the backend part, we wanted to organize the code as best as possible at once. First of all, we used the **Command and CommandBus patterns** to structure the business logic in a clear manner.\n\nThe **REST API was not based on database entities but on DTOs**, whose structure was often adjusted to the needs of the Client’s SPAs, thanks to which we could make them independent of the database structure and we were able to limit the number of queries. We introduced a **unified method of entity filtering** (both with respect to those downloaded by means of queries and those available in the memory) by **employing the** **Specification pattern**.\n\nWhat’s more, we prepared simplified mockups of external services (the single sign-on solution, the SMS gateway) to be able to test our app effectively regardless of the service providers’ problems.\n\nTo build the developer editions of the project **we used Docker and Docker Compose.** At that stage, the technology was so advanced and the project was so complex and dynamic that the maintenance of the local environment got difficult. From then on, **Docker became the standard tool in all our projects.**\n\n<BlogLink text=\"\" url=\"https://www.boldare.com/career/\" image=\"/img/banner_1-2x.jpg\" target=\"true\" style=\"\" />\n\n## **Lessons learnt**\n\n1. It was a pretty complex project, one of the first at Boldare that we had implemented in the **API + SPA model**. \n2. The **CommandBus** that we used served us well, so now we often employ it in our projects. \n3. We learnt how to use **Docker**, and the experience we gained in that project helped us create a tool for the dynamic construction of test and demo environments.\n4. We also improved our methods of cooperation in a large team, trying out various agile work methodologies – **Scrum and Kanban**. \n5. Finally, it was the **first time we had worked with a client from the Middle East**, so we learnt a little about cultural differences and how they can influence the everyday cooperation.\n\n## Summary\n\nWe’re happy you’ve reached the end! Was that an interesting piece for you? We've got more coming quite soon - featuring even more **insights from our developers,** the technical solutions we used, and the lessons we learnt for the future. In the new post, we’re going to tell you about **how it was to work with the world’s largest carsharing startup as a client – BlaBlaCar.**\n\nWhat you see here is our daily job. **We design and build large-scale digital products for international clients.** If you’re interested in what we do and you want to get to know us better, don’t hesitate – you’ll find more info about us on our [Career page](https://www.boldare.com/career/) **(first of all, see the video and look up the PHP job offers)**. If you have any questions, feel free to write to us at career@boldare.com."}],"job":null,"photo":null,"cover":"/img/webp.net-resizeimage-1-.jpg","lead":"Our strong backend team works on large and complicated digital products, mainly in PHP / Symfony. As professional programmers, we love challenges – this is a part of our DNA we inherited from XSolve, the software house we've emerged from as Boldare. That’s why we decided to share our experiences with you and to show you what we’ve learnt through the most important PHP projects we’ve done so far.","templateKey":"article-page","settings":{"date":"March 12, 2019","slug":"top-3-products-php-tojjar","type":"blog","category":"Tech"},"contributor":"Mariusz Bąk"}}},{"node":{"excerpt":"","id":"7c10cc73-8a0f-5ada-aec9-f06400ee6913","fields":{"slug":"/blog/machine-learning-obstacles-and-limitations/"},"frontmatter":{"title":"Machine learning - obstacles and limitations","order":null,"content":[{"body":"## Managing expectations - Don’t expect miracles\n\nBecause of the rapid progress of machine learning over the last few years, expectations of what it can achieve are often not in line with reality. It’s still a relatively immature technology that doesn’t just work ‘out of the box’. Every model is unique, and must be trained, which involves a lot of experimentation.\n\nIn addition, **the process requires substantial inputs in the form of computational resources, data, and even manpower.**  Just because algorithms are making assessments, predictions, and recommendations, a human touch is essential to the initial set up, and to oversee and act on any outputs. Finally, **there is no guarantee that the model will learn quickly** or deliver precise predictions for complicated queries.  \n\nIts therefore very important to have a solid reason and well-developed strategy for implementing machine learning. In order to decide how much value will be added to a product, goals must be well-defined, and careful consideration given to what it will take to achieve them. \n\nFor example, **you’ll want to plan for classification, clustering, regression and ranking before any code is written**. Data collection mechanisms need to be put in place, with appropriate formatting. Data might have to be reduced or weighted using sampling or aggregation. It’s probably going to be necessary to decompose the data and rescale it. \n\nOn top of all this, once you have some output, there must a be a structure and culture that is comfortable with data-based decision making.  **Having the data is one thing, but understanding and acting on it is quite another.** This is why having a good team in place is vital.\n\n## Finding Talent - A problem of supply and demand\n\nThere is a supply and demand problem in the world of big data and AI. Data scientists and specialist programmers are required to build and understand machine learning systems, but there are only so many to go round!  The willingness of tech-giants like Google, Amazon or Tencent to pay astronomical salaries has meant that the cost of capturing talent has exploded. [**Six figure salaries are the norm.**](https://www.boldare.com/blog/machine-learning-digital-product-costs/)\n\n![Machine learning needs a lot of data](img/team-meeting-discussion.jpg \"Machine learning needs a lot of data\")\n\nWhile simplistic techniques can be picked up relatively easily (even from various free online courses), **complex deep learning techniques require a high degree of specialization and years of cross-disciplinary training**. It’s likely a team will need to be assembled who have experience in computer science, mathematics and relevant domain expertise. \n\nThese human capital costs add up to make recruiting in-house a major outlay, but luckily, there are also other solutions, [usually more affordable](https://www.boldare.com/machine-learning/).\n\n## Computational requirements - Feeding the beast\n\nEven the best data scientists and programmers will only be as good as the infrastructure that they are working with. This is why it’s necessary to get the right set-up for machine learning to work properly.  \n\nLarge scale data processing requires a lot of computational power, [which demands a fast GPU](http://timdettmers.com/2018/11/05/which-gpu-for-deep-learning/) or distributed computing. It’s obvious that the **more power at your disposal, the faster it will be to train ML algorithms, and therefore iterate on feedback and learn from mistakes**. Multiple GPUs can be useful for parallelization techniques on small neural networks, or for running multiple algorithms or experiments separately on each GPU. **Speed is important in machine learning**, as generally speaking, the smaller the interval for performing a task and gathering feedback, the better the algorithm will be able to integrate and adapt relevant memory pieces for the task into a coherent picture.\n\n<RelatedArticle title={`Predictive maintenance for wind turbines - an interview with Boldare’s machine learning engineers`} />\n\nHowever, even with the latest powerful GPUs, there will be times when training a model could take days or weeks. When this happens, **solid plans and structured timelines for projects will keep things moving forward, even in production environments.** \n\n**It’s also important to understand how often the models will need to be retrained or updated.** For example, if you’re receiving new data every day, but it takes a week to retrain the model, this quickly becomes problematic as the real-time accuracy of the model is called into question. Conversations between the engineering and business teams should establish consensus on how best to use the results and work it into a product.\n\nIn addition to finding the appropriate hardware acceleration for a ML project, **storage solutions that meet the data requirements need to be carefully considered, taking into account data structure, digital footprint, elasticity and security**.  \n\nThis will likely depend on the type of data that is subjected to ML techniques. **There are increasingly complex data formats like audio, video, social media, and smart device metadata that could all be very interesting to analyse programmatically, but require different treatments**. If you start thinking about connectivity, and how datasets can feed into other, then you will need some serious computational power and storage capability!  \n\nFor example, consider that billions of people leave a data trail on social media that is ripe for analysis, or that the number of connected devices is predicted to reach [75 billion by 2025](https://www.statista.com/statistics/471264/iot-number-of-connected-devices-worldwide/).  By using appropriate ML techniques to take advantage of all this data, you could gain some fascinating and actionable insights.   \n\n## Data quality is vital - Put rubbish in, you’ll get rubbish out\n\n**A machine learning algorithm will only be as good as the data it is trained on.** In practice, this means it only makes sense if you have a lot of data to work with, as sparse, low quality sets will not reveal much or could easily lead to misinterpretations. Cleaning the data and filtering the noise or bias is time consuming, but nonetheless essential to ensure accurate results. Data must also be transformed into a logical format for the algorithms to consume, and for data scientists to query, summarize and visualize. \n\nIf a supervised learning technique is being used, then it’s also necessary to have correctly labelled data. **In order for the output to be accurate, the input needs to be robust.** While there is an ocean of big data as a result of various collection techniques becoming ubiquitous over the last few years, it’s not necessarily adequately labelled, which can prove to be a significant obstacle. \n\n<NewsletterSmall id={`article-middle`} />\n\nIn quantitative sets, answers can sometimes be calculated or intuited from the data itself, but generally labelled data doesn’t just occur naturally. For example, with image data, a collection of pixels that combines into a picture of a car is easily recognized by the human eye, but not by an untrained algorithm. A human will have to first label the data. Services like [Remotasks](https://www.remotasks.com/) are now popping up, [which outsource this labour to low income countries](https://tech.newstatesman.com/guest-opinion/planetary-labour-market).  \n\nUnsupervised learning comes with certain challenges too. The techniques tend to be more complicated, as the algorithm cannot rely on answers given in the training set, but rather has to come up with its own solutions, which requires an awful lot of data and a degree of trial and error. **The model can be optimized via reinforcement, where suitable action is taken over multiple steps to maximize reward (or punishment) for a particular situation**.  \n\nMost deep learning techniques still can’t be effectively applied to generalized problems, as they struggle with things they haven’t encountered in training and can’t transfer their solutions from one set of specific circumstances to something else.  It’s therefore necessary to continually retrain the models, which often requires new datasets and resources, even when the usecases are quite similar. For example, an [AI trained by machine learning](https://www.wired.com/story/deepmind-beats-pros-starcraft-another-triumph-bots/) on the game Starcraft can comprehensively beat the human champion, but without extensive retraining can’t play as all the alien races in the game, nor on all the maps, nor older versions.\n\nHowever, work being done using synthetic data and  transfer learning techniques looks promising, and could help overcome this limitation. Various projects have demonstrated that **it’s possible to repurpose models, using knowledge gained from one task to enhance a new one, without building from scratch**. This allows teams to explore and experiment with lower barriers to entry.  \n\n## The Black Box - Explaining the machine\n\nOne of the main concerns around algorithms’ reliability is that it’s very difficult to understand how exactly they work. Advanced neural networks that employ unsupervised learning techniques are a black box, because while the inputs, weighting criteria and outputs might be clear, the reason why the models make a certain decision are not.  \n\nIt’s exceedingly difficult for humans to understand the hierarchical layers of data that constitute a complex model. [Researchers are leveraging experimental psychology](https://singularityhub.com/2019/01/28/can-ai-tell-the-difference-between-a-polar-bear-and-a-can-opener/) to get a handle on why algorithms perceive the world in a certain way, and how they differ from humans. Approaches to the problem are similar to how scientists try to understand animals’ senses or a child’s developing brain.  \n\nThere is a natural hesitation to allow processes that we don’t fully understand to take control of software and make important decisions, like driving cars, recommending medical treatments or executing financial trades. Indeed, in certain industries like banking or insurance, regulations will limit or prohibit certain machine learning algorithms, while things like GDPR also complicate matters with requirements like a ‘right to explanation’.\n\n**It’s important to think about how ‘explainable’ the models you build are, and whether it is necessary to build in rationales for predictions.**  \n\n## Machine Learning is challenging, but worth it!\n\nThe problems outlined above are significant, but can be overcome with the correct planning and implementation.  The continuing progression of the AI industry means there are lots of reasons to be positive:\n\n* As machine learning becomes increasingly normalized and approachable, it will be easier for companies to form judgements on what can and can’t be achieved, and what specific solutions are most appropriate.  \n* Market forces, expanding toolsets and automation should help with the shortage of talent in the field.\n* Technological improvements will drive the industry forward, allowing greater processing speeds that can accelerate training periods.\n* Innovative techniques and technology will reduce the need for massive bespoke datasets.\n* Results will become easier to explain, and there will be increasing acceptance that not every decision made by an algorithm needs to be fully understood.\n\nIt’s exciting to see the field of machine learning developing rapidly, as more and more companies and universities build out the infrastructure and theory.  As **nearly every industry can find a usecase for machine learning**, various solutions will start to feed into each other, and more advanced models will be created as a result. **It’s a truly disruptive technology that is set to reach into many aspects of our lives and shape our future.**"}],"job":null,"photo":null,"cover":"machine_learning_b.png","lead":"If you believe the hype, **machine learning** is poised to disrupt and streamline many industries that are underpinned by data. **It’s being utilized in everything from driverless cars to product recommendations and healthcare, and such solutions are massively improving the function and utility of companies that have invested time and money in exploring the possibilities**.  However, it’s important to remember that it is not a silver bullet. If a company is looking to implement such solutions, it must first be aware of various obstacles and limitations of machine learning, and the ways to overcome these.","templateKey":"article-page","settings":{"date":"March 03, 2019","slug":"machine-learning-obstacles-and-limitations","type":"blog","category":"Strategy"},"contributor":"Jonathan Wooddin"}}},{"node":{"excerpt":"","id":"1dd3e9ac-ee33-5abc-bb9d-77ba0c05dbf2","fields":{"slug":"/blog/java-vs-javascript-whats-the-difference/"},"frontmatter":{"title":"Java vs. JavaScript: what's the difference? ","order":null,"content":[{"body":"Paradoxically, both programming languages share a lot of features, and a lot of features divide them, which does not help in distinguishing between them.  I’ve decided to analyze this subject and to describe the major distinctive differences in each scripting language. In this article, I’m discussing the following issues:\n\n* The basic differences between the two programming languages;\n* The main uses of each language;\n* Information about the environments in which the programming you create in each language can run;\n* Review of the most popular libraries and frameworks for Java and JavaScript; \n*  Their usability in reference to the creation of mobile web apps.\n\nI hope this text will dispel your doubts and help you understand the differences between each programming language.\n\n**Who is this article written for?** First of all, it’s a good read for the people who have only just started their programming adventure and because of that, have difficulties in differentiating between Java and JavaScript. **If you’re an experienced programmer, you can read it as well**. It will help you refresh and organize your knowledge – you might also be surprised with some of the topics I’ll mention here. Just read on see for yourself!\n\n## Java and JavaScript – similar names, different origins\n\nEven though their names are similar, each scripting language was created by a different company, in different years, and for different platforms. **JavaScript** (originally EcmaScript) was developed at the end of the 1990s by Netscape, the web browser-makers. Its programmer father was Brendan Eich. **Java**, on the other hand, was made by Sun Microsystems in 1995. In 2010, that company was bought by Oracle and since then, the language has been developed by this corporation.. \n\n## Comparison of Java and JavaScript\n\n### Compilation:\n\nJava is a compiled language, which means that the code written by a programmer is transformed by means of a compiler into **bytecode**. The compiled class (that is code) is saved to an output file “*.class”.\n\n**What is the bytecode** itself? It’s a list of instructions read by the Java Virtual Machine – JVM, i.e. the environment in which Java code is started. To compile the code written in Java, you must install the JDK (Java Development Kit) version of Java. To run programming written in Java, you need the JVM.\n### What is JRE (Java Runtime Environment)?\n\nIt’s a set of tools necessary to run the code (program). It enables you to start the Virtual Machine. However, it does not let you compile the code written by a programmer into bytecode.\n\n<RelatedArticle title={`How to start a neural network with JavaScript in 5 minutes`} />\n\n### What is JDK (Java Development Kit)?\n\nWhen it comes to web development, **JDK (Java Development Kit)** contains all the tools included in the JRE package, it also has an ample collection of development and web development tools, among others, the Java compiler and debugger. Programmers use the JDK to create software.\n\n**Unlike Java, JavaScript is an interpreted programming language**. What does that mean? Well, that means that when scripting, the created JavaScript code doesn’t need to be compiled into machine code. You just need to write a simple function in JavaScript and run it in a web browser. Normally, the browser-run JavaScript code isn’t compiled into bytecode or any form of instruction for the processor. JavaScript code retains its original form, saved into a file. However, the V8 engine has been developed recently, which can compile JavaScript code into machine code. In the process of compilation several other operations are executed, such as optimization, etc. Thanks to that, applications can function much faster.\n\n### How to run the written code?\n\n**Java** follows the rule of ”write once, run anywhere”. This means that **any program written in Java should be read by and run on any computer with the JVM installed**: no matter if it’s a PC, a server, or a device with the ARM processor. Obviously, the computing power and the RAM size of the device must be sufficient for it to be able to run both the JVM and the program itself.\n\nWhile working on this article, I did an experiment to check whether the programming code can run in any environment. To do that, I used my personal computer with the Ubuntu system, and I tried to run a program compiled for Ubuntu on the Raspberry Pi 3. For the purposes of the experiment, I created an app in Spring Boot which can read the level of liquid in a container in a smart house. I built the app using my own laptop. Then, I uploaded the compiled target code and started it on a Raspberry Pi 3 computer. There was no need to install any plug-ins for the app. I had no trouble running the program compiled on my laptop on the JVM in the ARM architecture.\n\n**Contrary to Java, to run JavaScript code, you don’t have to start a compiler or the JVM**. The user simply needs to have a web browser which supports **JavaScript**. That shouldn’t be a problem, because virtually all modern web browsers contain a JS-supported engine. **You only have to run the script on your favorite web browser**.\n\n<NewsletterSmall id={`article-middle`} />\n\n### The programmers’ community\n\nJava and JavaScript are both strongly supported by the international community of programmers, who are always happy to help the beginners. What’s more, Google helps in looking up numerous examples of coding and lots of solutions to the problems already encountered by Java or JavaScript developers.\n\n### Speed\n\nIn the beginning, **Java** was criticized for being too slow. Now that computers are much faster and the creators of Java have significantly optimized their methods, programmers do not feel any discomfort while creating a program. As far as the web browser-based **JavaScript** is concerned, there have never been any problems of this kind. Thanks to its speed, JavaScript not only comes of use in web development, but it is also useful in computing and performs well in slower computers, e.g. Raspberry Pi. **Additionally, after implementing the V8 engine, JavaScript operations have become even faster**.\n\n![Developers working on JavaScript and Java](/img/05053-_tst4081.jpg \"Developers working on JavaScript and Java\")\n\n### Static vs. dynamic type checking\n\nProgramming languages can be classified according to the kind of typing: **static (Java) or dynamic (JavaScript)**. \n\n**Static typing** means assigning types to variables or constants during compilation. So, the compiler assigns the integer type to a variable containing a numeric value. If the value is textual, the compiler cannot read it and will report an error during compilation. This way, static typing allows programmers to detect many errors early, in the compilation stage.\n\nIn **dynamic typing**, the types are assigned as the program is started. Thus, the error described above will only be detected when the program is running. This gives rise to plenty of programming language jokes about the two, such as the one below:\n\n_What’s the difference between Java and JavaScript?_\n\n_In Java, errors are reported by the compiler, and in JavaScript by the client. :)_\n\nThere are various views on the pros and cons of both solutions. In my opinion, Java has the advantage here, because many errors can be solved already at the stage of the compilation of the app code, whereas in **JavaScript**, for large systems or web applications, the errors only come out when the client is running the app in their web browser.\n\n### Concurrency\n\n**Concurrency refers to the processing of multiple threads or processes.** Each thread must perform certain operations and receives a determined amount of memory and time in which the processor can process data for a given thread. Overall, it gives the impression that a couple of programs or operations are read and executed simultaneously with one processor..\n\nWith regard to multithreading, in **Java**, concurrency is supported by the threads which allow you to assign the processor time to many programs. You can use the **Thread class** or the **Runnable interface**. What’s more, you have a number of libraries offering interesting solutions to problems connected with concurrency.\n\nThere are no threads in JavaScript. There is however, Event Loop, which is a sort of task track to be performed at a defined priority. To do a task asynchronically, you must place the task in the track and set its priority. There are, of course, many frameworks such as RxJs (Reactive Extensions for JavaScript), but they are wrappers, i.e. tools wrapping certain low-level operations. Ultimately, everything comes down to Event Loop.\n\n### Updates\n\nEach scripting language has undergone considerable changes over the years. Looking back on it, one can say that the changes have had a positive impact on the development of both of them.\n\nIn the case of **Java**, the most significant changes were brought about by the version 8, published in March 2014. It provided support for functional programming (meaning lambda expressions). Many of the operations which used to take up a series of code lines can now be expressed in a much shorter, quickly read form; and many other things were simplified as well.\n\nOn the other hand, in **JavaScript**, the greatest changes were introduced by the ES6 update in 2015. The functionalities included classes and inheritance based on class extension. Though the initial browser support for the ES6 was limited, significant advances have been made since.\n\n### JavaScript and Java in Android and iOS web development apps\n\nIt’s worth mentioning that Java offers the possibility of creating native web browser-based mobile apps for smartphones with **Android**. **JavaScript** provides this option too, as long as you use libraries to create mobile apps, for instance, **ReactNative** or **Native Script**. It must be pointed out, though, that the apps created in the above mentioned frameworks work as effectively as those created natively in Java.\n\nMoreover, tools like **ReactNative** present many more opportunities than Java does. For example, they allow you to create cross-platform mobile apps. This means that **once code is created, it can be used simultaneously on two mobile operating systems – Android and iOS**. \n\nFrom a client’s perspective, this is a perfect solution. They don’t need to hire two web development teams to build to native apps for iOS and Android. They will do well with a single team creating an app for both systems at the same time. This, in turn, results in reducing the costs of the mobile app creation considerably. However, if the app is dedicated only to Android or iOS or if the speed of performance is the critical condition, I definitely recommend creating a native application.\n\n### Annotations\n\nAnnotations are a very important functionality in Java, but they are not present in JavaScript. They have numerous uses, serving, for instance, to perform certain operations before, during, and after executing the method. Sometimes they serve to transfer metadata about how to handle error exceptions. Frameworks like Spring Boot, JPA, EJB, or Seam have become immensely popular thanks to the annotations which have settled in Java for good and made this scripting language even easier to read and use.\n\n## Summary\n\n**As a Java programmer with several years of experience**, I have noticed that Java has been going through a visible and necessary transformation in the context of business and web development. Over the course of the last couple of years, the number of Java editions has grown immensely, but nowadays it is less and less used on the front end. A few years ago, Spring, Seam, GWT, Facelets, or JavaServer Faces were very popular frameworks used to build monolith applications. Now there’s just Spring on the market, in the form of the Spring Boot extension\n\n**When it comes to front-end app programming languages, Java has given way to JavaScript libraries such as React or Angular, and its role has been reduced to building APIs and back-end apps**. Even so, the web browser-compatible **JavaScript** is preferred by some people in this area as well, mainly owing to the popularity of the **NodeJS** servers, which have been gaining importance lately.\n\nI hope this article has been and interesting read and will help you distinguish between each programming language; whatever you’re aiming to create. If you’re at the beginning of your programming career, this text will aid you in making the decision and choosing which language is best for you.\n\n\n![JavaScript and Java comparison](/img/javascript-and-java-comparison-in-a-nutshell.jpg \"See comparison between JavaScript and Java languages\")"}],"job":null,"photo":null,"cover":"/img/java-vs-java-script.jpg","lead":"There are few more problematic notions in the web development and programming language communities than the unruly two: Java and JavaScript. Due to the coincidence of names and the partially similar usage of these two programming languages, many people regularly mistake one for the other, using these names interchangeably. So what’s the difference between Java and JavaScript, and what do they have in common?","templateKey":"article-page","settings":{"date":"March 01, 2019","slug":"java-vs-javascript-what-is-the-difference","type":"blog","category":"Tech"},"contributor":"Grzegorz Kukla"}}},{"node":{"excerpt":"","id":"1c8073b0-a59b-5f51-8ceb-ee4206c84b69","fields":{"slug":"/blog/what-is-node-js-used-for/"},"frontmatter":{"title":"What is Node.js used for? ","order":null,"content":[{"body":"As you can guess, there must be a reason why the tech giants have begun using this open source, community-loved engine. The most important one is that Node.js uses the popular Chrome JavaScript V8. In an era of JS front-end frameworks, it allows us to use the same language for both front and back-end. The potential of **Node** can be used not only for server-side and web development. Being modular, highly scalable and accessible via the CLI (Command Line Interface) on each platform gives Node.js its various use cases.\n\nThe key question is, how is it possible? There are many factors affecting Node’s ability to perform in this way. \n\n**Node.js is single-threaded and runs asynchronously in one event loop.** The secret lies in using the power of non-blocking I/O architecture. This means that you should use asynchronous code (running in the background) as much as possible. This incredible power can be used with data streams.\n\nPerfect bidirectional real-time data (also audio and video) streaming is often the strongest reason to choose **Node.js** over other technologies. Single-threading is not an issue (Node is able to run statelessly in a cluster using, e.g. the PM2 library) but unfortunately, it doesn’t handle big data processing well.\n\nLet’s look at the most popular use cases for Node.js.\n\n![Event loop diagram - the heart of the Node.js V8 engine](Event_loop_diagram_-_the_heart_of_the_Node.js_V8_engine.png \"Event loop diagram - the heart of the Node.js V8 engine\")\n\n_Event loop diagram - the heart of the Node.js V8 engine._\n\n## Node.js and Microservices\n\nThis choice of name wasn’t a random decision. The full potential of its architecture is utilized by building applications as small nodes (parts). Does that sound familiar? Microservices are apps that need to be lightweight, blazing fast, scalable and stateless. Deploying thousands of small (but powerful) nodes in clusters and daemon is available mostly out-of-the-box with tools like [PM2](https://github.com/Unitech/pm2).\n\n<RelatedArticle title={`How to use JavaScript Classes? Three Different Ways`} />\n\nWell, **Node** is light and tiny, but what about connecting to other services? Thanks to the [npm](https://www.npmjs.com) package manager, you can use all of its content, including web servers, databases connectors, **REST & GraphQL** implementations and instant integrations with various **API** providers, such as **AWS**.\n\nWeb building has probably never been so easy as it is with the express framework. Nowadays, a complete web server could be written in a couple of lines. Node.js is also intended to be fast in use - a ready application can be deployed to zero-configuration **Heroku** servers with a line of CLI command.\n\nBreaking down an app into smaller ones also overlaps with **Kubernetes**, the service that facilitates automation and configuration of containerized applications. You can compare it to Lego blocks. With a decent amount of small bricks, you can create complex, effective and stable results. Due to the nature of their simplicity, Node.js applications offer the high availability needed in production environments.\n\nThe simple architecture of an application built in Node.js:\n\n![ The simple architecture of an application built in Node.js](Architecture_of_an_app_built_in_Nodejs.png \" The simple architecture of an application built in Node.js\")\n\n## Real-time communication in Node.js\n\nBuilding low-latency live servers with opened bidirectional connections is a weak point of many technologies. In some of them, e.g. **PHP** which runs per request and not as a still opened socket, it’s just really hard to achieve due to the architecture. \n\nOf course, it’s possible to build it in other languages (e.g. **Python, Java**), but that still requires a lot of effort and workload. Then comes the time for implementing the connection on the front-end. Fighting with discrepancies of encoding, modes, and protocols are not something we like to spend time on. Is there another, developer-friendly solution? \n\nOf course, there is. **One of the great things about Node is its scalability**. When you don’t need to have tons of individual settings, just download an npm package and use it with a few lines of code. It’s the same with sockets. In this case, let’s use [socket.io](http://socket.io/) as an example. It’s an open source version of various WebSocket implementations available both client-side and server-side. Sharing exactly the same code for all platforms, with automatic scaling and load-balancing across multiple machines, and just a crumb of code to work - everything out-of-box. There’s nothing more to say... Don’t hesitate to try it:\n\n```\n// Server\nimport http from 'http';\nimport express from 'express';\nimport SocketIO from 'socket.io-server';\n\nconst PORT = 80;\n\nconst app = express();\nconst server = http.Server(app);\nconst io = new SocketIO(server);\n\nio.on('connection', (socket) => {\n    socket.on('ping', () => {\n        socket.emit('pong', { alert: 'This is a sample message.' });\n    });\n});\n\nserver.listen(PORT, () => {\n    console.log(`Listening on *:${PORT}`);\n});\n\n// Client\nimport SocketIO from 'socket.io-client';\n\nconst io = SocketIO();\n\nio.on('pong', (payload) => {\n     window.alert(payload.alert);\n});\n\nio.emit('ping');\n```\n\nThe library I describe above is used by one of the most popular PHP frameworks, **Laravel**. Laravel Echo was built on the top of Node.js + socket.io and is their flagship real-time communication module.\n\n## Prototypes & MVPs in Node.js\n\nFulfilling the client’s requirements when delivering a prototype or MVP usually puts team members under time pressure. When time matters and we don’t need pixel-perfect quality, spending that time on architecture and planning does not lead to success. **Node.js**, with its npm and thousands of ready-to-use packages, allows a team to focus on useful development.\n\nUsually, at these stages of product development, Node.js can be used with boilerplate projects and default module configurations. Saving time by writing tiny, legible code and spending that saved time on individual needs is an excellent use case of Node.js.\n\n<RelatedArticle title={`Marble.js – new open source framework for JavaScript`} />\n\nEven more benefits can be achieved with a front-end written in JS. All kinds of APIs (e.g. **REST, GraphQL**) do not require additional procedures, like transforming JSON-to-object and vice-versa. Accessing all kinds of data looks exactly the same, which gives the ability to reuse code in accordance with coding standards.\n\nLet’s build a very simple **REST API**, mock up some predefined data from a .json file and share it via GET endpoint:\n\n```\nimport express from 'express';\nimport loadedData from './mock.json';\n\nconst app = express();\n\napp.get('/', (req, res) => res.json({ status: true, message: \"Hello world\", data: loadedData }));\n\napp.post('/', (req, res) => res.json({ status: false, message: \"Exception thrown! Check details argument.\", details: \"Place your details here\" }));\n\napp.listen(port);\n```\n\n## Command line tools in Node.js\n\nIf you need to write a small CLI tool or a big console application, usually you would use **C++**. This language has been used for this kind of projects for years.  But it requires a lot of time and skill, and the outcome is not always an adequate reward for the necessary effort. And here comes the Node.js part! The Node engine offers direct access to most of the useful functions and API layers for I/O or network operations. The lack of needed parts could be filled with repo resources from npm packages.\n\nAfter publishing to npm, CLI packages are able to download with -g flag. They can be used globally as standard executables built for their operating system. There is no need to add the package to PATH, as it is automatically saved to the node installation directory.\n\n**Comparing C++ and Node.js,** the first is better when it comes to performance, but the writing is surely more time-consuming. So, if you prefer a more friendly environment over performance, use Node.js. It is worth adding, that you can cross-use C++ binaries with Node tools, which makes things much easier.\n\n## Data scraping & automation in Node.js\n\nUnfortunately, not all website owners provide transparent, ready-to-use APIs. Manually copying and processing data periodically wastes a lot of time and is just annoying. The fact is that websites are built with HTML and JS. The first of mentioned of these is simple, structured data, which can be parsed by almost any programming language into its native objects. What about JavaScript? Well, we can manually recreate logical steps based on its code, but is it worthwhile? With Node, we have direct access to read, manipulate and execute JavaScript code in the browser. \n\n**The biggest advantage of Node.js, when it comes to data scraping, is that you can test your code directly in any browser.**\n\nThe libraries and ecosystem of Node.js offer the possibility of accessing a browser as a user, not a dev or machine. An entire DOM built with HTML can be crawled with standard jQuery syntax using the Cheerio library. Adding other modules (e.g. network communication, like request) enables the building of a complex scraping and automation structure. If you want to save time on repeatable steps and just focus on unique functionalities. Voilà!\n\nLet’s load the Google.com site and grab the alternative text for its logo, which is equal to the name of the current international day:\n\n```\nimport request from 'request';\nimport cheerio from 'cheerio';\n\nconst url = 'https://google.com/';\n\nrequest(url, (err, res, body) => {\n    if (err) {\n        return console.error(err);\n    }\n\n    const $ = cheerio.load(body);\n    const dayName = $('#hplogo').attribs.alt;\n\n    console.log(`Today we’re celebrating ${dayName}`);\n});\n```\n\n## Is that all?\n\n**Of course not!** Due to its flexibility and wide variety of open source packages, Node.js has almost the unlimited ability to make your development dreams come true. With its high  level of scalability, it can be used with applications of various sizes and needs. From small utility tools to big, complex web servers, Node.js is always lightweight and developer-friendly. Long story short, Node.js is that type of technology which just works without unnecessary effort. Yes, it may have some disadvantages (e.g. big data computing) but it is still worth giving it a try. \n\n<NewsletterSmall id={`article-bottom`} />"}],"job":null,"photo":null,"cover":"node.js_a_cover_photo.png","lead":"**When Netflix was optimizing its streaming platform with a backend written in Java, they decided to give a chance to an upcoming star: Node.js.** This light, modern, technology allowed them to drastically improve performance. The reduction of the entire server application startup time from 40 minutes to just 1 on such a VOD platform demonstrates its game-changing abilities perfectly.","templateKey":"article-page","settings":{"date":"March 01, 2019","slug":"what-is-node-js-used-for","type":"blog","category":"Tech"},"contributor":"Kacper Geisheimer"}}},{"node":{"excerpt":"","id":"8d37b599-7a71-566e-ae63-a2cbd9b38c3f","fields":{"slug":"/blog/5-git-commands-i-wish-i-d-known-about-when-i-started-coding/"},"frontmatter":{"title":"5 Git commands that will make your work smarter","order":null,"content":[{"body":"This is a common problem - a lack of detailed knowledge of how a solution can be used. I spent too much time trying to fix up failed merges, checking a list of parameters for some commands over and over again, and in long debug sessions that would be a lot easier and shorter with Git.\n\nI’ve made a list of 5 Git commands that are real life savers and I hope that some of them will help you to save your precious time.\n\n## 1. Bisect to the rescue!\n\nOnce in a while, you will find yourself in an annoying situation when one of the features in your app no longer works. Furthermore, after a brief investigation you are sure that none of the related code has been changed so that isn’t the cause of the malfunction. Your next option is probably a tedious debugging process, dealing with tons of code that may not even be related to the problem.\n\nThe good news is that Git offers a great debugging tool for this specific situation: git bisect.\n\nSo, what Git can do for you? It simply finds the particular commit that introduced the error. Our hero is called “bisect” because it carries out a binary tree search. Your role in whole process is to check whether the commit does contain an error or if the code is working fine.\n\n### Debugging with Git\n\nAt the beginning, you need to mark the current commit as “bad”, and mark the last commit that resulted in a fully functional feature as “good”. After that Git will pick a commit between these two and it's up to you to check whether this one is buggy or contains a working feature. It will recursively narrow the range as long as there is more than one commit left – the one you’re looking for.\n\nOf course it’s not only a valuable tool for tracing bugs, but will also help you to find the exact commit for any change in general.\n\nStart bisect and mark current commit as “bad”:\n\n`$ git bisect start\t\t\t\n$ git bisect bad`\n\nFind the latest commit that was bug-free, for example you can use git log with the –grep parameter to search for a commit with the feature name. After that you can mark the last commit that was working fine using its hash:\n\n`$ git log --oneline --all --grep='commit without bug'\t\n\td151996 commit without bug\n$ git bisect good d151996\n\tBisecting: 3 revisions left to test after this (roughly 2 steps)\n\t[15cfda61715d2d901ab7540078643e146b443dc6] \tsome commit 6`\n\nGit is now in bisect mode, at this moment you are working on the  commit selected by Git from the range between commits marked as good and bad. Also, you will be provided with short info about how many commits are in the range and the number of steps to find the error.\n\nRun your tests, and mark the commits as good or bad according to your results.\n\n`$ git bisect bad\t\n\tBisecting: 1 revision left to test after this (roughly 1 step)\n\t[33023a856796c74c12915b55434f88d7602c555a] some commit 4\t\n$ git bisect good\n\tBisecting: 0 revisions left to test after this (roughly 0 steps)\n\t[1c307570ac1b424fa58ea83c5dde3cd7316a3438] some commit 5\n$ git bisect good\n\t15cfda61715d2d901ab7540078643e146b443dc6 is the first bad commit\n\tcommit 15cfda61715d2d901ab7540078643e146b443dc6\n\tAuthor: User <user@example.com>\n\tDate: Wed Mar 13 15:25:20 2019 +0100\n\t\tcommit 6`\n\nAfter you find the right commit, you can get back to your previous branch state with:\n\n`$ git bisect reset`\t\n\n### Set appropriate tags for marked branches\n\nSometimes it may be a little bit confusing to call commits either “bad” or “good” especially if we are just searching for a change in the application. \n\nIn this case, you can use “old” and “new” instead, or even include your own marks for clarity. Let’s assume that we want to track a commit where one of the project dependencies changed, we can mark old and new commits using more accurate names to make it easier to properly mark each commit:\n\n`$ git bisect start --term-old spring4 --term-new spring5\t\t\n$ git bisect spring5`\n\n### Run scripts for automatic testing\n\nPerforming tests to verify if the commit under review meets our requirements may take some time. It is possible to introduce automation to the process with the “run” command. For each iteration, Git will run the given command and mark commits as good or bad according to the script return code.\n\nLet’s consider this scenario: after pulling the latest commits from the repository you are no longer able to build your application. Maybe you need to tweak a configuration of your local environment? The easy way to find the exact cause may be to mark the last commit you were working on as “old” and the latest one as “new”. After that you can just use the run command to find the last working build for you:\n\n`$ git bisect start\n$ git bisect bad\n$ git bisect good c72ac\n\tBisecting: 3 revisions left to test after this (roughly 2 steps)\n\t[b99f7cb7a35e5d8eb3a6a328ca4419a239b1a9dd] \tNon breaking change 3\n$ git bisect run ./gradlew clean build\n\trunning ./gradlew clean build`\n\nAnd that’s it! Git will now recursively bisect the given commit range and run a clean build for each selected commit. As a result, you’ll be notified of the first commit that is breaking your build.\n\n`576faa87e99fc29d20218529e92a9b652b6de78f is the first bad commit\n...\nbisect run success`\n\n## 2. Undoable things with reflog\n\n_“I broke my repository, what should I do?”_ \n\nI think the first step you need to take in most most cases is to check your reflog.\n\nWhat is that and how is it different from the regular git log?\n\nGit log is supposed to keep track of our commits history. It contains information about branch, author and everything that could be helpful for checking the history and current state of the branch.\n\nAs the name may suggest, reflog keeps information about changes to references. It allows you to check a list of all actions in the local repository. And with that knowledge, we are able to undo a lot of changes that could be very painful to fix, like a deleted local branch. \n\n### Restore deleted branch\n\nGit does its best not to lose any data, so you should be still able to restore your lost work. Check your reflog to find the latest commit for the deleted branch; it should be marked with a commit hash. You can use it to create a new branch based on that commit and merge it or continue with further development.\n\n`$ git reflog\n\t949bea0 (HEAD -> master) HEAD@{0}: checkout: moving from feature-branch to    \tmaster\n\t2e373ae HEAD@{1}: commit: changes from feature branch\n\t949bea0 (HEAD -> master) HEAD@{2}: checkout: moving from master to \t\tfeature-branch\n$ git checkout -b restored-feature-branch 2e373a\n\tSwitched to a new branch 'restored-feature-branch'`\n\n### Split commit after using amend\n\nTo take another case, let's assume that you have done some work on a feature branch and instead of creating a new commit you amended it for the previous one. For the sake of keeping a clean Git history, you want to split the commit into two separate ones. Simply check in reflog for the reference to the state before the amendment and do a soft reset. As a result, you will have amended changes staged and waiting to be committed separately to our repository:\n\n`$ git log --oneline -n 2\n\t82de5a6 (HEAD -> master) new feature\n \t949bea0 some changes in master branch\n$ git reflog\n\t82de5a6 (HEAD -> master) HEAD@{0}: commit (amend): new feature\n\ted8b56f HEAD@{1}: commit: new feature\n$ git reset --soft HEAD@{1}\n$ git commit -m 'another feature'\n\t[master b2c24b0] another feature\n\t1 file changed, 1 insertion(+)\n$ git log --oneline -n 2\n\tb2c24b0 (HEAD -> master) another feature\n\ted8b56f new feature`\n\n### Revert rebase operation\n\nThis works the same for reversing git rebase. After carrying out a rebase we find our commits attached at the end of the base branch. Basically, you can use reflog to check the last state before the rebase and use a hard reset to restore the previous state.\n\n`$ git log --oneline -n 2\n\t64eef74 (HEAD -> feature-branch) code from feature branch\n\ta4e78e2 (master) new code in master branch\n$ git reflog\n\t64eef74 (HEAD -> feature-branch) HEAD@{0}: rebase finished: returning to \t\trefs/heads/feature-branch\n\t64eef74 (HEAD -> feature-branch) HEAD@{1}: rebase: code from feature branch\n\ta4e78e2 (master) HEAD@{2}: rebase: checkout master\n\t1ecb24d HEAD@{3}: checkout: moving from master to feature branch\n\ta4e78e2 (master) HEAD@{4}: commit: new code in master branch\n$ git reset --hard HEAD@{3}\n\tHEAD is now at 1ecb24d code from feature branch\n$ git log --oneline -n 2\n\t1ecb24d (HEAD -> feature-branch) code from feature branch\n\tb2c24b0 another feature`\n\nOf course this works not only for rebase but also for merge, reset and so on!\n\n### ORIG_HEAD\n\nOne last but not least useful trick: as long as you have not carried out any further operations on your branch, you can easily bring up the previous state without searching for the right reference in reflog. All complicated operations like the above mentioned rebase or reset will set the reference ORIG_HEAD to its previous HEAD state, so you can simply revert almost everything with:\n\n`$ git reset --hard ORIG_HEAD \n\tHEAD is now at 1ecb24d code from feature branch`\n\n## 3. Git Stash\n\nSometimes you need to change your focus from the task you are working on to something with a higher priority. When the work has not yet been finished or would even cause the project in its current state to crash, you don’t want to commit that into your branch. Of course, you can create a temporary commit or branch and bring it back after you finish working on the urgent hotfix but it’s not very convenient. Git offers a great feature for stashing your code without unnecessary effort.\n\n### Keep your uncommitted changes\n\nGit stash basically creates a record of your current changes and brings back the clean branch. After that, you can safely check out other branches or start working from the beginning on the current one. It can be also useful when you want to try a different approach for solving a problem and want to be sure that the previous solution can be easily restored. Simply use git stash (which is just a short form of git stash push) to store changes and display everything stored in stash with git stash list.\n\n`$ git stash\n\tSaved working directory and index state WIP on master: a4e78e2 new code in \t\tmaster branch\n$ git stash -u -m'untracked files'\n\tSaved working directory and index state On master: untracked files\n$ git stash list\n\tstash@{0}: On master: untracked files\n\tstash@{1}: WIP on master: a4e78e2 new code in master branch`\n\n### Restore your stashed code whenever you want\n\nRestoring your code is also very simple. There are two possible ways for bringing back your changes. the first one is to use git stash pop stash{0} – this will restore your latest stash. Instead of 0 you can use any stash reference. If you don't use a reference, Git will pick up the latest one by default. Alternatively, you can restore changes with git stash apply stash{0}; the reference is also optional for this command. The difference between these two is that pop not only applies changes but also removes them from the stash list. \n\nYou can remove a single stashed record with git stash drop, or remove all records at once with git stash clear.\n\n`$ git stash list\n\tstash@{0}: On master: readme\n\tstash@{1}: WIP on master: a4e78e2 new code in master branch\n\tstash@{2}: On master: untracked file\n\tstash@{3}: On master: some code\n$ git stash pop\n\t...\n\tDropped refs/stash@{0} (9523d8c55a84e6aceb05346e2d42d1a6166f4bf4)\n$ git stash list\n\tstash@{0}: WIP on master: a4e78e2 new code in master branch\n\tstash@{1}: On master: untracked file\n\tstash@{2}: On master: some code\n$ git stash pop stash@{2}\n\t...\n\tDropped stash@{2} (9c829eace30f94c39a7eafc250494e2df4306c1c)\n$ git stash list\n\tstash@{0}: WIP on master: a4e78e2 new code in master branch\n\tstash@{1}: On master: untracked file\n$ git stash apply stash@{1}\n\t...\n$ git stash list\n\tstash@{0}: WIP on master: a4e78e2 new code in master branch\n\tstash@{1}: On master: untracked file\n$ git stash drop stash@{1}\n\tDropped stash@{1} (bf0271ac3b38f29556df9af2e39564635b6dac85)\n$ git stash list\n\tstash@{0}: WIP on master: a4e78e2 new code in master branch\n$ git stash clear \n$ git stash list\n\t...`\n\n## 4. Undo your changes\n\nActually, this is three Git commands for the price of one. All three are really basic, but for new Git users it can be a little bit confusing which one should be used.\n\n### Revert\n\nThis command reverts the changes introduced by particular commits. This might be a change that introduced some undesirable behavior or something that you only intended to add temporarily. Of course, it can be any other commit that you want to remove for some reason. Type git revert and list all the commits that should be undone. Git will create one commit that will remove all changes introduced by those commits passed as a parameter.\n\n### Reset\n\nThe purpose of reset is to take your branch history back to a particular commit. It can also be used to remove changes that have not been committed yet. Git reset can be executed in three different modes:\n\n`$ git reset –soft`\n\nThis one will reset the HEAD to a particular commit, but all changes will remain in the staging area. This means that these changes are ready to be committed again.\n\n`$ git reset –mixed`\n\nThis is the default mode, it’s not required to pass parameters. Changes will not be staged after reset, but will be kept in the work tree, so you can manually pick which files you want to stage and commit.\n\n`$ git reset --hard \n\tHEAD is now at ee1164c last commit`\n\nIf you want to discard all changes without preserving data in the working tree, use –hard mode.\nYou don't need to point to an exact commit to perform this reset, you can also use a reference relative to current the HEAD.\n\nTo reset the last commit:\n\n`$ git reset HEAD^\n\tUnstaged changes after reset:\n\tM\tfile_changed_in_last_commit`\n\nTo reset the last three commits:\n\n`$ git reset HEAD~3\n\tUnstaged changes after reset:\n\tM\tfile_changed_in_last_commit\n\tM\tfile_changed_two_commits_ago\n\tM\tfile_changed_three_commits_ago`\n\nIf you don't provide a commit hash or a reference, the reset will affect only your current staging area. Soft reset won’t change anything in that case, mixed will remove changes from the staging area, and finally hard will discard all changes that have not been committed yet.\n\nAnd if the reset goes wrong you can always count on _ORIG_HEAD_ and reflog.\n\n### Clean\n\nThis third one is used for cleaning the working directory. It will remove all untracked files, but will preserve all repository files.\n\n``$ git status\n\tOn branch master\n\tUntracked files:\n\t  (use \"git add <file>...\" to include in what will be committed)``\n\n\t\tuntracked_file\n\t\tuntracked_file_2\n\n\tnothing added to commit but untracked files present (use \"git add\" to track)\n``$ git clean -f\n\tRemoving untracked_file\n\tRemoving untracked_file_2``\n\nThere is bunch of useful parameters that makes clean more powerful. For example you can remove all untracked and ignored files excluding jar archives (-x for including -e for an exclude pattern):\n\n``$ ls\n\tapp.jar  app.war  code  untracked_file\n$ git status\n\tOn branch master\n\tUntracked files:\n\t  (use \"git add <file>...\" to include in what will be committed)``\n\n\t\tuntracked_file\n\n\tnothing added to commit but untracked files present (use \"git add\" to track)\n``$ git clean -f -x -e'*.jar'\n\tRemoving app.war\n\tRemoving untracked_file\n$ ls\n\tapp.jar  code``\n\n## 5. Git Aliases\n\nAnother thing that can be very useful on a daily basis are Git aliases. If you often use the same set of Git commands, especially with long sets of parameters, you can make life much easier by setting up aliases for them.\n\n### How to set up an alias\n\nTo set up an alias you need to use git config and provide an alias name and the command that should be executed:\n\n``$ git config --global alias.unstage 'reset HEAD --'``\n\nYou can list all available aliases with get-regexp config parameter:\n\n``$ git config --get-regexp alias\n\talias.unstage reset HEAD --``\n\n### Some additional examples\n\nAdd changes to the last commit without changing its message:\n\n``$ git config --global alias.amend 'commit --amend --no-edit'\n$ git amend\n\t[master ca43c17] add file\n\tDate: Thu Mar 14 12:14:34 2019 +0100\n\t1 file changed, 0 insertions(+), 0 deletions(-)\n\tcreate mode 100644 file``\n\nDisplay a readable graph of Git history:\n\n``$ git config --global alias.graph 'log --all --decorate --oneline --graph'\n$ git graph``\n\t* 868aa22 (feature-branch) feature\n\t| * ca43c17 (HEAD -> master) add file\n\t|/  \n\t* cdc896b add git ignore\n\t* af1e063 initial commit\n\nOf course, you can also add an alias for listing all aliases:\n\n``$ git config --global alias.aliases 'config --get-regexp alias'\n$ git aliases\n\talias.unstage reset HEAD --\n\talias.amend commit --amend --no-edit\n\talias.graph log --all --decorate --oneline --graph``\n\n## Master your Git commands\n\nSome of the Git commands listed above are not ones you use on a daily basis but knowing about their existence and what they can do will certainly pay off. Some of them are more commonly used but if you don’t know their full possibilities, you will not be able to take full advantage of the potential of Git. I think that mastering our Git skills is very underestimated, given it is one of the most commonly used basic tools for any programmer.\n\n"}],"job":null,"photo":null,"cover":"5_useful_git_command.jpg","lead":"When I started my first project with Git, I learned how to use the basic commands that are listed in any tutorial. And I stuck with those for some time, because what else can you use Git for?","templateKey":"article-page","settings":{"date":"March 01, 2019","slug":"5-git-commands-that-will-make-your-work-smarter","type":"blog","category":"Tech"},"contributor":"Łukasz Mitusiński"}}},{"node":{"excerpt":"","id":"1ecc7b10-fe5e-58fb-a3db-55e65e2e1f87","fields":{"slug":"/blog/what-exactly-can-you-do-with-python/"},"frontmatter":{"title":"What exactly can you do with Python? ","order":null,"content":[{"body":"## Machine Learning and Data Analysis\n\nDepending on whom you ask you may see these two separated... or not. From a purpose standpoint it makes sense to separate ML and DA, but when talking strictly about technology, they share a lot of the stack. Given the fact that the base is the same, I'll put ML and DA in one shared basket, but be warned: it's a very, very large basket.   \n\n### Python for Data Analysis\n\nLet's start with the core of working with data: reading, writing and manipulation. There are two libraries you need to know to even get started: Numpy and Pandas.   \n\n**Numpy** stands for something like numerical Python and **Pandas** stands for... OK, I have no idea. It probably has to do with Python, analytics, data structures and stuff. Doesn't matter really, because Pandas just does the work.\n\nBut what work exactly? It introduces Pandas DataFrames - table-like collections of data and allows you to manipulate them in many different ways. Combined with Numpy, they are almost the ultimate duo for data cleaning, wrangling and manipulation.\n\n![developers ](/img/developers-720x.jpg)\n\nThen there comes **data visualization**. Python offers quite a few really good libraries here, but let's be honest: Matplotlib is the gold standard for visualization in data analysis. It's easy to use and works well with Numpy and Pandas. If you need nice-looking charts with no additional effort, Seaborn will probably be your tool of choice.   \n\nYour choice is not limited to Matplotlib and Seaborn though: if you come from R you'll probably find ggplot handy. There are also multiple other packages like Bokeh, Plotly or Geoplotlib.\n\n### Python for Machine Learning\n\nLet's now take a leap into pure machine learning, as that's usually the next step in our data-driven journey. Python offers a lot there, no matter what you want to achieve with your data. \n\nI would take **Scikit-Learn** as the primary tool here - it's packed with most of the popular Machine Learning techniques and algorithms, providing an easy to use, unified API for all of them. \n\nIf you'd rather go for neural networks and deep learning, try **Keras or TensorFlow**. These are very flexible packages that allow you to use pre-trained models or to take a deep dive into the world of computational layers, or - if you wish to - you can configure your neural network from scratch. \n\n<RelatedArticle title={`Speeding up e-commerce content moderation with Machine Learning based on Amazon Web Services`} />  \n\n### Python alternatives\n\nOK, let's stop here with Data Analysis and Machine Learning. There's one more question to answer though: what are the alternatives to Python? \n\nThe most common is **R**, an environment for statistical computing and visualization. Although R is easy to start with and gets a lot of love from Microsoft, it also has messy syntax (unlike Python) and is utterly slow. There’s also **Matlab** (with its open source clone: Octave), but its focus is mainly on academic research and I wouldn’t treat it as production-ready.\n\nOther alternatives include **Java, Scala, JavaScript **and other less common languages, but none of them can beat Python in terms of available libraries and a fast learning curve. Bottom line: if you want to work in the data science field, you’d better know Python!\n\n## Developing web applications\n\nDo you need a low-cost prototype web service? Or maybe you’ve committed to delivering a webpage next week and you haven’t even started? No worries, Python is here to help you. **With Django, Flask or Pyramid** you can build any type of web service you want, limited only by the effort and time needed for development.\n\nMoreover it doesn't really make a difference whether you prefer to have full control over the implementation or you just need a handy framework that will take care of all the low-level stuff, giving you the opportunity to focus on the business logic - Python always has something for you. Let's take a high level look at the most popular options here: \n\n<NewsletterSmall id={`article-middle`} />\n\n### Django\n\nAs you can read on the main page of the project: \n\n> > Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. \n\nThat kind of sums up the whole idea of this framework:** it lets you start quickly**; you can build a web service not worrying about stuff like database connections, user permissions, authentication, routing and so on. With the massive amount of available extensions, you can just focus on delivery. Period. \n\nDjango has its cons though. The framework is rather massive and **makes a lot of decisions for you**. In other words: Django sacrifices some developer freedom to achieve its goal of rapid development. If that doesn't scare you away, take a deep dive into Django. Otherways, Python has something radically different for you. \n\n### Flask\n\nFlask is called a microframework and this name suits it very well. Decisions underlying its design are very different from those that inspired the Django developers. It is light and it gives you freedom of choice. \n\nOn the other hand - mind you, this is only my opinion - you need to put a bit more effort into the development if you need things like **authentication or REST API**, therefore it might not be the best fit for large web applications.   \n\n### Pyramid\n\nPyramid falls a little behind Django and Flask when it comes to counting headlines, but it's still a framework worth mentioning, because it aims to fill the middle ground between Flask and Django. \n\nIts purpose is to start small and finish big. It also doesn't try to make decisions for the developer (e.g. that's the only one of these three frameworks that doesn't favor a templating engine). It also encourages the developer to think about scaling services by putting a lot of attention on tests. \n\n![work space](/img/standing-work-space.jpg)\n\n## Automate the boring things\n\nDid you ever write a bash script that you used one time and then deleted? I bet you did. I did. \n\nHonestly I hate writing bash scripts (that's also true for Windows CMD and PowerShell!), but I love to automate the boring stuff. And that's one of the reasons I love Python - it can replace all the command line languages, helping you to be more productive. Due to the fact that Python is OS-independent it allows you to write one script that will run on any OS you like. The same syntax, no matter where. \n\nAlso I find Python syntax more appealing than **bash or PowerShell**. It's faster to write, easier to read and debug. And that's still the same Python that lets you use ML or build web services. \n\nTherefore next time you're struggling with a script to bring order to your collection of photos, backups of your data on the external drive, or playing with Excel files, give Python a try. You won’t regret it. \n\n## Home automation\n\nYes, that's right: home automation is another area in which Python has found cozy niche. With a **Python-based home-automation** hub like Hass.io (www.home-assistant.io) and the Python-friendly Raspberry Pi, you can make your home smarter than ever before. \n\nIf you require a bit more low-level work, you may find MicroPython (micropython.org) handy - it's an open source Python compiler dedicated to running directly on microcontrollers. There's also an open source hardware board - called pyboard - that you can actually run Micropython scripts on.\n\nThat’s all very nice, but you may wonder what that gives you exactly. If you combine these hardware and software bits together you can make your home smarter than ever.\n\n<RelatedArticle title={`Predictive maintenance for wind turbines - an interview with Boldare’s machine learning engineers`} />\n\n## Web scraping\n\nEver wanted to have a detailed history of prices from an internet store? Or maybe you need to perform an analysis of a given topic (articles? tweets? FB posts?) You’ve probably already guessed it: Python is a perfect match for web scraping. It allows you to use handy low level libraries like Requests and Beautiful Soup, or just take a web scraping framework like Scrapy and build a whole web scraping platform. Whichever approach is your preferred one, you can get all the data quickly and with the minimal effort.\n\n## Why we used Python in our app for predictive maintenance for wind turbines\n\nIf you’re still not convinced, let me say that we’re using Python for our app for predictive maintenance for wind turbines. \n\nWe could have chosen another language, but let’s face it, there’s no other solution that would work so well with data acquisition and processing (Numpy+Pandas+SqlAlchemy), statistical modeling (Scikit-Learn, StatsModels), neural networks (Keras) - or even absolutely custom neural networks (TensorFlow low level API) - allowing us to make the output easily accessible via REST API (Flask). \n\n**\\>>> Sounds interesting?** [Check out our case study ](https://www.boldare.com/work/case-study-predictive-maintenance/)\n\n## Why should you try Python?\n\nLet’s wrap this article up. Python will become your good friend whenever you need data analysis, or when you want to try your hand at machine learning. \n\nBut because Python is so flexible and has a vast catalog of possible implementations, you can also use it for quick development of web applications which is pretty handy when you have to build a prototype or MVP for the customer. It will work perfectly fine when developing solutions for home automation or just for automation of rather dull stuff. Well, the list of Python uses is long, so just give it a try and check what Python can do for you."}],"job":null,"photo":null,"cover":"/img/developers-working-on-machine-learning-algoritm.jpg","lead":"When I told a fellow developer I was writing an article about **the applications of Python**, he told me: \\`It would be easier to list areas where Python doesn't apply\\`. I can't disagree with that. Python is used so widely nowadays, you can find it almost everywhere and that makes it a really **convenient language to learn**. Let's have a look at the popular (and some a bit less popular, but interesting) applications of Python.","templateKey":"article-page","settings":{"date":"February 27, 2019","slug":"what-exactly-can-you-do-with-Python","type":"blog","category":"Tech"},"contributor":"Mateusz Wyciślik"}}},{"node":{"excerpt":"","id":"17a0958e-87fb-568c-91ab-17183a611644","fields":{"slug":"/blog/face-validator-open-source-symfony3-facial-recognition-bundle/"},"frontmatter":{"title":"Face Validator: open source Symfony3 facial recognition bundle","order":null,"content":[{"body":"The system should also check if the face is sufficiently exposed, if the photo isn’t too blurred, and that the person in the photo isn’t wearing sunglasses. As a result, we’ve created **Face Validator**, an **open source Symfony3 facial recognition bundle**.\n\n<NewsletterSmall id={`article top`} />\n\n## **Research**\n\nOur project team hadn’t dealt with the issue of facial recognition before so we decided to approach this task methodically, starting with an analysis of possible solutions. First, we looked into the availability of readymade **facial recognition solutions** we could implement in our system at a relatively low cost. We came across a few that could potentially meet our expectations:\n\n* Lambda Labs Face Recognition API\n* OpenFace\n* Google Vision API\n* SkyBiometry\n* Amazon Rekognition\n* MS Azure Face API\n\nWe tested all of them in order to select the best one, taking into consideration various factors, including reliability, speed, and accuracy, as well as the costs of implementation and use.\n\n## Lambda Labs Face Recognition API\n\n![Lambda Labs face recognition API](/img/lambda-labs-face-validator-article.png \"Lambda Labs offers face recognition API and album algorithm training. \")\n\nLambda Labs REST API allows, among other things, facial recognition in a photo sent as a URL to public storage. It also offers face recognition and album algorithm training (using collections of tagged pictures). When it comes to detection, you receive the coordinates of several points on the face and its size, as well as whether or not the person is smiling. Unfortunately, it provides no data on the level of blurring or face rotation and it doesn’t detect whether the face is covered by something.\n\nIn the free version, you get 1,000 face detection requests and 1,000 facial recognition requests.\n\nAfter analyzing and testing this solution, we came to the conclusion that the data provided by this API is not sufficient to create a complex face validator. Besides, the free trial – in comparison with other competitive solutions – doesn’t offer enough requests.\n\n## OpenFace\n\nAnother solution we considered was OpenFace. This is an open source library written in Python which provides a convenient API for photo pre-processing (preparing photos for use in neural networks), model training, and classification. It’s a really flexible tool which can be useful both in facial recognition and clustering. It contains ready mechanisms which make it easier for developers to use neural networks for these purposes. It also provides pre-trained models which can shorten the training process. Also, thanks to its use of the Torch framework, actions that require high computing power are transferred to the graphics card.\n\nOpenFace is certainly a great library which considerably simplifies the use of advanced tools for face classification, but facial detection and recognition itself is a problem of a slightly different nature and cannot be easily handled by this tool.\n\n<Iframe url=\"https://www.youtube.com/embed/LZJOTRkjZA4\" width=\"560\" height=\"315\" />\n\n## Google Cloud Vision API\n\nGoogle Cloud Vision API (REST, RPC)  enables the detection of one or more faces in a photo sent directly as payload or as a URL to public storage. It offers details concerning the location of particular elements of the face in the picture in the form of coordinates. Besides this, it also provides information about the size and location of the square which contains the face and additional data, including the level of rotation in three axes and the emotions which have been recognized – joy, sadness, anger, and surprise. You can also learn what the levels of blurring and exposure are and if the person is wearing a hat.\n\n![Google Cloud Vision Api](/img/cloud-vision-api-face-validator-article.png \"Google Cloud Vision API enables face detection\")\n\nThe free version of the API offers, just like Lambda Labs, 1,000 requests per month. Face detection in Cloud Vision provides a lot of details about the location of particular points in the picture, which is very useful but not actually necessary for a validator. The levels of rotation, blurring, or exposure are undoubtedly positive features of this tool. There is no information about sunglasses, though. In fact, this API could be a good engine for our validator but we haven’t chosen it due to the small number of requests available in the free trial when compared to other solutions.\n\n## SkyBiometry\n\n![SkyBiometry ](/img/sky-biometry-face-validator-article.png \"SkyBiometry offers face recognition and detection\")\n\nThis is another REST API, offering two types of service: facial recognition and detection. In the case of face recognition, you can train the model with your own tags. What interested us more was the API/faces/detect method: after you send a photo as an URL to a public storage or within the payload, you receive information about the location of the most important parts of the face and the square outline, the angle of facial rotation in three axes, gender, estimated age, and the presence or absence of a smile. The API tells you if the person is wearing glasses too, differentiating between clear and dark lenses. Apart from that, it analyzes the person’s mood: anger, disgust, fear, joy, sadness, and surprise.\n\nIn comparison with the solutions analyzed above, this free trial looks more promising: you can send 5,000 reqs/month, 2,400 reqs/day, and 100 reqs/hour. SkyBiometry is a tool that can be successfully used to build a face validator, and the info it provides is really useful for our purposes. Still, there is no data about blurring, exposure, or hats. The free trial seems sufficient for small apps with low traffic.\n\n<RelatedArticle title={`How to start a neural network with JavaScript in 5 minutes`} />\n\n## Amazon Rekognition\n\nAmazon offers a complex Rekognition REST API which uses neural networks for facial detection and comparison, detection of offensive content, recognition of the faces of famous people, and classification with the option of model training with your own photos and tags.\n\n<Iframe url=\"https://youtu.be/ttncG4gKIno\" width=\"560\" height=\"315\" />\n\nThe DetectFaces method allows you to detect all the faces in the payload photo or the one uploaded to S3 (PNG or JPG). For each face, the endpoint returns data concerning the estimated age (from… to…), square outline, coordinates of facial elements coordinates, face rotation in three axes, photo quality (focus and brightness), beard, mustache, smile, glasses (both corrective and sunglasses varieties), and emotions (joy, sadness, anger, confusion, disgust, surprise, and calmness).\n\nThe free trial offers 5,000 requests per month without additional daily or hourly limits. The data actually contains everything we could need to make a validator. The free trial, compared to the previous options, is the most profitable. This API seems to fit our profile perfectly and might help us build our validator. However, there is one solution left, offered by the Redmond giant.\n\n## MS Azure Face API\n\n![Microsoft Azure](/img/microsoft-azure-face-api-face-validator-article.png \"Microsoft offers face recognition features in the Azure Face API\")\n\nJust like most of the other solutions we’ve tested, Microsoft REST API offers both face detection and recognition. We’ve concentrated on the former to run our tests. The /detect API method for a JPEG, PNG, BMP, or GIF provides the following details: square outline coordinates, 27 face point coordinates, estimated age, gender, level of smiling, length of mustache, beard, and sideburns, type of glasses worn by the person (corrective, sunglasses, and swimming goggles), rotation in two axes, probability of emotions felt by the person (anger, contempt, disgust, fear, happiness, indifference, sadness, and surprise), hair color, baldness, makeup, face covering (if the person covers some element of his or her face, such as forehead, eyes, mouth), blurring, exposure, and noise.\n\nThe free trial offers 30,000 requests per month with a limit of 20 requests per minute. We’re really impressed by the number of details detected by Face API. Obviously, they contain all that our validator needs. Moreover, the free trial is more than enough for a small application.\n\n## Verdict\n\nAfter analyzing all the solutions, we decided to use the **MS Azure Face API** to build the face validator. Both in terms of the informativeness of the data and the price (or, actually, the options offered by the free version) made the Microsoft API an unrivaled choice. All the APIs were checked by us using sample photos. Face API proved to be reliable and fast when compared to the competition.\n\n## Implementation: Facial Detection Open Source Bundle\n\nWe implemented the Face Validator in the form of a reusable, open source Symfony3 bundle. The code has been written in PHP 7.1, however, we decided to temporarily remove any changes which are incompatible with 7.0 to enable as many potential projects as possible to add our library to their dependencies.\n\nOur goal was to make our list of dependencies short so that the solution could be used in projects based only on particular components of Symfony, not necessarily requiring the full framework.\n\nThe API client uses the Guzzle library, which is well-known and widely used by us.\n\nTo lighten the class of the validator, we’ve used a specification pattern to verify its particular conditions, so that the rules could be placed in separate, easily testable classes. Thanks to this approach, it is easier to expand the Face Validator with new conditions: you just need to add a new class implementing an adequate interface and register it in the dependency injection container.\n\n![Symfony 3 API](/img/face-validator-face-detection-open-source-software-symfony3.png \"Symfony3 offers open source API for face recognition\")\n\nMost classes have been tested by unit test. We’ve also managed to create an integration test, where a test kernel instance is built to test the functioning of the Face Validator in a working **Symfony3** app. The tests are isolated from the actual Face API and its responses are mocked in order not to determine the test results by an external API.\n\n[The source code is available at our GitHub](https://github.com/boldare/xsolve-face-validator-bundle).\n\nIn README.md, you can find brief documentation containing a description of the Face Validator’s options, installation, and configuration.\n\nFeel free to use it in your own projects, to contribute, and to share your own reflections, comments, and ideas. Your feedback is really welcome!"}],"job":null,"photo":null,"cover":"/img/facevailidator.jpg","lead":"Have you ever used an application to upload a profile picture? Sure you have. That picture then shows up with every reference to the user. In the systems we create, this function is a frequent requirement and as such, we’re used to it. However, recently we’ve been working on an app with an added requirement: **the system must verify whether the photo sent by the user really contains a human face.** What else is important?","templateKey":"article-page","settings":{"date":"February 13, 2019","slug":"face-detection-open-source-symfony3","type":"blog","category":"Tech"},"contributor":"Paweł Krynicki"}}},{"node":{"excerpt":"","id":"a662207b-eeea-5020-8b5e-7063b88e066f","fields":{"slug":"/blog/people-dont-buy-products-people-buy-meanings/"},"frontmatter":{"title":"People don't buy products. People buy meanings","order":null,"content":[{"body":"## We must think about technology more comprehensively\n\nFor decades, innovation has been identified as technological progress based on efficiency and production speed. Quality was no longer a top priority - it was still mandatory, but not strategic. Moreover, the last ten years can be broadly viewed as the _\"Rise of the Developer\"_, as power shifted from management to the hands of coders. \n\nThis marginalization of the value of design resulted in a specific understanding of innovation, driven by two general strategies:\n\n1. Groundbreaking technologies generate developmental leaps in product performance.\n2. Users' needs analysis drives the improvement of products. \n\nThe first strategy is the domain of** radical innovations** caused by technological jumps; the second applies to innovations induced by market demand. \n\nHowever, this doesn't mean that technology has been disconnected from user needs. R&D teams have always been more than aware that technology is developed for humans and humans are the ultimate subject of a technological shift. \n\nAnd so, in the last few years, a **user-centered approach** to technology development has resulted in a better understanding of how customers use objects. However, in the studies on radical innovation, the analysis of **MEANINGS** was missing. \n\n<RelatedArticle title={`What is Design Thinking`} />\n\n## User-centered innovation based on meanings\n\nPeople buy meanings. This hypothesis, formulated by Roberto Verganti in _\"Design Driven Innovation: Changing the Rules\"_, is a clue to understanding that in the Digital Age, a simple realization that technology and humanism have to be combined is no longer enough. We must consider HOW to incorporate this user-centered thinking into organizations' processes and **innovation creation**.\n\n> ... people do not buy products but meanings. People use things for profound emotional, psychological and sociocultural reasons as well as utilitarian ones.\n\n<BlogQuoteAuthor text={`Roberto Verganti`} />\n\nThat perspective marks a clear path to **innovation management.** If people use products or objects due to emotional, psychological and sociocultural motivations, among other reasons, then companies have to look beyond features and performance and embrace the **true meanings given to products **by users. \n\nAs clear as it is, this path isn't easy to walk. Meanings are not something we can control or plan for without realizing what their true source is:\n\n1. Meanings result from cultural context, social environment, habits, norms and associations. \n2. Meanings can't be inspired or created without including these subtle contexts.\n\nYou can't achieve true innovation merely by technological advance. Innovation needs to be based on **radical internalization of meanings**. Providing users with a better interpretation of what they already have is not enough. Providing them with a prettier object is not enough. Companies have to propose new meanings - products which resonate with people’s needs and improve their well-being. \n\n**Innovation has to be design-driven.**\n\n![product design ](/img/22.jpg)\n\n## Does design-driven innovation generate value?\n\nYou may think: ok, meanings, design, all good. But how can it help innovating in business? Is this radical design-driven innovation applicable here and now? \n\nThe quick answer is: YES. Design-driven strategies generate real value for businesses. Let's look at the McKinsey Design Index. [According to a study](https://www.mckinsey.com/business-functions/mckinsey-design/our-insights/the-business-value-of-design?cid=soc-app) conducted with three hundred companies over five years, there is an undeniable link between financial performance and how strong they are at design.\n\nThe study notes that companies from the top-quartile of the **McKinsey Design Index** have higher revenue and higher total returns to shareholders:\n\n![McKinsey Design Index](/img/mckinsey-design-index.png)\n\nHow can companies **benefit from a design-driven approach**?\n\nBy incorporating design strategies based on four principles:\n\n1. Analytical leadership. Design is a top management issue, and its performance has to be assessed with the same rigor as revenue and cost tracking. \n2. Cross-functional responsibility. User-centered design is everyone's responsibility.\n3. Continuous iteration. Listening, testing and iterating with the users.\n4. User experience. Physical, Digital and Service design treated as a whole. \n\nAnd now let's add to this formula the **actual realization of meanings**. In practice, it just means that instead of copy-pasting the technical specs from the last product, you need to map the customer journey, gather and analyze customer insights, and most importantly, understand them on a deep level.  But, according to McKinsey:\n\n> Yet only around 50 percent of the companies we surveyed conducted user research before generating their first design ideas or specifications.\n\nSuperficial incorporation of just thinking about design is not enough to be a real catalyst of innovation. It is one thing to know what is necessary, but it is an entirely different matter to actually start implementing the change. \n\n## Design is not what it looks like and feels like. Design is how it works\n\nThis quote from **Steve Jobs** is often repeated without a deeper understanding of what it stands for. In the context of radical innovation driven by design, this sentence should end with _\"...and what it evokes.\"_\n\nOnly companies which make an effort to identify how design can impact users on a more profound level - their reactions and emotions, and the causes - will be ready to embrace the Digital Age.\n\nIt is not that difficult to find specific examples of innovation driven by design in recent history. Let's see how design has impacted **the PC industry**. Apple was one of the first companies which were building personal computers and at the same time paid attention to how they looked. The Windows-based PC market didn't follow this trend and was shipping perhaps functional, but ultimately ugly devices. \n\n![Mac](/img/11.jpg)\n\nAt some point, customers began to want something more than just specs. The rise of the ultrabooks segment was the first step toward embracing the need for design in the way that Apple had. Now no one wants an ugly laptop, and companies compete not only with specs but also with design. \n\nWhat is even more critical to an understanding of this change is that the implementation of design principles didn't result only in delivering prettier computers to customers. It has **triggered new needs** among users and stimulated demand for beautiful personal computers among different types of customer. People want to satisfy their unique needs by possessing a well-designed device, especially when this device makes them **FEEL** better. \n\nThat is precisely how we need to think about design. It is not just making things more beautiful or more desirable but the design has to give a customer the space to give the object unique meaning. \n\n## With the rise of technological complexity, design becomes more crucial than ever\n\nThe disruptive innovations building the new digital economy 4.0, lead to entirely new problems of such complexity that new principles and processes are required. The network of factors to be considered evokes the need for a more holistic approach and thinking, to pull everything we know about the problem together, understand it and work out a solution. \n\nThe tool for that can be **design, understood as a decoder of meanings**. \n\n> Design principles are particularly applicable to problems that are socio-technical in nature, that is, they involve people and technology, having to deal both with complex technical, business and societal infrastructures and human behaviors.\n\n<BlogQuoteAuthor text={`McKinsey report`} />\n\nThe design which rethinks experiences from the ground up can help truly connect technology with the user - a human - in their full complexity and conditioning. \n\n![technology and humans](/img/33.jpg)\n\n## Technology without a design is an exclusion\n\nWhy is it so important to treat design as an integral part of innovation despite the temptation to reduce digital transformation merely to its technological aspects? \n\nI think that J**ohn Maeda** has provided the best response to this issue and a perfect summary in his _\"Design in Tech Report 2018\"_:\n\n> Computers aren’t good at inclusion. They’re good at exclusion because they’re only based on past data. The business opportunity for the future-thinking designer is in inclusion.\n\nThe idea behind this statement is that algorithms are based on historical data. But these data are very often flawed because they don't adequately reflect the current personal and sociocultural complexity of people. Relying only on historical data results in exclusion based on the fact that most of these data reference white, male users. As a result, algorithms working on these datasets to find patterns make faulty decisions. \n\nFrom a perspective in which innovation is driven only by technical progress, we limit ourselves to a **one-dimensional reality, sterilized from meanings**, far from what is really happening and what people really want and need. From a business perspective, it manifests in **products which don't meet customers needs** because they don't recognize them. \n\nWithout design as a decoder of meanings, innovation cannot be truly inclusive, nor radically progressive.\n\n<NewsletterSmall id={`article-bottom`} />"}],"job":null,"photo":null,"cover":"/img/cover.jpg","lead":"People buy meanings. This emerging perspective of thinking about products and their users is the key to understanding that digital transformation and innovation within companies cannot be accomplished with a merely technological push. It has to be driven by a structural approach to the idea that design and technology are both inextricably linked and equally important.","templateKey":"article-page","settings":{"date":"February 07, 2019","slug":"design-driven-innovation","type":"blog","category":"Ideas"},"contributor":"Anna Zarudzka"}}},{"node":{"excerpt":"","id":"95f1cc78-0016-5002-b2d9-074325c4687e","fields":{"slug":"/blog/how-much-should-you-pay-for-digital-product-development/"},"frontmatter":{"title":"How much should you pay for a digital product development?","order":null,"content":[{"body":"Imagine you’re in the mountains. Choosing a digital product development partner is like choosing a climbing partner. You can try to reach your goal with a random person you met online, maybe they’ll offer to chip in for the cost of the climb, but are you concerned about saving money or getting to the top safely?\n\n<RelatedArticle title={`This is how Boldare Development Teams process addresses your business needs`} />\n\nYour life can depend on your choice. **What matters most in the mountains is trust in your partner.** My instructor told me during a high-altitude hiking course that fear was normal, but there was no place for taking risks in the mountains; he would rather climb with a person who was afraid than with a person who rejected fear and made risky decisions, putting both partners in danger. Of course, any mountain trek has risks, so you must do everything to minimize them, including choosing the right partner. \n\n## How does it work business-wise?\n\n**Peter Drucker** once wrote:\n\n_“The attempt to eliminate risks \\[in business], even the attempt to minimize them, can only make them irrational and unbearable. It can only result in that greatest risk of all: rigidity”._\n\n**Just like going into the mountains, externalization of software development projects is risky and the choice of partner is crucial if you want to limit this risk**. Ideally, you’re looking for security and a long-term partnership but the wrong freelancer can disappear overnight, without any knowledge transfer, leaving your product on the rocks.\n\n### A fair price\n\nIf you want to hire a good specialist in Poland for a fair price, you need to know that nowadays, $10 for an hour of a programmer’s time does not guarantee that you have chosen the right partner. \n\nEven if you find a company (probably a body shop kind) offering a price of $10 to $25, keep in mind that the developer working on your product is likely to change employer sooner or later, especially now that globalization enables them to cooperate with any western company and receive a much higher salary.\n\nYou may say: “Ok, so what? My deal is with the company. They’ll replace them!” That’s true, but do you want to pay for the onboarding of someone new, waiting for them to get to know the product and then build a relationship from scratch?\n\n## How much is the professional approach?\n\nThe table below shows a cost analysis which I prepared based on information from several partner software companies in Poland. All of them treat their employees as the most valuable asset entrusted to clients.\n\n![How much should you pay for a digital product development - the cost analysis](Development_of_digital_products_cost_analysis.jpg \"Development of digital products - the cost analysis\")\n\nIt is worth checking out [the data published by Accelerance](https://www.accelerance.com/download-the-2018-guide-to-global-software-outsourcing-rates), which shows that an hourly rate for a senior developer from CEE is actually around $45 - $50.\n\n**So, what budget do you need in order to increase the probability of finding a motivated and committed team?** How much do you need to spend to reduce the risks arising from an external partner? Based on the above data, you can assume that it is worth talking with companies in the $38 to $67 per hour price range. Only then will you have a guarantee that you do not talk with a ‘body shop’ only interested in the amount on the invoice issued to you.\n\nAt first glance, you may think, “**Ok, but by employing a cheaper freelancer, I am paying half the price. So, even if they work twice as long, I will still have an advantage**.” Are you sure? Have you considered the cost of missing the best moment to enter the market and take advantage of a business opportunity? Take a look below to better understand why it is worth working with an organization that provides complex, digital solutions to a company rather than a freelancer.\n\n![Freelancer's costs versus qualities he provides](Freelancer_costs_versus_quality_of_his_work.jpg \"Freelancer's costs versus qualities he provides\")\n\nAs you can see, when choosing a freelance service, you basically only get “Knowledge” and “Tech Skills” for what you pay, and in today’s reality it is not enough to adequately respond to the needs of users and to the market. Note that when you work with a freelancer, you rely only, and I mean only, on them.\n\n**The experience, support and transfer of knowledge in the organization are incredible values that benefit the development team**. Every problem encountered while building your product can be solved using the knowledge, skills and experience of programmers working for the company. Thanks to their available synergy, companies are able to provide services of the highest quality and solve advanced problems, which would not be possible for a solitary programmer.\n\n### A low rate is a poor authenticating factor\n\nYour positive answers to the questions at the beginning of this article show that you know that when expecting quality, partnership and security, a low price should start alarm bells ringing. The requirements and dynamics of today’s IT market oblige employers to provide specialists with appropriate working conditions. The days when a programmer would be handed a task and just mindlessly code it are long gone. **The 21st century programmer is independent, has an impact on the product, proposes solutions, understands the needs of system users, and requires constant development in terms of hard and soft skills.**\n\n**Boldare adds a new dimension to digital product development services built on partnership and trust**. We believe that the effectiveness and motivation of our teams result not only from the remuneration itself but also from the development opportunity, organizational support, access to the best equipment and tools in an agile office and making the highest quality products to meet the needs of end users.\n\nYou want to test a business idea with minimum cost, time and effort? [See how to do it! ](https://www.boldare.com/work/case-study-boldare/)\n\n<NewsletterSmall id={`article-bottom`} />"}],"job":null,"photo":null,"cover":"img/webp.net-resizeimage-1-.jpg","lead":"**Ask yourself, what do you expect from your potential partner in a digital product development process?** Is it security for your business? Long-term business partnership? Fair price? High-quality services? **If you answered “YES” to all of these questions, you should definitely read on.** If not, then you probably like taking risks and enjoy a surge of adrenaline when picking a freelancer, but you should read on too, maybe there’s a better way.","templateKey":"article-page","settings":{"date":"February 01, 2019","slug":"how-much-should-you-pay-for-digital-product-development","type":"blog","category":"Strategy"},"contributor":"Paweł Kaiser"}}},{"node":{"excerpt":"","id":"5df42308-319e-5e86-b1df-42dcad8f925d","fields":{"slug":"/blog/choosing-digital-product-development-partner-political-and-economic-issues/"},"frontmatter":{"title":"Choosing a digital product development partner - the political and economic issues","order":null,"content":[{"body":"And no wonder as, very often, there is little difference in quality and customer service, and the quality/price ratio offers considerable financial benefits.\n\nWe live in a global village and it has long been accepted that contracting out digital product development work is an effective method to enable companies to acquire competence and generate significant profit. **Put simply, in-house teams are not a competitive advantage anymore.**\n\nAs IT specialists become ever more skilled due to high competition and simpler access to knowledge, the question arises: **why should a client from France, the US, or even the UAE choose Poland if similar service quality and lower prices are easily available elsewhere?**\n\nObviously, for companies looking for financial optimization only, the choice is simple; yet for those who consciously manage their product and business, not so much. What follows is the perspective of a Product Owner, the person responsible for the product development vision…\n\n<RelatedArticle title={`The 5 dares of functional testing an application in Arabic`} />\n\n## The political and economic situation\n\nIt is clear that the political and economic situation of the potential partner’s country affects your digital product. **Your team needs to feel safe and secure and work in a place where peace and financial stability are guaranteed**.\n\nImagine your team being unable to get to work or struggling with insufficient food supplies. Building a product in this type of environment is always risky and you must remember that most of your know-how is located where your remote team is located.\n\n## Energy security\n\nJust imagine a situation where **you cannot get in touch with your development team** and the release of an important functionality cannot go ahead on time **because of… a power cut?**\n\nThis may sound like something from the 1970s, but energy security is still a problem in some regions of the world. In our industry, electricity is the basis of anything we do: it must be reliable because when delivering a product, we cannot afford downtime, communication problems, or any lack of support at crucial moments.\n\n## Information security\n\nEvery couple of weeks, you can read news online about cyber-attacks directed at companies and institutions around the world. Unfortunately, such incidents are part of modern life and the reality is that some countries are more at risk than others. **Remember that your system and its sensitive user data need to be safe.**\n\n**Saving a few dollars when selecting a provider can eventually result in greater losses,** both in terms of your public image and your finances.\n\nOf course, no place on earth is actually 100% safe in this respect but you should still look to ensure a decent level of security to protect your data from cyber-attacks.\n\n## Easy direct contact\n\nThe most efficient collaboration is when there is no division between the provider and the client: we all form one team working on product development. **As Poland is an EU member and belongs to the Schengen Area, there are no barriers preventing European clients from visiting their partners in Poland and vice versa**. It is also much easier to visit to and from a country outside the EU if it has a signed international contract allowing citizens to enter the territory. Why is this so significant?\n\n![Communication is everything - also while working on digital product](/img/02262-_tst1290-2x.jpg \"Communication is everything - also while working on digital product\")\n\nTo create a successful product, the team must be reliable, well-integrated, and committed. Nothing builds trust better than a direct meeting. When deciding on a team to collaborate with, make sure you’ll be able to shake the hand of the developer who is going to provide your users with a valuable product.\n\n## Macroeconomics matter as well\n\nThe standard of living in most countries offering low prices is lower than in Poland or Western Europe, so young talented specialists often decide to work abroad. **Since the European market opened up to foreign employees, the best IT specialists can now be found in Poland** and other European companies.\n\nThink of the risk connected with the fact that if your team is located in a distant country, it can break up due to economic migration, and you will lose the technological know-how related to your product along with the team members.\n\n## While you were sleeping\n\n**Take time zones into consideration.** Sometimes even one hour’s difference between you and your team can be significant. If you’re planning to be regularly in touch with your developers, take notice of when they get up in the morning and go to bed in the evening. Especially at the beginning of your cooperation, intensive contact while working together on the product vision is just indispensable.\n\n## Summary\n\n**Don’t forget that product development is not merely about cost**. Of course, specialists all over the world are becoming equally skilled and when you read reviews of companies from various parts of the world on Clutch.co, equivalent quality at a more attractive price can be tempting.\n\nHowever, if you decide to collaborate with a digital product design and development company operating in a country whose political and economic situation is unstable, you must accept the risks and problems described above.\n\nThey will certainly have an impact on your product and business. **You will pay less but risk more – keep that in mind.**\n\n<NewsletterSmall id={`article-bottom`} />"}],"job":null,"photo":null,"cover":"img/video-call-at-conference-room.jpg","lead":"Until recently, Poland was the global leader for external software development services, but the latest trends indicate that the competition is growing. East-Central Europe, South Asia, and even Africa and South America have become increasingly popular as outposting destinations for Western companies.","templateKey":"article-page","settings":{"date":"February 01, 2019","slug":"choosing-digital-product-development-partner-political-and-economic-issues","type":"blog","category":"Strategy"},"contributor":"Paweł Kaiser"}}},{"node":{"excerpt":"","id":"a64966ec-0fd9-5528-a7f7-526540c87f49","fields":{"slug":"/blog/eres-yachting-designing-a-premium-online-booking-experience-for-luxury-travel/"},"frontmatter":{"title":"ERES Yachting - designing a premium online booking experience for luxury travel","order":null,"content":[{"body":"_This article is derived from a webinar titled, **Designing a premium online booking experience for luxury travel**, in which Boldare product designers Adam Chrobak and Paweł Capaja reflected on the ERES Yachting project and how the design approach was instrumental in delivering a highly successful product welcomed by the client’s users._\n\n## The bigger picture\n\nIt may be a cliché but it’s true: the world is changing, and so are the markets. In every industry sector, businesses are finding that [digital transformation](https://www.boldare.com/digital-transformation/) is real and happening. The line between products and services is blurring as our devices remind us, prompt us, and encourage us as we engage with digitally-enable businesses.\n\nThe travel industry was one of the early adopters of digital services, notably **online booking**, as shown by the now-classic examples of booking.com and Airbnb. The key to success in both cases was, and is, a clear and easy user experience and that was exactly the goal Adam and Paweł set themselves for ERES Yachting.\n\n<RelatedArticle title={`\"User satisfaction. User perspective. User-oriented approach\" - an interview with Paweł Capaja`} />\n\n## Step by step design\n\n### 1. The heart of the process\n\nImportant for both product designers was a simplicity of perspective or, to put it another way, _“The general rule in UX is not to overwhelm.”_ \n\nTempting as it may be to add more and more features, each more sophisticated and wonderful than the last, remember that the product is ultimately going to take their money so a better approach is to **keep things simple** and help them reach their goal as quickly and a smoothly as possible.\n\nFor this project, the initial focus was on the user’s **‘first contact’** with the system’s functionality: search and filter.\n\nThe search and filter function is essential to helping users find a yacht they want to book. It absolutely could not be over-complicated as both ERES and its users want to reach the point for booking quickly. And as the **Law of Hicks says**, _“The time it takes to make a decision increases with the number and complexity of choices.”_ \n\nThe solution lay in striking a balance between offering useful filter options yet maintaining the ease-of-use of the search function, and wherever possible offering short cuts to booking, such as highlighting special offers and promotions which help the user reduce the options available.\n\n![Eres Yachting design](/img/graf-1-simple-and-search.jpg)\n\n### 2. How to talk about the products\n\nContinuing the theme of keeping it simple, another key aid to use and user understanding is **the information the system provides **on each product option.\n\nOnce the user has found a possible yacht via the search function, they need to know more about how it will meet their needs (or not). They want to be assured of making the right choice and any difficulty at this stage can be a dealbreaker. \n\nFor the designers, this means laying out the yacht’s characteristics in a format that is easily found, read and understood; preferably followed by a booking call-to-action.\n\n### 3. The ‘crunch’ – the booking\n\nThe user has found their ideal yacht, all that’s left is the booking itself but... the project is far from complete; a** painful booking process is often enough to change a buyer’s mind **and by this stage, you need the user to trust you because they’re about to part with their money.\n\nThe core values Boldare’s designers kept in mind here were **transparency and predictability.** There should be absolutely no surprises when the time comes to book, so every price and cost is stated clearly, leading to a final total that by now is exactly what the user is expecting; including applying any offers, vouchers, etc.\n\n### 4. Feedback is the key\n\n**No, not feedback from the user, but to the user**. Throughout each stage of searching, deciding and booking, the system is designed to give feedback to the user, confirming exactly what they have done, and what must be done next. \n\nMessages are short but complete and designed with two purposes in mind: to move the user on to the next stage of the booking process, and to reassure them that everything in the transaction is going smoothly (or, if it isn’t, what they need to do to get things back on track).\n\n<RelatedArticle title={`Designing a simple search experience for a complex product with a luxurious interface`} />\n\n## The user interface – getting it just right\n\nThat was the design process followed by Boldare’s team but how does it look and feel from the **user’s perspective**? The answer depends on the user interface and for ERES Yachting, the goal was a **luxurious interface for an affluent audience**. With that in mind, Adam and Paweł selected two design techniques best-suited to the project, from the Boldare toolkit.\n\n**1. Product Persona** – Knowing who you are designing for is a fundamental starting point. In fact, one of the most important steps of every Boldare project (during the initial client workshop) is the creation of the ‘product persona’. \n\nThis is an imaginary character that will use the product, often based on real persons, consultation or market research. This imaginary user then serves as a **reference point for the designers**, checking the necessity of specific design features against what the product persona would like or use. \n\nA product persona is defined by a wide range of demographic data, including personal information, social activities, work behaviors, income and assets, preferred technology, and so on. For the ERES Yachting project, the product persona was, _“a reasonably rich man, over 40, with family, and a love of traveling, sailing, and nature”_.\n\n**2. Moodboards** – When deciding on the look and feel of a product, a moodboard is an incredibly useful method of presenting the client with snapshots of images, colors, and fonts that give a taste of what the design could be. For ERES Yachting, the team crafted three different moodboards for the client to choose from, each a different interpretation of the agreed design brief.\n\n![Eres Yachting moodboard](/img/graf-2-moodboard.jpg)\n\n## The secret ingredients: Teamwork & Communication\n\nBoldare is not structured in departments according to function, such as ‘design’ and ‘development’. Instead, a unique team is created and allocated to each project. This keeps the various elements of the design process closer together and allows for **rapid and direct communication between collaborating team members**, even when that communication amounts to hundreds or thousands of messages over the project life.\n\n**The team also includes the client**, in the shape of the Product Owner role, and the principle of fast, transparent communication equally applies to them. Not only is the Product Owner included in essential discussions, they have open access to every question, conversation, and agreement within the team, whether they were personally involved or no. \n\n![team work](/img/graf-3-teamwork.jpg)\n\n## The final design\n\nThe final booking platform was based on the design brief, client input, research, and of course, the agreed product persona and moodboard.\n\nEnjoyment of yachting is closely related to feelings and experiences, so the interface design reflects just that, using high-quality marine photos and details, and light, sophisticated fonts. \n\nFor the color scheme, they used subtle tones and elegant gold detailing. The other very important factor was the use of specific language tailored to the target user.\n\n**The result? **The feedback indicates it is a high-end luxurious interface for an affluent audience, with a completely fresh and attractive style.\n\n![Eres Yachting design](/img/graf-4-final.jpg)\n\n## Designing a premium online booking experience\n\nBoldare’s design team were faced with a challenging and highly specific brief: to create an online booking platform to appeal to the **luxury leisure demographic**. \n\nWith simplicity as the key, the team broke the user journey down into its component stages. Each stage received its own **design focus**, with the goal of a rapid but reassuring booking process. Tools such as moodboards and a product persona were critical in ensuring the finished product met the needs of both its target audience and the client, ERES Yachting.\n\n**\\>>> Want to learn more?** Check out:\n\n 1. [SlideShare](https://www.slideshare.net/Boldare/designing-a-premium-booking-experience-for-luxury-travel) \n\n2. [Video from webinar](https://www.youtube.com/watch?v=XMTQjctWVRc)\n\n<NewsletterSmall id={`article-bottom`} />"}],"job":null,"photo":null,"cover":"/img/coverfoto-blogpost-big.jpg","lead":"If there’s a single thread that runs through any design process – or should – it’s the product user. In the case of **ERES Yachting**, their users choose from a selection of more than 13,000 luxury yachts in nearly 500 global destinations. When the time came to shift the **booking process online**, ERES Yachting was searching for a state-of-the-art experience based on a straightforward customer journey, wrapped in an upmarket package. Boldare was happy to comply.","templateKey":"article-page","settings":{"date":"January 30, 2019","slug":"eres-yachting-designing-premium-online-booking-experience","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"356867d7-a9ea-5c30-9725-03f4e16f5804","fields":{"slug":"/blog/the-5-dares-of-functional-testing-an-application-in-arabic/"},"frontmatter":{"title":"The 5 dares of functional testing an application in Arabic","order":null,"content":[{"body":"In time, our teams, especially the testers, get used to how some words appear  in foreign languages. For example, after a few months on a project for a Danish client, all team members were perfectly able to distinguish key words and knew what the application was asking us to do in all modals, alerts and messages. \n\nBut the story is quite different if you have to deal with a language that has a **completely different alphabet** than your native one. There is no chance of getting used to it quickly, and the product still has  to be thoroughly tested.\n\nSo, what can you do if you have to test an application written in the **Arabic language**? I would like to share with you some advice based on two years’ experience in providing quality control for Arabic websites. \n\n![work on mac](/img/workingonmac.jpg)\n\n## RTL - what is it and why is it important?\n\nNo, it’s not a German TV channel! The main issue regarding developing and testing software for Arabic users is that they write from **right to left **(RTL stands for right-to-left orientation and is a common acronym). In Europe, and many other regions, we use left-to-right orientation. Therefore, almost everything written in an Arabic application is not placed on the side that you expect it would be.\n\nThis applies not only for the **text position**, but also graphical elements like **buttons and arrows**, as well as the direction for swiping or animations. \n\nUnfortunately, there is no other solution here other than to double the focus on accuracy during development and testing. \n\nWhat might be a bit comforting, is that with time **your understanding improves**. At some point, our team internalised the RTL orientation to the point when we were able to suggest changes in positioning of panels or graphs to the left side to the client’s **Product Owner.** \n\nFunnily enough, now our team members will probably have difficulties working on a project aimed at European users...\n\n<RelatedArticle title={`A step by step guide to Event Storming – our experience`} />\n\n## Translations beyond scheme\n\nContent translation can be tricky, especially in the case of such a unique language as Arabic. During the project, the Product Owner was providing the team with copy to implement. Still, we needed to verify that we were applying all texts and messages correctly to the website or mobile application. \n\nHow to** avoid common mistakes** regarding working with such a culturally different language? Here are some hints that you might find helpful. \n\nMost of all, you **need to cooperate.** Our Product Owner is an Arabic native speaker, so we asked her for help, a lot. For instance, we were only able to copy and paste the texts but sometimes we needed to type a word (e.g. while testing search-related functionalities). There was no other option than to ask someone who actually can do that to verify the behavior. \n\nAlso, sometimes it happened that we needed to use a word from a picture or something that was beyond our ability to write. It was a simple, and much more rapid, task for the Product Owner to provide us with such text. \n\n![product designer](/img/meeting-designer.jpg)\n\nAdditionally,** Google Translate became our number one friend**. Of course, the tool does not provide top notch accuracy (e.g. the Aseer region was translated as ‘difficult’, the city of Jeddah as ‘grandmother’, and other cities as: forehead, love us, try, he cried, stupid, or she smoked!), but it has two great advantages:\n\n1. It gives you the general understanding of the provided text.\n2. It helps to compare text provided in a user story with the one that is displayed to the end users. \n\nI will make a bet that when you were a kid you played a game that was about looking for differences between two pictures. That is how our testers sometimes approached the testing of translations. We **treated the sentences as pictures** and tried to spot the differences. Surprisingly, it worked perfectly most times, there were not many reopens throughout the product development.\n\n_For example_ - once, there was a case in which our Product Owner spotted that the last letter in the text was incorrect. It took us quite a long time to reproduce and spot this issue. Only when we pasted the expected copy, and the one that was in the application, one under another, and compared them, could we find the difference. And it was the only way to spot the error because, oddly, the search feature was recognizing the incorrect text as correct. \n\n## Graphs and numbers in functional testing\n\nYeah, I know, they use arabic numbers. But because of the **RTL orientation** we also had to change the graphs’ positions, and apply labels correctly (all signs such as %, labels for thousands and millions, currency symbols, etc. should be on the left side of the number).\n\nIt was extremely difficult to remember consistently and spot errors, especially without specific tasks related to this issue. **A good tip **is to remember about these small but significant details and have a look at them during exploratory sessions or when testing other issues.\n\nAlso, beware of **commas**, especially that they are different in Arabic than in English, and if you do not know about that it is difficult to spot the difference (',' to '،'.), however it matters both for text and number presentation.\n\n<NewsletterSmall id={`article-middle`} />\n\n## Application logic and data structure\n\nWe prepared test environments in two languages, so that we could compare the **English and Arabic variants**, although the product would not  have an English version on the production environment.\n\nIn the first phase of testing, it was easier for the team to use English names to verify the basic scenarios (for checking logic, not visual aspects and translations). Then, when we were sure that the positive scenarios worked, we tried to do the same steps with the Arabic version.\n\nAlso, it is a good idea to **compare your website with other Arabic services** in a similar business domain. So, if you test an ecommerce platform, then find an Arabic ecommerce platform you consider to be a benchmark to see how they present data to make sure that the information structure you’re testing includes the local context of users’ behaviors and habits. \n\n## Testing visual aspects\n\nLast but not least, **text appearance impacts on layout** so you cannot rely on an English version. Usually, what fits nicely at the design stage, causes some trouble when live. We decided to use the Arabic sample texts in our design, but still sometimes it was not the same as in the specification and required additional verification. \n\n<RelatedArticle title={`Introducing Data Visualization in D3 JavaScript library`} />\n\n## Functional testing in Arabic - how to ensure the quality of the product\n\nBuilding a digital product for a specific market and region, so different from your own, is always a challenge. To ensure **the quality of the product,** not only a QA specialist but the whole development team has to channel their efforts on the product and treat it as if it was their “own.” By **open and immediate communication** with the client and by following the scrum process and the tips in this article, you can overcome issues specific to the market; in this case, the MENA region. \n\nAnd** it works both ways**. When a company decides to outsource the development of a digital product to a provider from outside its cultural and linguistic circle, it has to consider many critical factors in this decision. One of them is language and correct implementation of the content by the external development team. Especially given that content is what helps to attract users.\n\nThat is why, in the search for a **well-matched business partner,** the experience of the development team in building and testing digital products targeting a specific region, and its willingness to engage in honest communication and big-sky thinking, is a crucial factor."}],"job":null,"photo":null,"cover":"/img/openspace-work.jpg","lead":"In the era of the digital economy 4.0, IT companies are building digital products for clients from around the globe. At Boldare, we help business from almost every region, from North America to the MENA. Globalization requires that **software QA experts **test software applications not only for English-speaking users (which is rather obvious these days) but very often in French, German or even **Arabic**.","templateKey":"article-page","settings":{"date":"January 29, 2019","slug":"5-dares-of-functional-testing-in-Arabic","type":"blog","category":"How to"},"contributor":"Natalia Kolińska"}}},{"node":{"excerpt":"","id":"ffad3fbb-e3e1-5785-9d35-95ce10a13143","fields":{"slug":"/blog/2018-at-boldare-the-story-of-great-changes-in-ten-graphics/"},"frontmatter":{"title":"2018 at Boldare: the story of great changes in ten graphics","order":null,"content":[{"body":"What did the last 12 months look like and what are we especially proud of? To answer that, we have prepared ten graphics illustrating Boldare's **most significant achievements** in the past year. \n\n## 1. Chilid and Xsolve merger\n\nThe most groundbreaking achievement of the last year can be described with a simple equation: \n\n> **1+1=3**\n\nThis equation explains exactly what happened when **XSolve** and **Chilid**, two sister companies, decided to merge and became one organization - **Boldare**. \n\nThis merger wasn't a simple union of two companies but an innovative mix of experience, processes, business domains, human talents, and unorthodox approaches which established an organization combining **radically user-oriented design** with **cutting-edge software services** to build human-centered digital products. \n\n**\\>>** **Read more about this merger in this article:** [When two become one — the story of Boldare.](https://www.boldare.com/blog/the-story-of-boldare/)\n\n![Xsolve and Chilid merger](/img/1.jpg)\n\n## 2. We have a great new offer - Full Cycle Product Development\n\nAt Boldare, we want to help our customers to fulfil their business needs and to build truly meaningful and** human-oriented digital products**. Thanks to the natural union of XSolve and Chilid, we now can leverage the full potential of our organization and our people and offer **full cycle product development**. \n\nOn this path to the perfect digital product, we use a [lean approach](https://www.boldare.com/blog/lean-process-for-better-product/) and guide our customers through four stages: **Prototyping, Minimal Viable Product, Product-Market Fit **and** Scaling**. For every step, we have dedicated development teams working in Agile and ready to help our customers reach their goals. \n\n**\\>>**[ Learn more about Full Cycle Product Development](https://www.boldare.com/full-cycle-product-development/)\n\n![full cycle product development](/img/baner-8.jpg)\n\n## 3. Machine Learning at Boldare\n\nIn the upcoming **digital economy 4.0**, machine learning and artificial intelligence will play a leading role. By the end of  2025, the revenue from the AI market worldwide [will likely reach $59 billion](https://www.boldare.com/blog/machine-learning-digital-product-costs/). Almost every business aiming to gain or preserve a market position will have to consider the use of machine learning. \n\nAt Boldare, we understand the market’s needs. Therefore we consider **machine learning** as one of our pillars with regard to digital product design and development. We have established a **dedicated, interdisciplinary machine learning team** working on developing solutions for predictive maintenance in the wind energy sector (read our case study [HERE](https://www.boldare.com/work/case-study-predictive-maintenance/)), inventory automatization, and much, much more. \n\n**\\>>** [Explore our Machine Learning services](https://www.boldare.com/machine-learning/)\n\n![machine learning](/img/2.jpg)\n\n## 4. We expanded our technologies\n\nMachine learning is essential, but we want to always be at the forefront of change to accurately and rapidly respond to market needs. That is why in 2018 we have **strengthened our web technologies **by adding, among others, **Django** and **Python** to our vast offer of programming solutions. \n\n**\\>> You can check all our technologies** [HERE](https://www.boldare.com/#technology).\n\n![django and python](/img/baner-6.jpg)\n\n## 5. We helped build 30 new digital products.\n\nIn the last year, we have helped clients from 10 countries to materialize their business needs in the form of digital products. We have built or have started to build **30 products **for clients representing a variety of different industries and different regions on our planet. \n\nWe worked with [Sonnen](https://www.boldare.com/work/case-study-sonnen/) from Germany and [Takamol](https://www.boldare.com/blog/case-study-tojjar/) from Saudi Arabia. We built custom solutions for the **solar energy storage industry** and **e-commerce platforms **dedicated to boosting local economies. We are proud of our work and of the clients with whom we work. \n\n**\\>> Check out some of our** [case studies](https://www.boldare.com/work/) **to learn more about the work we do**\n\n![digital products](/img/30-projects.jpg)\n\n## 6. Eleven awards for Boldare and counting\n\nIt is always a pleasure when your work is appreciated. At Boldare, we are proud of our work and thrilled when our products are widely acknowledged. These 11 awards prove t**he value of our processes **and our ways of thinking about **cooperation with clients**, and also validate our approach to  building digital products, focusing on the user and their needs. \n\n**\\>> If you would like to see our award-winning products, visit **[Boldare profile on Awwwards](https://www.awwwards.com/Boldare/). \n\n![11 awards for Boldare](/img/baner-5.jpg)\n\n## 7. Boldare is 130 in 3 locations\n\nWe build human-centered digital products for clients from around the world. But it wouldn't be possible without the people who build Boldare. \n\n**130.** That many people, experts in their fields, decided to share with Boldare **a vision of how the future of software and design should look**, and they help to materialize this vision every day, working side by side with our clients and partners, helping them develop exceptional digital products. \n\nAnd we are not stopping here. Check out our [career page](https://www.boldare.com/career/) and join Boldare in our offices in Warsaw, Wroclaw, and Gliwice.  \n\n![130 Boldares](/img/baner-3bb.jpg)\n\n## 8. We were speakers at over 50 events\n\nThe people of Boldare are not just employees. There are enthusiasts and practitioners who want to share their knowledge and experience. That is why they organize events, meetups ([Holacracy Practitioners](https://holacracypractitionersmeetup.splashthat.com/), [CTOAsks](https://www.boldare.com/blog/cto-asks-meetup/), Dribble Meetup, [FrontClub](https://frontclub.pl/), etc.) or attend international conferences as speakers. \n\nThey share their knowledge but also constantly seek out more in order to improve continually. This helps them to be better partners for our clients, but also it allows Boldare to grow at a fast pace. \n\n![meetups and conferences ](/img/baner-7.jpg)\n\n## 9+10. We are listed on Clutch\n\nThis one is double. Because in 2018, Boldare was listed on two different [Clutch](https://clutch.co/) lists.\n\nWe have been listed among the **Top Product Designers and Developers**. \n\n![Product Designers and Developers](/img/clutch_banner.jpg)\n\nand among the **Top Custom Software Developers in Poland**.\n\n![Top Custom Software Developers in Poland](/img/clutch_banner_yellow.jpg)\n\nIt is always nice to be recognized for what you do, right? And it is even nicer when your client shares their opinion about your work:\n\n> The Boldare team really feels like they are sonnen employees. They work on an equal footing and collaboratively with our team members. This allows us to create a better experience for our customers and that is hugely important.\n\n<BlogQuoteAuthor text={`Norbert Baumann, VP Research & Development / Digital at Sonnen`} />\n\nThat wouldn't be possible without our** dedicated development teams**. Our clients highly value their work and professionalism. \n\n**\\>> You can learn more about how we build dev teams at Boldare** [HERE](https://www.boldare.com/development-teams/).\n\n## Great things happened in 2018\n\nIn the last 12 months, we merged two companies, XSolve and Chilid, into one organization, we prepared a new range of services, we enriched our technology stack, we strengthened our machine learning team, we worked on 30 digital products, we built up an amazing, 130- strong team, we gained awards and organized dozens of events. 2018 was great. \n\n**2019 will be even better. **"}],"job":null,"photo":null,"cover":"/img/cover-na-bloga.jpg","lead":"2018 was truly exceptional. It was a year of great change, when Boldare, the digital product design and development company, emerged from a creative union of two strong businesses to become a guide to the digital transformation journey, helping business to innovate.","templateKey":"article-page","settings":{"date":"January 16, 2019","slug":"2018-at-boldare-the-story-of-great-changes","type":"blog","category":"News"},"contributor":"Kamil Mizera"}}},{"node":{"excerpt":"","id":"1125509f-7b32-5388-bfc9-52dea1165eb0","fields":{"slug":"/blog/converter-pattern-in-java-8/"},"frontmatter":{"title":"Converter pattern in Java 8","order":null,"content":[{"body":"This is a common problem: to have to convert pairs of similar objects one to another (in our case – domain classes to DTOs, which are then sent to frontend as JSON objects) and the other way round. In this case, what we need is a one-shot conversion, to convert just once in the object’s lifetime. What we do not want is coupling between the two kinds of objects: DTO classes shouldn’t “know” about domain classes and the other way round.\n\n## Converter class in Java\n\nAs changes in the source object do not have to affect the destination object, the ideal custom solution would be to create a single “Mapper” (or “Converter”) class for each pair. There are also tools which are able to map fields of similar classes, based on field names. But how about “producing” whole collections of our source object? How to produce collections of destination objects, without too much boilerplate code?\n\nWhat addresses our needs, is **Java 8** and its three core features:\n\n* default method implementation in interfaces\n* streams\n* lambdas (here in the form of a method reference)\n\nDefault method implementation is what saves us from boilerplate code, creating collections of objects. Streams and lambdas build a beautiful code transforming our collections. Let’s have a look at the final class hierarchy and the code itself:\n\n`public interface GenericConverter {`\n`E createFrom(D dto);`\n`D createFrom(E entity);`\n`E updateEntity(E entity, D dto);`\n`default List createFromEntities(final Collection entities) {`\n`return entities.stream()`\n`.map(this::createFrom)`\n`.collect(Collectors.toList());`\n`}`\n`default List createFromDtos(final Collection dtos) {`\n`return dtos.stream()`\n`.map(this::createFrom)`\n`.collect(Collectors.toList());`\n`}`\n`}`\n\nHaving implemented the default method to convert a collection of data transfer objects (D) into entities (E), as well as another one that does the opposite, we don’t need to implement this in concrete implementations of the converter any more. Creating a converter for a single DTO/domain class is as simple as that:\n\n`@Component`\n`public class AccountConverterImpl implements AccountConverter {`\n`` `@Override`\n`public Account createFrom(final AccountDto dto) {`\n`return updateEntity(new Account(), dto);`\n`}` ``\n`@Override`\n`public AccountDto createFrom(final Account entity) {`\n`AccountDto accountDto = new AccountDto();`\n`accountDto.setAccountType(entity.getAccountType());`\n`accountDto.setActive(entity.getActive());`\n`accountDto.setEmail(entity.getUserId());`\n`ClassUtils.setIfNotNull(`\n`entity::getPassword, accountDto::setPassword);`\n`return accountDto;`\n`}`\n\n`@Override`\n`public Account updateEntity(final Account entity,`\n`final AccountDto dto) {`\n`entity.setUserId(dto.getEmail());`\n`entity.setActive(dto.getActive());`\n`ClassUtils.setIfNotNull(`\n`dto::getAccountType, entity::setAccountType);`\n`return entity;`\n`}`\n`}`\n\nAnother custom feature you can see there is our ClassUtils.setIfNotNull method, which only calls the setter if the getter yields a non-null value:\n\n`public class ClassUtils {`\n`protected ClassUtils() { }`\n`public static  void setIfNotNull(final Supplier getter, final Consumer setter) {`\n`T t = getter.get();`\n`if (null != t) {`\n`setter.accept(t);`\n`}`\n`}`\n`}`\n\nSo there we have a complete Converter structure using all the **Java 8** goodness. Adding a new Converter for another entity-DTO pair (like User, Address, etc.) just requires the creation of a new UserConverterImpl class, implementing its own UserConverter, which in turn should  implement GenericConverter. This way you will be able to convert collections of objects out-of-the box. This is possible thanks to the default method implementations in GenericConverter interface, which is a very handy Java 8’s feature.\n\n<NewsletterSmall id={`article-bottom`} />"}],"job":null,"photo":null,"cover":"/img/converter-pattern-in-java8-boldare-blog.jpg","lead":"Our Java team has recently prepared a custom hands-on workshop on functional programming in **Java 8**. The participants solved our coding tasks, trying out the Java 8’s features in separation, and now it’s time we show off how we employ the full power of Java 8 in our real-life projects.","templateKey":"article-page","settings":{"date":"January 01, 2019","slug":"converter-pattern-in-java-8","type":"blog","category":"Tech"},"contributor":"Anna Skawińska"}}},{"node":{"excerpt":"","id":"e4247904-a734-55b0-b6b1-5efb16eb8ed6","fields":{"slug":"/blog/digital-travel-trends-in-the-experience-economy/"},"frontmatter":{"title":"Digital travel trends in the experience economy","order":null,"content":[{"body":"**What do all those things have in common? **They are experiences. The digital travel business, just like real traveling, is based upon experiences. Is your business experience like a beautiful sunset on an exotic beach? To ensure that it is, we have prepared a list of **5 digital travel trends** to boost your business to another level.\n\n## 1. The digital horizon of the 2019 travel industry\n\n**We are living in an experience economy**. When we think about our next trip, we crave Instagram-worthy pictures of nature, glamorous cities and charming, known only by locals places. We are inspired to travel to a certain destination by the social media pictures of our friends and colleagues, or travel influencers from Instagram or YouTube. When planning our next trip, we actively seek social media-worthy environments, destinations and experiences.  \n\nThe new generation, regardless of what you call them, Millennials or Generation Z, place more value on experiences than things. They feel that **money spent on doing things** - activities and experiences - **gives more happiness** than money spent on owning things.\n\nThe new generation feels that saving money for a house is so hard they prefer to live in the moment and splurge on travel, holidays and trips. We use to go for a holiday once a year, but now the average is 3.5 times per year, and for Millenials it [is even higher: 4.2](https://info.advertising.expedia.com/european-traveller-multi-generational-travel-trends).\n\nHow can your products or services fit this trend? It doesn’t matter if your product is a physical hotel or an online service. **Only delighted customers will come back**, share and recommend it to their friends and followers. Are you Instagram-worthy?\n\n\\>> [Learn how you can scale your digital product for better market fit](https://www.boldare.com/blog/scaling-your-product-thriving-in-the-market/)\n\n![](/img/foto-blogpost_d.png)\n\n## 2. Keep it personalized, stupid\n\nAn old design and UX motto says, _“KISS - Keep It Simple, Stupid”,_ which means that anything simple is good, easy to understand and use. But now in the digital age of **artificial intelligence (AI), Big Data** and **machine learning** it’s better to say, _Keep It Personalized, Stupid_. We’ve been spoiled by Netflix and Amazon recommendations of movies and products that we might like. Really great recommendations. So we crave this experience in other products and industries. Travel is no different.\n\nHow can you use artificial intelligence and machine learning in your travel business? First of all, by creating **actionable insights from complex data**. Airlines, hotels and other travel companies gather huge amounts of data about the travel habits of their clients. That allows AI algorithms to find patterns and suggest suitable products or services - for instance, people who traveled to Barcelona like you have bought also a trip to Salvador Dalí’s museum in Figueres. \n\nAnother way of using AI and personalizing the travel experience to customer needs is to find out what they like or dislike in your services. But how? The Dorchester Collection luxury hotel chain [used artificial intelligence](https://hbr.org/2016/07/using-an-algorithm-to-figure-out-what-luxury-customers-really-want) to sort through guest reviews and then adjusted its breakfast menu to match their guests’ tastes. Clever, no? \n\nThere is one more important thing to remember - **customers love to be delighted by personalization,** but they don’t like to be scared by feeling you know too much about them. Privacy concerns are rising with the general public. Be very clear what data you collect and why. New GDPR rules in European Union should also be respected.\n\n## 3. Seamless communication with a brand\n\nAnother way that AI is changing the travel industry is in its **communication with customers**. Thanks to machine learning algorithms and natural language processing we can show some magic: the kind of experience that you’ve seen previously in science fiction movies, where you could just talk to a computer or write commands in natural, normal human language. \n\nA company called Airport Digital have created Personal Concierge - a white label product that gives passengers the information they need, when they need it. Personal Concierge can be enabled through multiple platforms, including Facebook Messenger, SMS, Slack and airline and airport apps. Personal Concierge is a bot with whom you can communicate like with a real person, asking the same type of questions, for example “What is the cheapest way to get to the city center?” or “Is my flight delayed?”. What is more impressive, indoor maps, navigation and flight alerts are also included.\n\n![](/img/eres.png)\n\nToday’s travelers want to **engage with a brand** seamlessly via chatting on Messenger or on a website, both desktop and mobile. They don’t care what technology you are using, they want to find precise information and ask questions, if needed. \n\nThe adoption of voice-enabled assistants like Siri on iPhones, Google Assistant on Android smartphones and Google’s Home device or Alexa, the personal assistant from Amazon, shows that customers are more and more accustomed to** interact with services via voice commands**. This is where AI can be used create customer-focused conversational interfaces. That brings a lot of opportunities to brands in the travel industry to use it to delight customers.\n\n## 4. Disloyalty to bad design\n\nThis might be a shock for you. Or not. Nevertheless, take a seat. Customers have very little brand loyalty. In fact, **88% **have said that they would quickly switch to another website or app if their digital experience is bad or doesn’t [satisfy their needs](https://www.thinkwithgoogle.com/marketing-resources/micro-moments/travel-booking-trends-book-it-moments/). They have a really short attention span and very little patience.\n\nFor a business owner, this is bad news, because while your offer or service may be of very good quality, very often the design or user experience is lacking. Good design is king. We know when something has a great design, we can feel it, even when we cannot say what is it. Apple showed us the way. \n\n> Simplicity is the ultimate sophistication.\n\n<BlogQuoteAuthor text={`Leonardo da Vinci`} />\n\nSo do you have a choice? No. Your product’s design and user experience should be world class. But that’s a good thing. Good design brings more conversions, increased long-term loyalty and a better return on investment.\n\n\\>> [Check out Why Design Matters ](https://www.boldare.com/work/why-design-matters/)\n\n![](/img/rehalati.png)\n\n## 5. Omni-channel experience\n\nWe are glued to our mobile phones, we do almost everything using them, but sometimes a small screen is not enough. One of the key takeaways from a report prepared by Phocuswright for Bing, is that 40% of customers research flights and accommodation using mobile phones, but **only 21% do the bookings that way.** That means customers [don’t trust a small mobile screen](https://www.phocuswire.com/Bing-Phocuswright-digital-travel-marketing-study) for making the final decision and purchase. \n\nWhat does this mean for travel brands? You have to ensure a **great omni-channel experience** because a customer might find your service or product on their mobile phone, but they are much more likely to buy it using a desktop computer. Ensure that your page looks similar on both mobile and desktop. \n\nTry to convert mobile users to register or subscribe to a newsletter on your mobile site or download your app and then give them an offer they cannot refuse. The exact steps and tactics will vary depending on the type of service or product, but optimizing the customer journey through different touch points (both mobile and desktop) is a sure way to prevent users from dropping out.\n\n## The new travel experience\n\nThe experience economy is king in the real world and digital world alike. Make sure that your customers’ experience on mobile and desktop is seamless, personalized and with great design.\n\n<Iframe url=\"https://www.slideshare.net/slideshow/embed_code/key/h8Vj5ITyzWwdxM\" width=\"639\" height=\"480\" />"}],"job":null,"photo":null,"cover":"/img/travel-digital-trends.png","lead":"**Think about the last time you traveled.** What do you remember? How does it make you feel? There is a good chance, that in your memory you have pictures of the landscape, the taste of local food, how warm or cold you felt on a particular day. You might remember vividly an amazing sunset on a beach, or the terrible smell of seafood that you hate at a farmers’ market.","templateKey":"article-page","settings":{"date":"December 21, 2018","slug":"digital-travel-trends-in-experience-economy","type":"blog","category":"Ideas"},"contributor":"Radek Grabarek"}}},{"node":{"excerpt":"","id":"7838a388-62b3-5d2c-b68e-3f89949c8470","fields":{"slug":"/blog/what-is-design-thinking/"},"frontmatter":{"title":"What is Design Thinking","order":null,"content":[{"body":"**Design Thinking **is here to stay. And with [Forrester-IBM research](https://www.ibm.com/blogs/think/2018/03/design-thinking/) finding that Design Thinking can reduce design and development time by up to 75%, it’s no wonder. Teams that utilize Design Thinking also cut costs, manage risk better, produce better quality products, and boost profitability. Some have cited **increases in ROI of 300+%**. But what exactly is it?\n\n## Defining Design Thinking\n\nThe term was first coined in the title of the 1987 book, _“Design Thinking” _by Peter Rowe, who went on to become the dean of Harvard University’s Graduate School of Design. A nutshell definition might be, that Design Thinking is a **process that codifies how a ‘designer-consultant’ would deal with a client’s project**, allowing anyone to adopt the same approach. \n\nClearly, using Design Thinking does not immediately make you a trained designer, but used on the right project (creating digital products, anyone?) it is an effective – and creative – method of achieving results. **But what is Design Thinking exactly?**\n\n\\>> [Do you wonder, why design matters? Here is the answer](https://www.boldare.com/work/why-design-matters/)\n\nDesign Thinking is a way to understand the **client’s needs** (including their users’ needs) in depth, before taking a creative and solution-oriented approach to meeting those needs. Some of the essential features of the **Design Thinking process** include empathy, collaboration, questioning, creativity, exploration, experimentation, and continuous improvement. Sounds good, but what is it?\n\nWhile definitions of Design Thinking may vary, depending on the source, the core feature of Design Thinking is the customer. Whatever stage of the design process you’re at, the focus on people – especially the product user – is essential. Without that, it’s just not Design Thinking.\n\n![](/img/paulina-product-designer.jpeg)\n\n## What is Design Thinking for?\n\nDesign Thinking aims unlock creativity in a way that is directly focused on the nub of the ‘problem’ and the needs of those affected by that problem. \n\nThe emphasis on people (often referred to as empathy) is intended to lead to more holistic insights than a more traditional approach obsesses with business success, the bottom, and technical/mechanical matters. Not that these issues aren’t relevant, it’s simply that adding people to the mix of factors can lead to a more balanced outcome which is both profitable and sustainable.\n\n\\>> [Read an article about \"What are design sprints?\"](https://www.boldare.com/blog/what-are-design-sprints/)\n\n## Design Thinking Process\n\nThe best way to understand Design Thinking and its applications is to look at the process itself. Though different schools of thought tend to create their own versions of that process, a ‘classic’ 5-phase version comes from Stanford University’s school:\n\n* **Empathy** – get to know the users.\n* **Definition** – understand what users need, gather insights into the issues underpinning the problem (dig deep enough and almost certainly, the original problem statement is incomplete or oversimplified).\n* **Ideation** –challenge assumptions, storm ideas, give free reign to innovation.\n* **Prototyping** – create a solution that solves at least part of the problem.\n* **Testing** – test the prototype with users and gather feedback.\n\nHowever, this is not a linear, one-step-after-the-other process. Though these phases work just fine taken in sequence, the reality of creative problem-solving is that these different phases may be happening in parallel, or taken together form just one round or iteration of creative design. Especially when the product is complex, including a number of different features or functions, each of which might be created and tested individually as part of the process.\n\n## The Benefits of Design Thinking\n\nRooted in its alternative perspective on problem-solving, the Design Thinking approach offers numerous advantages.\n\n* **Focused on the user** – The user is at the center of Design Thinking. The golden thread running through the whole process is the user; their needs, understanding them better, creating a genuine solution to the user’s problem, people first in other words.\n* **Aimed at understanding** – The user focus goes far beyond asking the client what they want their product to do for users. The key to Design Thinking is to really get inside the end user’s mindset and experience. At their best, a practitioner of Design Thinking empathizes with the user, identifies with them and therefore invests themselves personally in finding the best possible solution. The process encourages practitioners to be more in touch with people.\n\n![](/img/pawel-capaja-at-work.jpg)\n\n* **Silo-busting** – Traditionally, especially in larger organizations, different roles, disciplines and departments can be segregated, interacting at a bare minimum level; working ‘in silos’. But this process encourages people to break out of those silos and come together around the focus of a specific problem, thus allowing for all kinds of knowledge and experience exchange, giving the project team more resources to apply to creating a solution.\n* **Community-based** – People work together in Design Thinking. With a mixed group of roles coming together on several occasions to work toward a common goal, there is a direct benefit on the organization and quality of the collaboration (which, of course, spins off into other, future projects).\n* An emphasis on the practical – There is nothing hypothetical about Design Thinking. For it to work, it must be focused on a genuine, real-world issue, specifically aimed at a value-adding solution.\n\n\\>> [Read an interview with Paweł Capaja, a Boldare Product Designer](https://www.boldare.com/blog/product-desinger-pawel-capaja-interview/)\n\n* **Tried and testing** – Continuing the practical theme, Design Thinking includes an actual creation process. Prototypes are put together, often addressing and testing a single feature or facet of a possible solution, resulting in timely feedback which then influences subsequent design and the next test. Due to its non-linear nature, the Design Thinking process often allows for not only multiple but simultaneous prototypes, encouraging  faster working (albeit sometimes chaotic) and a cross-pollination of ideas.\n* **Continuously improving teamwork** – A longer term, internal benefit to organizations using Design Thinking is that their people become accustomed to operating with concepts such as empathy, putting the user first, and rapid testing of ideas. This systematized exposure to, and exploration of, other people’s needs and experience encourages a mindset of collaboration and open understanding, potentially leading to an upwards spiral of ever-improving teamwork.\n* **A learning organization** – Another theme that should be obvious in Design Thinking is that it is a learning-focused process. In fact, as a general rule, if the process ever starts to slow down, a good re-ignition strategy is to look for what you don’t yet know about the situation (for users, the client, or yourself) and start asking questions. An organization with learning at the heart of its culture is a creative organization.\n\n## Design Thinking at Boldare\n\nDesign Thinking is highly compatible with agile working practices (not the same, but very complementary) and at Boldare we are dedicated to using an **agile approach** to working with our clients – much of our digital product development rests on the twin pillars of the scrum framework and the lean startup approach. \n\nIn this sense, Design Thinking works well. The rapid process suits our **sprint-based style**, and the deep understanding of user needs and client business goals is of critical importance in the kick-off and product vision and business canvas workshops we run at the beginning of every project, together with the tools we use for user story mapping and release planning.\n\n![](/img/case-study-polco-moodboards-designed-by-boldare.jpg)\n\nIn fact, these workshops – often a series of events involving the client’s representatives and the whole Boldare project team – are essentially an intensive kick-starting of the Empathy, Definition, and Ideation stages of Design Thinking. Led by a Boldare Scrum Master, these events **focus on the client **and team getting to know each other, ensuring the team understand the problem they are there to solve, and mapping out the future of the project process, including the communication and collaboration between the client organization and Boldare.\n\nPrimarily, the goal is the discussion and **exchange of information **and initial discussion of ideas and potential solutions, leading to the initial version of the Product Backlog, the list of everything - requirements, changes to be made, etc. - needed for the product. \n\nAs the old saying goes, _“If the only tool you have is a hammer, everything begins to look like a nail.” _(generally attributed to psychologist, Abraham Maslow, though alternative versions exist). In other words, if you come at every problem from the same viewpoint, you’ll likely use the same old solutions/strategies every time. But every problem is different… \n\n**Design Thinking** offers a flexible framework which aims to treat the problem as a unique challenge, encouraging you to understand the challenge at hand before you select the appropriate tool (Hammer? Chisel? JavaScript?).\n\nPut another way, Design Thinking is a method to help you to break free of established problem-solving patterns, enabling you to get out of your comfort zone and instead bring to the table what the problem needs.\n\n## Design Thinking for better product\n\nDesign Thinking is a **flexible problem-solving process** focused on the end user and their requirements. The emphasis on exploration and deeply understanding the challenge ahead – especially from the human angle – before proceeding to the ideation phase. The user perspective is also central to the creation and testing of prototype features and products, ensuring real-world, pragmatic input to the design process. At Boldare, Design Thinking concepts fit closely with our approach to **digital product development**."}],"job":null,"photo":null,"cover":"/img/design-thinking.jpg","lead":"The phrase ‘Design Thinking’ has been around for decades. It has evolved to represent a framework approach to creative problem-solving with an emphasis on practical solutions. Well-suited to digital product development, it’s a natural choice for Boldare.","templateKey":"article-page","settings":{"date":"December 18, 2018","slug":"what-is-design-thinking","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"25800c12-fafc-5c39-ac21-19b137e9928b","fields":{"slug":"/blog/minimum-viable-products-it-s-all-about-the-team/"},"frontmatter":{"title":"Minimum Viable Products? It’s all about the team","order":null,"content":[{"body":"At Boldare, we take pride in our **teamwork**. Not just because we all get along just fine but because we take great care in assembling the right team for the client… in putting a group of people together with all the necessary skills and knowledge to ideate, design and develop your web experience. \n\nFrom initial **product workshop** to market-tested scalable product, our teams are high-performing from the get go and capable of shifting their focus and process depending on what stage the project is at.\n\nWhen working on an **MVP** (**minimum viable product**), a Boldare team brings a very specific skill set and approach to bear.\n\n\\>> [Learn more about our process](https://www.boldare.com/full-cycle-product-development/)\n\n## Quick context: What’s a Minimum Viable Product?\n\nThe MVP is a core element (perhaps the core element) of our [lean startup approach](https://www.boldare.com/blog/lean-process-for-better-product/) to product development. The **minimum viable product** is not a prototype. Nor is it a full-scale product ready for market. The MVP is an experiment, a way to test real-life user responses to an aspect of the solution being developed. It’s a way of **testing and refining project assumptions** in order to create a product that genuinely meets user needs. \n\nAs a method of gathering rapid feedback on specific design features, it’s hard to beat a minimum viable product and some projects may involve a series of MVP experiments as stepping stones toward a final result.\n\n![](/img/mvp.png)\n\nResponses to a minimum viable product enable the team to gain a deeper understanding of:\n\n* The central problem and whether the product so far is on track to solve it.\n* The target audience for the product – Is the product pitched at the right people and, if so, is it giving them what they really need?\n* Necessary future development – Each MVP is a signpost pointing to the next stage of the design project (and not always in the direction anticipated at project kick-off).\n\n## Putting together a Minimum Viable Product team\n\nThe accountabilities of an MVP team can be summarized as: \n\n1. testing the product hypothesis with minimal resources; \n2. putting together a most basic solution to solve the problem (or part of the problem); \n3. designing and developing a viable (partial) version of the product; and \n4. gathering and analyzing feedback from the test audience. \n\nIn light of these accountabilities, then depending on the nature of the project and the product being developed, the **MVP team typically includes** people skilled in a variety of key roles:\n\n* Frontend Developer\n* Backend Developer\n* Visual Designer\n* Interaction Designer\n* UX Designer\n* Product Designer\n* Business Analyst\n* DevOps\n* Qualitative/Quantitative Design Researcher\n* Digital Strategist\n* Scrum Master\n\nThe purpose of the team is to** create the MVP quickly** (usually, design sprints take place over a two-week period) and get it to users for feedback. The construction of the MVP will incorporate any lessons learned from previous feedback and discussion and may include a prototype stage, depending on the needs of the product. The responses to any project prototypes will influence the choice of features to be tested by the MVP. \n\n![](/img/boldare-teams.jpg)\n\nWhen deciding on who specifically should be a member of the team, we apply our team selection criteria:\n\n* **People who have worked together in the past** – The performance of any team depends at least in part on familiarity between the team members. With this in mind, we always include at least two team members who worked together on a previous project. This helps the new team accelerate through (or even skip) the forming and storming stages of the team development process, arriving at the point at which they can deliver real value to the client much more quickly than a team that starts out as strangers.\n* **Skilled, self-organizing people** – We select a balance of complementary soft and hard skills so that we have everything in the team we need to deliver what is needed to reach your business goals.\n* **People with mixed levels of seniority** – Experience is invaluable. But so is a fresh perspective. With our MVP teams, we strive for a combination that can leverage both for the client. \n\nHaving so far delivered more than **250 digital products over a 14-year period**, we understand that effective minimum viable products (and eventually, high quality full products) are built by teams that can innovate, think fresh and at the same time bring their deep experience to bear on the development process.\n\n## The perfect Minimum Viable Product culture\n\nEvery organization, and every team, has a culture – a set of norms and values that influence attitudes, behaviors and how the people in that organization or team work together. \n\nHere at Boldare, an MVP team works on the following principles:\n\n* **Pro-risk **– The whole point of the lean startup approach is to deal with projects in which the shape of the resulting product is not known at the outset. Hence the step-by-step process of experimentation using MVPs. When we don’t know exactly what success looks like, risks must be taken.\n* **Agility **– We are an agile organization and all our teams are at home in constantly changing environments, working with disruptive technologies via rapid iterations and experimentation and if the feedback tells us the current direction is wrong, then we can support the client to pivot (i.e. change orientation but without losing the benefit of what has gone before).\n* **Business-oriented** – First and foremost, throughout the project, are the client’s business goals. \n* **Anti-perfectionism **– Striving for ‘perfect’ is distinctly un-agile, and runs contrary to the purpose of an MVP, defined by lean startup founder Eric Ries as, “to collect the maximum amount of validated learning about customers with the least effort.” The perfectionist approach is the polar opposite of “least effort” and is really the biggest enemy of useful experimentation; especially when the detail of the final product isn’t known from the outset.\n\nIn a sense, this culture gives team members a common ground; it’s what holds the team together and enables it to work effectively in an agile environment.\n\n![](/img/team-meeting-in-conference-room.jpg)\n\n## Benefits of working with an MVP team\n\nAs mentioned earlier, the MVP is a central part of the lean startup approach to product development, helping you enter the market with maximum speed and minimum cost.\n\nDrawing on the learning from the prototype phase, the MVP team will apply the **build-measure-learn principle **to test your assumptions, refine your ideas and turn them into a tangible (and testable) object. The team will provide expert advice and support in deciding what elements to build and test, and what metrics to use to measure performance and gauge feedback. Each minimum viable product constitutes an experiment to test a hypothesis and progress is typically rapid, taking place in scrum sprints that average 1-2 weeks each.\n\n## The MVP team in action – Tojjar, a real-life example\n\nWith just six weeks to build a **MENA region e-commerce platform** MVP, [Takamol ](https://takamolholding.com/en/)approached Boldare for help. The project was part of Takamol’s 9/10ths business growth program, investor funding was at stake and the deadline was tight. With a clear focus on the highest possible ROI, the investors were looking for Takamol to pitch the product in a startup style, with a functioning, proven MVP, product roadmap for further development and a full business plan with KPIs.\n\nTakamol needed a partner who could consult, develop and solve problems quickly. \n\nWithin three days, Boldare was in Dubai for an initial project workshop and rapidly assembled a team and to start work on the product. During the workshop, the team together helped the client to trim down the list of desired features, leaving only the crucial ones to be tested via the MVP. \n\n![](/img/tojjar-app-designs.jpg)\n\nThe team delivered the product on time with the result that Takamol secured the investment funding and together, Boldare and the client went on to build a full version of [Tojjar](https://www.boldare.com/blog/case-study-tojjar/), the eBay of the Middle East. \n\nThe full web version of Tojjar, and a mobile app, have since been released. The Boldare team continues to work with Takamol, adding new functionalities with every sprint.\n\n\\>> [Read more about Tojjar in our Case Study](https://www.boldare.com/blog/case-study-tojjar/)\n\n> The e-commerce project had a very aggressive deployment timeline. We had six weeks to deliver a barebones MVP, and Boldare was the only vendor who was willing to meet that deadline. They were successful, delivering our initial feature-set after a six-week period.\n\n<BlogQuoteAuthor text={`Development Manager, 9/10ths Programme, Takamol`} />\n\n## The MVP team for your business \n\nProject success can depend on the MVP. At Boldare, our MVP teams are carefully chosen to provide a range of expertise, experience and support tailored to each individual client’s project. Furthermore, our broad practical experience in applying the lean startup approach means that we understand the pragmatic use of the MVP to achieve project goals."}],"job":null,"photo":null,"cover":"/img/teamwork.jpg","lead":"Creating a minimum viable product (MVP) is a critical stage in the way we develop products at Boldare. Key to success is the MVP team. By ensuring each team has a unique balance of skills and experience, we can provide an extremely rapid and agile development service.","templateKey":"article-page","settings":{"date":"December 18, 2018","slug":"minimum-viable-product-team","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"e9c5a21b-f2e8-536e-a8b7-80f47bce5e3d","fields":{"slug":"/blog/digital-product-prototyping-what-s-it-all-about/"},"frontmatter":{"title":"Digital Product Prototyping – what’s it all about?","order":null,"content":[{"body":"With over **250 products for 89 clients **over the last 14 years, we think that here at Boldare, we know a thing or two about creating first-rate, innovative digital products. A big part of ensuring quality output is our use of the l**ean startup approach** married with the **scrum framework** – we are, after all, an agile organization.\n\nA key concept from lean startup, one that comes early in the process and helps create a solid foundation for the final product, is prototyping. \n\n## What is a digital product prototype?\n\nIn the projects we deliver at Boldare, a prototype the first testing (with users, stakeholders, and investors) of the general concept for the design. **A prototype has no engineering behind** it with few or no working functionalities or real data. In fact, the prototype is often a front, an interactive visualization or clickable trailer of the product – a means to test and validate the look and feel decided on so far, and the main business concept.\n\n![team](/img/00766-_tst0770.jpg)\n\nIn other words, **a prototype is how you validate your basic idea** and the assumptions underpinning it by gathering user reactions. The key is that **prototyping is done rapidly**, and with a minimum investment of time and resource. Prototypes are the initial ‘real-world’ test for your product concept.\n\nA classic example of prototyping was demonstrated by the well-known example of Zappos originator, [Nick Swinmurn](http://fortune.com/2012/09/05/nick-swinmurn-zappos-silent-founder/). \n\nSwinmurn **tested his initial idea** for an online shoe store by going to a bricks and mortar retailer and taking pictures of their shoes. He posted those pictures online and when he received an order, he went to that retailer, purchased the shoes and mailed them to his customer. Although he had a working website, as a shoe store it was just a façade. The process was clunky and slow but in testing the concept, it proved that people would buy shoes online. Testing the idea is what counts, not the actual form of the prototype.\n\nHowever, although prototypes can come in many forms (paper, video, digital, or even simply a question to the right group of people) at Boldare, we’re focused on **digital product development** and when a project would benefit from prototyping, it almost always has some kind of digital presence or format.\n\nWhatever format you choose for your prototype, it must be easily understood by the audience. Even if it doesn’t look at all like the product you have in mind at this early stage, your prototype has to have some element of realism. \n\n_\"Sprint: How to Solve Big Problems and Test New Ideas In Just Five Days_,\" a book by three Google Ventures design partners: **Jake Knapp, John Zeratsky and Braden Kowitz**, warns against the danger of ‘customer imagination’. Simply put, if you present your prototype audience with a piece of paper, then however clearly it shows your intended product, they have to imagine that product and when people use their imagination, they start thinking about how the product is designed and built and begin to think of ways to do that better because they want to be helpful. In other words, they give you feedback. \n\nThis might sound good but actually, at this stage, you don’t want detailed feedback and suggestions, you want reactions. How do potential customers respond? What’s their gut-level reaction? To get that reaction, the prototype should look as real as possible but without having needed excessive time and resource to produce it – after all, you’re only prototyping!\n\n![meeting in the room ](/img/05053-_tst4081-1-.jpg)\n\n## Prototyping principles\n\nIn addition to making your prototype as real-looking as possible, Knapp, Zeratsky and Kowitz offer some other broad principles to follow for digital prototyping.\n\n### You Can Prototype Anything\n\nThis is about attitude. Prototypes are often done under significant time pressure. In fact, the “Five Days” in the book’s title refers to a single scrum sprint in which the days go as follows:\n\n1. Explore the problem you want to solve.\n2. Come up with a variety of solution ideas.\n3. Decide how to turn your ideas into a testable hypothesis. \n4. Create a prototype to test the hypothesis. \n5. Test the prototype.\n\nAt Boldare, we don’t insist on just one day for prototyping – if we create a prototype, the time it takes is the time needed to build the right prototype for the project, and no more. That said, we completely agree a positive attitude is definitely tool number one. \n\n### Prototypes Are Disposable\n\nThe point here is that no prototype is intended to be developed into the full product. It’s a presentation of product features and appearance, **not an actual product itself.** \n\nAt this stage, you’re testing the idea and too much time spent on prototype development is wasted time. Not to mention the fact that the longer you work on anything, the more attached to it you become. Don’t get attached to your prototype, you might have to pivot 180 degrees, depending on customer reactions.\n\n<NewsletterSmall id={`article-middle`} />\n\n### Build Just Enough to Learn, But Not More\n\nRemember, a prototype **is not a fully-functioning design**, it’s a test designed to answer certain questions: your hypothesis. In the case of Zappos, the question was, _Will people buy shoes online?_ Swinmurn didn’t need to buy shoes as stock for his online store, all he needed to answer the question was pictures of shoes, and a way to fill orders so customers weren’t let down.\n\n## Why prototyping is useful – the benefits\n\nApart from their obvious use– testing your product idea with real customers – prototypes can be very helpful when **gaining commitment from stakeholders and investors**. Any pitch for funding you make will be seriously enhanced by a tangible version of the product.\n\nPrototyping (or more accurately, the reactions to your prototype) helps you to **better understand the proposed features of your design**, its risks, its potential impact on the market, and just whether you have an idea worth pursuing or not. \n\nWe haven’t begun product design yet (that starts later, with the minimum viable product or MVP), we’re still exploring the underlying product idea.\n\nIn addition, digital prototyping has the following benefits:\n\n* It’s relatively quick to do.\n* It’s low-cost.\n* By testing early, your final product will almost certain get to market quicker.\n\n> Sure, you could take a longer time to build a more perfect prototype—but doing so would only slow down the learning process. That may not matter if you’re on the right path, but let’s face it—not every idea is a winner. Whether you’re taking a risk on a bold idea, or you’re just not sure, it’s better to find out early.\n\n<BlogQuoteAuthor text={`Jake Knapp, John Zeratsky and Braden Kowitz`} />\n\n## The Boldare prototyping process\n\nAs already mentioned, at Boldare we follow the lean startup approach, as first established by Eric Ries’ 2008 book, _“The Lean Startup”_. Our exact development process varies from project to project, but a generalized version would be:\n\n* **Product basis** – using tools such as the business model canvas, the product vision workshop is the first exploration of the product concept, building a strong and shared understanding of the product vision.\n* **General UI/UX** – a user interface (UI) concept is developed (possibly using a clickable wireframe prototype), which then leads to the graphic design of the product, for which options are tested using mood boards. Wireframes are developed to explore different UI ideas and the basic structure of the product architecture is laid out.\n* **Prototyping** – usually, we build a clickable prototype of the product for presentation and testing, using HTML/CSS or JS to approximate a final product experience.\n\nUsually, prototyping is followed by development of a minimum viable product, or MVP.\n\n* [MVP building](https://www.boldare.com/blog/mvp-what-why-how/) – Based on feedback and learning so far, we build a product with just enough features to gather validated learning about the product and its further development.\n\n<RelatedArticle title={`This is how Boldare Development Teams process addresses your business needs`} />\n\nSome people see the prototyping phase as being wrapped up in (or even indistinguishable from) the MVP phase, and there are certainly many projects in which the first ‘build’ is the MVP. However, these two kinds of preliminary design are **definitely different in principle:**\n\n1. The prototype tests the idea, the MVP tests the potential product.\n2. The prototype creates a foundation for the design of the MVP.\n3. At the MVP phase, the basic concept has already been proven.\n4. An MVP is viable, i.e. it works, it is a product (albeit a far from final one), but a prototype is the appearance of a product.\n\n## Prototypes we've created for our clients – Cryo\n\nCryo is a web-based platform for cryotherapy enthusiasts and entrepreneurs (cryotherapy includes the use of a variety of low temperature treatments as part of medical therapy). The idea behind this project was to create a one-stop shop that:\n\n1. offers cryotherapy business owners a place to promote themselves;\n2. provides users with information about cryotherapy and cryotherapy services.\n\n![Cryo](/img/cryo-homepage-design.jpg)\n\nThis offered a rare challenge in that the two different user groups had very distinct needs. The business owners were effectively looking for a marketing platform, while the customers were looking for a reliable source of information and recommendations.\n\nAs part of the development process, we **prototyped key features to ultimately produce a catalogue of services**, a review and rating system, and a booking process. \n\n## Digital Product Prototyping for a better understanding of your business idea\n\nIn a way, prototyping is the art of illusion, creating what seems to be a product but isn’t (or just one aspect of a product) in order to gather reactions that will tell you whether your basic concept is worth pursuing further or not. And if not, reactions to your prototype will point to a new (and better) direction for development."}],"job":null,"photo":null,"cover":"POC-prototyp-blog_cover.jpg","lead":"Prototyping can be used as the first experiment stage in the product development process; the first chance to show your concept to users. Prototypes come in many different forms but each one is created to test the underlying design concept. User reactions are then used to guide the next phase of development.","templateKey":"article-page","settings":{"date":"December 18, 2018","slug":"digital-product-prototyping-whats-it-all-about","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"960777c2-f59c-58c3-8323-72557ba6353d","fields":{"slug":"/blog/product-market-fit-teamworking-for-results/"},"frontmatter":{"title":"Product-Market Fit – teamworking for results","order":null,"content":[{"body":"At Boldare, our success rests solidly on our **teamwork**. Not only how we work together among ourselves but also how closely we work with our clients, effectively creating a single project team composed of both our people and yours.\n\nWhen it comes to the [product-market fit](https://www.boldare.com/full-cycle-product-development/) part of the lean startup approach to product development, that teamwork is critical to the successful fine-tuning of your product to make it a ‘must-have’ for your target users. \n\nA Boldare **product-market fit team** is focused on turning your existing product or MVP (minimum viable product) into a saleable product. This involves a close and clear understanding of your target market, the further development of the user experience and sometimes even the addition of fresh features designed to appeal to new customer groups. All new features are tested with real users and the results analyzed to inform the next product iteration. \n\n![](/img/team-workshop-720.jpeg)\n\n## Quick context: What is product-market fit?\n\nAchieving product-market fit is all about honing your product until you have something customers are willing to pay for (preferably, not only because it works but also because it works better than the competition). Similar to the other elements of the **lean startup approach**, the product-market fit stage is about experimentation and testing, but with a very specific focus: the detailed needs and requirements of your chosen user groups.\n\nA survey by [CB Insights](https://www.cbinsights.com/research/startup-failure-reasons-top/) found that **42% of startup failures** were down to, “no market need” for their product. There are a number of reasons why a project might never get to the point of product-market fit:\n\n* The project runs out of time or money.\n* The project team do not have the skills or expertise to identify, research and understand the market.\n* The project team do not test the product with the right market.\n* There is no market for the product.\n\nThe key to successfully overcoming this obstacle is a clear – and team-wide – focus on the benefits of product-market fit, which include potential profit, sustainability of both product and business, and motivation for the project team (the product is approaching the point of release!)\n\n<RelatedArticle title={`Product-Market Fit for expanding market demand`} />\n\n## Putting together a product-market fit team\n\nThe accountabilities of a **product-market fit team** can be summarized as: \n\n1. Validating learning (including creating hypotheses, and running experiments to test them)\n2. Analyzing the results and advising on the product development strategy \n3. Engineering the technical architecture of the product that can be adapted or changed quickly\n4. Keeping in mind the technical debt (the cost of future development work which tends to be increased if less-than-optimal, ‘easy’ solutions are used) to ensure an easier transition to the next stage of the development process: scaling and maturity. \n\n![Team workshop](/img/build-measure-learn.png)\n\nTogether with the specific details of the development project, these accountabilities determine the roles necessary in a **high-performing product-market fit team**, including:\n\n* Frontend Developers\n* Backend Developers\n* Quality Engineer\n* DevOps\n* Business Analyst\n* Visual Designer\n* Interaction Designer\n* UX Designer\n* Product Designer\n* Information Architect\n* Qualitative/Quantitative Researcher\n* Digital Strategist\n* Scrum Master\n* Agile Coach\n\nIt’s clear from this list, such teams tend to draw on a wider variety of roles than other stages of the product development cycle due to the necessary blend of technical product skills and market research and understanding. \n\nDepending on the needs of each individual project, the team will employ some or all of the **following tools and techniques**: quality assurance, product-market fit canvas, quantitative research, data visualization and reporting, data architecture, and data analysis. \n\n**The technologies** they may be using to refine the product include Angular, React, Vue.js, JavaScript, HTML, PHP, Java Node.js, Express.js, Python, React Native, Swift, Objective-C, Android (Java), Xamarin (.NET), Python, MongoDB, and PostgreSQL.\n\n![Boldare team](/img/team-working-720.jpeg)\n\nOf course, all this information begs the question, how do we choose the right people to be in such a team. After all, besides the necessary technical skills and knowledge, there’s also a question of putting the ‘right’ people together. With this in mind, we have our own **team selection criteria at Boldare:**\n\n* **Past colleagues** – A new team usually passes through ‘forming’ and ‘norming’ stages in its development; this is normal but not always productive. We find that by including a minimum of two people who have worked together in the past we can skip or shorten the less productive stages and move quickly to ‘performing’ and delivering tangible value.\n* **The perfect combination of skills** – Every Boldare team is selected with a variety of skills in mind; not only the essential technical and engineering skills and knowledge but also the so-called soft skills, including excellent communication and self-organization.\n* V**aried experience levels** – You might imagine a team full of experts with long experience would be ideal. However, we see better results from teams that offer both experience and also the fresh views of a project offered by newer team members.\n\n## The perfect product-market fit culture\n\nThe individual constituents of any team give rise to a shared set values which, in turn, influence how the members of that team work together. At Boldare, we encourage and foster a strong culture combining:\n\n* Experimentation – while this principle is strongly present throughout the product development process, the point of product-market fit often requires multiple, repeated cycles of experiments, each one a small piece of the whole that must be carefully coordinated and analyzed for the desired outcome to be achieved.\n* A strong focus on the client’s business needs – Again, while it is a constant theme, this focus is particularly strong when working on product-market fit. After all, the business needs (and the product) are an answer to the needs of the market, or at least, a segment of it.\n\n<NewsletterSmall id={`article-middle`} />\n\n## Benefits of working with a product-market fit team\n\nWorking with a mixed team of experts, knowledgeable in both digital product development and also how to analyze and satisfy a market, means that your existing product or MVP is fine-tuned into a user-pleasing, saleable (and profitable), ready-for-use product.\n\n## The product-market fit team in action – BlaBlaCar, a case study\n\nFrench carpooling platform, BlaBlaCar had 24 million users and a lead position in the marketplace. Wishing to build on this position, the company’s goal was to expand into 27 new countries, with a variety of individual legal and cultural requirements. The secondary objective was to add new and improved features to the app, thus expanding its appeal to potential users who may have been hesitant in the past. \n\nThe final factor in the project was a shift in BlaBlaCar’s branding, moving away from being purely a transport option (a way of getting from A to B) toward being a more social application, focused on sharing your journey with interesting people.\n\n<RelatedArticle title={`Agile and skilled development teams for a French unicorn`} />\n\nThe Boldare team applied the technique of **funnel optimization**, the ‘funnel’ being the customer journey through BlaBlaCar’s website and app to the point of commitment; in other words, the user experience. \n\nOptimizing that funnel **involved testing each element** – landing page, calls to action, booking process, etc. –   and looking for opportunities for improvement with the goals of boosting user satisfaction, increasing the user population, eliminating any weaknesses in the existing product, and adding genuinely valuable new features. New or enhanced features – for example, a route-planning feature that enables drivers to find more passengers – were then A/B tested against the existing product version with chosen groups of users.\n\n![](/img/blablacar-logo-in-the-office.jpg)\n\n## Key points to remember about the product-market fit team\n\nProduct-market fit is a key goal of the **lean startup approach** to digital product development and the key to success is the team working on it. Drawing on a wide variety of roles and skills, from backend developer to business analyst to researcher, the team carries out a series of fine-tuning experiments, each one contributing to the product’s continuing evolution as it keeps pace with, or anticipates, the market’s needs."}],"job":null,"photo":null,"cover":"/img/team-meeting-1440.jpeg","lead":"Responsible for honing the product to meet the needs and requirements of users, the product-market fit team combines analysis and a deep understanding of the client’s market with refined technical and engineering skills. By testing a series of improvements and additions with carefully chosen users, the team guides the product towards both profitability and sustainability.","templateKey":"article-page","settings":{"date":"December 14, 2018","slug":"product-market-fit-team-for-results","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"3dbc7b9b-b163-5855-8b9a-b6b4b94ba3db","fields":{"slug":"/blog/effective-scaling-through-teamwork/"},"frontmatter":{"title":"Effective scaling through teamwork","order":null,"content":[{"body":"One success factor we prize above all at Boldare is **collaboration and teamwork** – how we work together, how we work with our clients, and their customers. That collaboration is particularly critical when scaling products.\n\nYou have your proven product concept and vision, maybe created and tested prototypes before proceeding, invited feedback and input on your **MVP** (minimum viable product), and then ensured that the releasable version is as close to a perfect match for the market as possible. \n\nIn other words, at this point, your **digital product** is out there, in use, successful, and the demand is rising. It’s time for scaling – to incrementally (but quickly) make improvements that will ensure your product is stable and sustainable enough for widespread use.\n\n[Read about  what an MVP is and what it is for](https://www.boldare.com/blog/mvp-what-why-how/)\n\nFor this, you need a team of people that can combine **technical and engineering know-how** with market research and analysis skills. Naturally, you might choose to do this in-house, but if you’re looking for expert assistance that will leave you with a solid product with a solid market performance, Boldare can help.\n\n## Quick context: What is scaling?\n\nAt Boldare, we use a combination of the** lean startup approach** and the **agile scrum framework** in our digital product development process. At the scaling stage, the clear focus is on ensuring that not only is your product a good fit for the market, but that it will be robust and reliable enough, with the right in-demand features, to acquire the market share you were originally aiming for when you first started developing your product idea.\n\n![Scaling digital product](/img/full-cycle-product-development-stages-scale.png)\n\n**User bases change**. They grow, develop new requirements, maybe even use your product for purposes you never even contemplated… The purpose of scaling is to **adapt your product for a long market life**, usually via a series of tested iterations, making small but significant additions or enhancements to better align with long-term user needs.\n\nThe benefits of scaling your digital product are as follows:\n\n* market growth and expansion;\n* a product that is up to date with new technologies;\n\nand\n\n* minimum disruptions to users or to product performance during the scaling process.\n\n[Learn more about our full cycle product development](https://www.boldare.com/full-cycle-product-development/) \n\n## Putting together a scaling team\n\nThe accountabilities of a scaling team can be summarized as: \n\n1. Horizontal and vertical expansion of the product; \n2. Engineering the product for scalability; \n3. Engineering the product for stability; \n4. Setting up automated regression testing;  \n5. polishing the existing functionalities. \n\nAlthough the membership of a scaling team is tailored to the precise requirements of each individual project, it’s common for a team to include the following roles:\n\n* Frontend Developers\n* Backend Developers\n* Quality Engineer\n* DevOps\n* Business Analyst\n* Visual Designer\n* Interaction Designer\n* UX Designer\n* Product Designer\n* Information Architect\n* Qualitative/Quantitative Researcher\n* Digital Strategist\n* Scrum Master\n* Agile Coach\n\nThe people fulfilling these roles will come together to provide a one-off combination of knowledge, skills and experience to your project, including digital product development, software & app development, quality assurance, scrum and kanban – all focused on scaling your product. \n\n![](/img/takamol-tojjar-case-study-boldare-product-development-team.jpg)\n\nDuring the **scaling process**, they may use any of the following industry standard technologies: \n\nAngular, React, Vue.js, JavaScript, HTML, PHP, Java Node.js, Express.js, Python, React Native, Swift, Objective-C, Android (Java), Xamarin (.NET), MongoDB, and PostgreSQL.\n\nHowever, those are just the technical/role requirements. As mentioned above, we value collaboration extremely highly and the right mix of people needs more than just a checklist of technical skills. At Boldare, we select our scaling teams according to **three main principles**:\n\n1. **Past colleagues** – Previous experience can be a strong bond and familiarity can drive higher team performance. No wonder that we insist that at least two members of each team have worked together on a past project. In this way, we accelerate the usual team pre-performance process and start producing quality results faster. \n2. **Balanced skills** – Strong technical skills are essential to digital product development but they’re only half the story. Our teams are also selected for their ‘soft’ skills, such as interpersonal communication and self-organization.\n3. **A blend of experience** – Experienced ‘old hands’ are good to have on a team; they understand the development process inside and out, and they’ve seen many of the project obstacles before and know how to get past them. We attach equal value to our skilled-but-less-experienced team members. Why? Because every project is unique and a fresh pair of eyes is always needed.\n\n## The perfect scaling culture\n\nIn any team, no matter the size, there emerges a shared way of doing things, common values, standardized working methods and principles. At Boldare, our scaling teams **prioritize**:\n\n* A focus on product quality\n* Incremental, high-impact wins\n* Rapid pace of development\n* Flexibility of thinking and response\n* Open collaboration\n\nSee also: [Development teams](https://www.boldare.com/development-teams/)\n\n## Benefits of working with a scaling team\n\nA focused scaling team will take your market-worthy product (whether it’s a new development or an existing product that needs an overhaul) and, working with user feedback and input, create a refreshed version that now has a longer market life to look forward to.\n\nHowever, clients often lack the necessary talent themselves and it is often too time-consuming to develop that capacity in-house (and, unless you have a constant stream of products under development, it’s often unnecessary too). Bringing in an experienced **external scaling team**, capable of working in tight partnership with your in-house teams to enhance the product, is often the answer.\n\n![](/img/team-meeting-in-apollo.jpg)\n\nFrom producing a plan for refactoring your product to building a solid, enhanced and sustainable new version, an expert scaling team will guide you through this stage of your product development (and, in the wider context of your business, your digital transformation journey).\n\n## The scaling team in action – PSO, a real-life example\n\nPSO (or Polskie Składy Oponiarskie) is a leading tire wholesaler in the Polish market. The company decided it was time to upgrade its online sales platform. The fact that this was a long-term project to be carried out while simultaneously maintaining the existing site made it a special challenge. \n\n[Check our technical case study of PSO](https://www.boldare.com/blog/machine-learning-content-moderation/)\n\nAt this point, Boldare had been working with PSO for some years, including building the current online store, so our familiarity with the details of PSO’s operation and history of collaboration were excellent foundations for the scaling work. Over a two-year period, the platform was expanded and improved for both B2B and B2C users, including the following points:\n\n* Elimination of double entries in the product database (a significant task with 7+ million products being updated seven times daily).\n* Reduction of the product catalogue upload times (post-scaling, upload times are a quarter of what they were before).\n* Addition of business intelligence solutions for PSO’s B2B users, including advanced statistics and competitor comparisons.\n* Integration of the sales platform with the company’s platform for tire installation services.\n\n### Enhancement of the user experience and interface\n\nThe headline results of this scaling project include 5,000+ regular users (a 50% increase in paying site members), more than 7 million products on offer, and 180,000 orders annually.\n\n> “We’re happy that after many months of hard work we can see clear results and increased satisfaction for end users who, instead of thinking about problems, offer interesting solutions for the already functioning application.”\n\n<BlogQuoteAuthor text={`Tomasz Jeziorek, PSO IT Manager`} />\n\n## Effective scaling of digital product\n\nWhether it’s the final key stage in the development of a brand new digital product, or the upgrading and improvement of an existing, proven platform, scaling is all about focused product enhancements while the product is in use – preferably, without the existing users experiencing any disruption at all. \n\nAt Boldare, our bespoke scaling teams are selected for their unique combinations of knowledge, skills and experience. Capable of rapid, detail-oriented work, our scaling teams incrementally improve your product by working alongside the client in an environment of collaborative expertise."}],"job":null,"photo":null,"cover":"/img/working-in-the-office.jpg","lead":"Scaling is a process of applying significant changes to a product incrementally to ensure it is perfectly suited to a long-term market presence. Our **scaling teams **are focused on rapid, stable improvements and are equipped with a mix of technical and people skills to bring each project to a successful conclusion.","templateKey":"article-page","settings":{"date":"December 13, 2018","slug":"scaling-team-for-digital-product","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"97b4ca81-c274-565c-84db-4d0e62bf2d7a","fields":{"slug":"/blog/user-satisfaction-user-perspective-user-oriented-approach-an-interview-with-product-designer-pawel-capaja/"},"frontmatter":{"title":"\"User satisfaction. User perspective. User-oriented approach\" - an interview with Paweł Capaja","order":null,"content":[{"body":"Behind every well-designed product stands an experienced and skillful Product Designer. I asked **Paweł Capaja**, a **Boldare Product Designer** to share his thoughts and insights on the role of the Product Designer in the Digital Age.  \n\n## What does it mean to be a designer of digital products?\n\n**Paweł Capaja:** Well it means many things. But I’d list my top 3 as creation, guidance and help. \n\nYou create things from scratch almost every day here. If not from scratch then it comes from different puzzles that you combine and - voila! a new thing appears, a new experience has been created. \n\n**Guidance** is important also as not only do we guide product users to their goals while they use the products we create. It is also about guiding clients in how to please their users. How to approach business needs and product scaling.\n\nAnd then there is help. Product Designers are here to help. It’s connected to guidance I guess but since users are our main focus we ought to do everything we can to make their lives easier and help them reach their goals. That, or we can mess with their lives with some bad decisions of ours. Not cool, right?\n\n## What does your work with clients look like? What do they expect, what can you offer them?\n\nFrankly they can expect many things but mostly they need a **complementary solution to their problems**. Sometimes help is needed to define those problems in the first place. Sometimes to validate their ideas. And sometimes to create a solution and teach them how it works and how they and the product users can benefit from it.\n\nAnd this is what our work looks like. Once we join our clients - and this is something I really cherish here in Boldare - we become a team. A **team that gathers experts** from different areas. That combination of knowledge allows us to reach for success. We share our knowledge and combine our skills. Communication here is crucial to define the steps required for achieving our business goals. And since everyone contributes to the final result, and the product goes live in whatever form - satisfaction results!\n\nAnd I suppose that is what we - Product Designers - can give them - **client and user satisfaction. **\n\n![Paweł Capaja Product Designer at Boldare](/img/pawel-capaja-boldare.jpg)\n\n## How can a product designer help guide the validation of the client’s business needs?\n\nAs I mentioned before, **communication here is crucial**. As Product Designers we have the opportunity to work with many different markets and to get to know different user profiles at the same time. This gives us some experience to validate some things from a wider perspective. But it is more like a gut feeling and that sounds a bit too much like Jedi powers. No metrics or numbers involved. Bummer right? No real evidence here…\n\nLuckily, we have few tools to help us with that. Together with our clients we try to **narrow the project’s scope** so it can be verified in real life ASAP. This often requires an MVP approach. But once we reach that step we can test everything from the business model to [UI and UX solutions](https://www.boldare.com/work/why-design-matters/). Thus verifying our hypothesis. \n\n**We guide them through that process** because at some point they need to drop the idea of the Perfect Solution and try to reach the users with minimum functionality - enough just to let us know if the solution works for the target users.\n\n[Read an interview with Machine Learning Team on predictive maintenance ](https://www.boldare.com/blog/predictive-maintenance-wind-turbine/)\n\n## What is the most important aspect of designing digital product?\n\nUser satisfaction. User perspective. A user-oriented approach. Understanding the user needs and expectations regarding the products we create. You have to keep this in mind at every stage of product-building.\n\n## Could you elaborate?\n\nCan I? Do we have time for that? I’ll try to be short. Let me briefly sketch it for you. Every great product starts from an idea - mostly from an impulse, a trigger, a moment or situation. Spontaneous mostly. After that moment you have to get serious.\n\nIf we want to invest money in our idea we need to know a lot of things. But for the sake of this conversation, let’s pretend our client already did things like market and user research.\n\nWe have all this knowledge gathered so based on that we can turn ourselves into users and try to use the product from their perspective. We list their needs and expectations. We follow that route when developing and reaching the **MVP level**. And finally we bring it to them and ask if this is what they needed. We collect their feedback and iterate an improved solution.\n\n![Paweł Capaja Product Designer at Boldare](/img/pawel-capaja.jpg)\n\n## How you reconcile the needs of users, clients and the need for personal expression in your design?\n\nEvery designer has his own style, no doubt about that. And if you know them well enough you can tell them from their designs. Is that an obstacle during the **product creation process**? Not really. I don’t think so. It creates variety. Helps to see similar problems from different angles. And users are satisfied as long as the tool is easy to use. They don’t bother about the shape of buttons or link colors as long as they understand the solution that is there to help them. \n\nAlso, different stages of the process help to validate how far or how close we are to our client’s expectations. We have a step using **moodboards**. It is totally about look and feel where designers can express their vision and compare it to the one that came from the client. Mostly that synchronization helps in further cooperation. \n\n[Read on article about design sprints ](https://www.boldare.com/blog/what-are-design-sprints/)\n\n## In your opinion, how does design these days influence the way companies build their products?\n\nWell lucky for us we live in times where design matters and currently it has a huge business value. Good design means something is better and easier to use. Means more satisfaction from having and using it. \n\nIt’s hard to know where it came from. But you can tell from Apple products or Red Dot Awards how significant it is and how much influence it has regarding business.\n\nThat is one side of the coin - **things need to be pretty**. But there is a second - **products also need to be smart nowadays**. And that is great. Also it means you have to get some smart Product Designers to work on it. People who can predict behaviors and answer users’ needs.\n\nAnd look where it goes now? AI and predictive algorithms? That is crazy, man! Makes you want to see the future already. \n\n![Paweł Capaja Product Designer at Boldare](/img/pawel-capaja-product-designer.jpg)\n\n## Let’s talk a bit more about you. What are your inspirations?\n\nThe thing is, in my opinion **everything can be an inspiration**. At some point, you pay attention to all of your surroundings in great detail, checking how things work. Door handles, restaurant menus, Tesla cars - all this fits in and you start to see patterns and solutions. It is in you, the need for design satisfaction.\n\n**Teammates are also a great inspiration**. We all do internet research about how things work and what new projects other people are doing but there is nothing better than talking with your fellow designers. Catching different perspectives and understanding the variety of different angles can open your eyes to things you did not expect.\n\nAnd of course, music. I guess it stimulates our brains very much. It helps in giving you that impulse for creation. Also, it sometimes helps to feel like the target user if you’ve chosen the right music.\n\n## Who or what has been the biggest influence on your work to date?\n\nHard to tell. You want me to drop few names? I’m bad at remembering names {laugh}. I guess **Tobias van Schneider **and the way he communicates to his audience. He reminds me that the communication can take different forms. Plus his designs follow the „Less is more” rule, which I cherish a lot.\n\nAnd since the whole world is moving towards more and more immersive interactions, **Gleb Kuznetsov **is my inspiration regarding movement and animations. I am nowhere near that level but every time I see this guy in action and his works it gives me chills. It’s like watching the near future of the interface. Awesome animations.\n\nAnd there are some more but I guess there is no sense in listing all of them here. But for sure it is worth watching other designers out there. Not only paying attention to your own solutions. \n\n<div class=\"cms-iframe\" style=\"width:640px; height:360px;\"><iframe src=\"https://player.vimeo.com/video/279617836?\" width=640 height=360 frameborder=\"0\" allowfullscreen></iframe></div>\n\n## How has your role as a product designer evolved over the last years?\n\nIt is quite a route actually. An evolution from two separate roles (UX and UI designer) including involving **business perspectives**. To be honest, I do not understand how most people try to separate those. Why would you want to narrow yourself and lose the perspective? For building better products, you have to know all of the above to find the correct solution and even then it’s hard. You can’t be 100% sure. \n\nAlso **direct communication** with the client has moved ahead and I love it. There is no better way of understanding needs than talking face to face and discussing the problem directly. Easily done nowadays. \n\nFor sure the number of skills and areas to cover have grown in number but it also creates a lot more opportunities. Which I am glad of.\n\n## Which projects are you most proud of and why?\n\nMost projects I worked on were fun. There were no two projects the same ever. Behind every one of them stand interesting people with totally different problems to solve. Different cultures, different places. \n\nBut I guess if I had to pick two it would be the Sonnen Charger App and the Polco Voting Platform. And the reason is, they were concerned about their users most of all. And it gave pretty nice results, I guess.\n\n![](/img/polco-mobile-and-web-app-mockup.jpg)\n\n## What was special in these projects?\n\nLike I said,  their concern for their users. They knew their target very well and it helped a lot in building a better product, in my opinion.\n\n**Polco** is a company from Texas USA and we had pleasure of creating two releases for the platform (hey Alex, how are you man?!). The first was an MVP created to validate market needs and the second one was all about improving the experience and the needs of target users. \n\n\\>> [Read Polco Case Study](https://www.boldare.com/blog/case-study-polco/)\n\n**Sonnen Charger** was a bit different. They also knew their users very well. But it also involved a specific mindset (green energy and ecology) that defined a lot of behaviors. The solution didn’t have to be perfect as long as it fulfilled the higher purpose. There was a lot of dedication to it and it was fun to help the client achieve their goals regarding users. Especially because the users themselves were very keen on trying new things and giving some feedback. I guess I learned a lot. Plus - great team we had there!\n\n## What tools do you use on regular basis?\n\nI guess the standard ones - Sketch (sooo smoooth), Adobe package (sooo overpriced), Invision, Zeplin (the force is strong with this one!) and my favorite for prototyping - Flinto (deserves more hype, I guess). Last but not least - pen and paper.\n\n## In your opinion, what is the role of a designer?\n\nThe last one is a killer, hehe! Oh there are many! Teammate, guide, explorer, psychologist, motivator, dreamer, visionary, selfish bastard\\*\\* \\*\\*you pick one!\n\nA **teammate** because I already stated we are all members of one team. Even the client with his knowledge about the product and the business idea takes part in it. And since communication is so important throughout the whole process, you want all your team members to feel encouraged to discuss everything. That’s fun actually.\n\nA **guide** because you help to go through the whole process of the product creation. Before the actual development, the Product Designer has to know as much as possible about the case to direct the solutions in the right direction. And to help your client to go with you and understand it all.\n\nAn **explorer** means you do a lot of research and combine different puzzles to create something new. And most of the time you do not know how things will work out. Not until users validate your ideas. This means entering some wild areas sometimes!\n\n![Team work](/img/team-work-desinger-pawel-capaja.jpg)\n\n**Psychologist **but not in terms of a PhD! That would be nuts :D But understanding the basics of human behavior helps a lot; for example, in bringing the right mood to the product for users.\n\nBeing a **motivator** means keeping your team on the right track and helping them to see the bigger perspective when things get tough. \n\nA **dreamer** because we Product Designers dream about the perfect implementation of our wild ideas someday, maybe !\n\nBy **visionary**, I mean a role which predicts some solutions even ahead of the current state of the market. It is hard and risky but if you have enough confidence it will pay off I can assure.\n\n**Selfish bastard is my favorite**. Confidence would also fit here but it would sound less dramatic wouldn’t it, hehe? It is possible that in your team sometimes it is not so nice and easy. Not all will understand the path you take during product creation and sometimes you have to force some solutions abit. And after it pays off and it has worked, you have more trust in each other. A very important role in my opinion.\n\n## Thanks for your time Paweł\n\nWell well, it seems we’ve reached the end. Thank you Kamil for the experience. It was nice talking with you! I hope I helped a bit and see you soon!\n\n![Paweł Capaja Product Designer at Boldare](/img/pawel-capaja-at-work.jpg)\n\n### Know better Paweł Capaja\n\nPaweł is a Product Designer with 10 years of experience on the market. He worked in different aspects of the industry, from the e-commerce side up to pure marketing agency tasks and now, in Boldare. \n\nWhy did he decide to choose this career path and has joined Boldare? \n\n> I guess I wanted something more than just pure designing and so the idea of product design emerged. It seemed perfect and since that time (nobody knows the exact date!) I have been an eager enthusiast of the design approach and working together with clients and their products."}],"job":null,"photo":null,"cover":"/img/cover-photo-blogspot.jpg","lead":"When you’re building digital products, **good design matters**. A well-designed digital product does more than just function; it does so reliably and gives the user exactly what they need and want. It reduces overall costs, increases conversions, and builds long-term loyalty in the customer.","templateKey":"article-page","settings":{"date":"December 12, 2018","slug":"product-desinger-pawel-capaja-interview","type":"blog","category":"Ideas"},"contributor":"Kamil Mizera"}}},{"node":{"excerpt":"","id":"be4dba11-a1c4-5a55-94de-13271c6c5fe7","fields":{"slug":"/blog/the-what-why-and-how-of-mvps/"},"frontmatter":{"title":"MVP development - what, why & how","order":null,"content":[{"body":"Here at Boldare we’re **agile**, we use** Scrum**, and we love the [lean startup ](https://www.boldare.com/blog/lean-process-for-better-product/)approach, using it to develop world-beating and innovative products and software. \n\nIs it because agile, scrum and lean are such fashionable concepts these days? After all, there are plenty of organizations following such methods blindly (try googling “lean startup religion”!) without thought of how (or whether) they should be applied to their specific business situation. \n\nNo, at Boldare, **we use these methods** simply because they can be **incredibly effective for the kind of work we do**: [digital product design & development and digital transformation](https://www.boldare.com/product-design-and-development/). We say, “can be” because like any method or model, whether lean startup is effective depends entirely on applying the principles intelligently to the specific context of your project and that depends on understanding lean startup concepts, their potential benefits, and how they work in real life. One concept that is talked about a lot but often causes confusion is the minimum viable product, or MVP.\n\n[Check how we think about MVP and product development cycle at Boldare](https://www.boldare.com/full-cycle-product-development/)\n\n## What is a Minimum Viable Product?\n\nFrom a lean startup perspective, testing the whole product is often too expensive in terms of time and effort. Hence, an **MVP is a product which has just enough features to gather validated learning** about the product and its necessary further development. It’s functional but it is not a full version of the product. \n\n![MVP stage](/img/mvp.png)\n\nThe **minimum viable product** is arguably the central concept of the lean startup approach. You’ve spotted a problem. Even better, you think you have a solution; a desirable and profitable one. But how do you know whether it will fly with your target market? \n\nYou could ask them but the responses will be mostly theoretical and subject to change in practice; besides, as we all know, not everyone takes such ‘surveys’ seriously. No, far better to create a version of your solution and test it. The beauty of the MVP is that it **demonstrates the core aspects of your proposed solution** for testing with users, allowing you to observe their actual behavior and responses. \n\nPut another way, MVP is: \n\n> A minimum viable product (MVP) is a development technique in which a new product or website is developed with sufficient features to satisfy early adopters. The final, complete set of features is only designed and developed after considering feedback from the product's initial users.\n\nIn essence, you build an MVP and test one or two functions (maybe it’s just the landing page from a website, or the online purchase process for a retail outlet). \n\nThe resulting **feedback influences the further development** of that feature, and also guides the project as a whole (after all, if everyone hates the landing page, there’s no point in designing the rest of the site until you’ve fixed the problems with the MVP!)\n\nHowever, perhaps equally important is what a minimum viable product is _not_.\n\n* An MVP is _not_ just a product with a few features missing.\n* An MVP is _not_ an early release (though it may lead to one).\n\nAn **MVP is an experiment** – a means of testing a potential part of your solution.\n\nThe reality is that you don’t know what your final product will look like. From the beginning, working on your identified problem, your planning and development are based on assumptions – what users want, what’s missing from the market, etc. – and a development process that does not test those assumptions is likely to fail.\n\n[Check out our approach to MVP on the Polco case study](https://www.boldare.com/blog/case-study-polco/)\n\n## Why minimum viable products are useful\n\nA development process that includes an MVP can be highly efficient. Eric Ries, author of “The Lean Startup” defines an MVP as, “_…a version of a new product which allows a team to collect the maximum amount of validated learning about customers with the least effort.”_ In other words, you get the** maximum return from a minimum investment**. \n\nAn MVP gets your solution (the essential parts of it) in front of users and enables you to find out if you’re on the right track to solving your identified problem. Apart from the design and project benefits, an **MVP can be extremely motivational**. The project team has something tangible to show for its efforts. One MVP tends to lead to the next, giving the project direction and momentum. \n\nThe purpose of an MVP is to:\n\n* Test a product hypothesis with minimal resources.\n* Get the product in front of users as early as possible.\n* Maximize the information learned.\n* Reduce wasted development hours.\n* Avoid building a product that users don’t want.\n\nYou’re also testing your audience (are they right for your product?) and beginning to build a potential community of users and advocates which offers long-term benefits.\n\n## What are the benefits of creating a minimum viable product\n\nAs already mentioned, user responses to your MVP will tell whether your development process is heading in the right direction or not. What’s more, an MVP can result in an improved understanding of:\n\n* **The identified problem** – is it addressed/solved by what you’ve developed so far?\n* Your **target audience** – are they right for the product? (Sometimes, disappointing feedback may be an indicator that you’re pitching to the wrong people and not that your product is the wrong solution.)\n* Likely **profitability** – an enthusiastic response to the MVP can indicate sufficient interest in where the product is heading, including potential sales.\n* **Future development **– test results act as a signpost for the next stage of the design project, and testing MVPs can quickly create a budding user community and establish a feedback loop for the product’s future iterations.\n\n![build-measure-learn](/img/build-measure-learn.png)\n\n## Potential minimum viable product pitfalls\n\nHowever, like any other methodology, the **MVP route includes a pitfall or two** that must be avoided or, at the least, learned from. \n\n* **Lack of viability** - Firstly, a key element of the MVP is the ‘V’ – it must have business viability: a genuine solution that people are willing to use (as for how many people, that depends – how many do you need for the development process to be worthwhile?)\n* **Lack of sufficient detail** - Within the project team itself, there’s a risk that the focus settles on the ‘M’ aspect, if the MVP is too –minimum- then there may be an adverse impact on quality. If it doesn’t give a true indication of where the final product might be headed, the feedback won’t enable an accurate assessment of whether users will adopt the product.\n* **Lack of user understanding** - Finally, testing a minimum viable product assumes that your test users (your potential early adopters) can grasp the intended purpose of the product and provide the necessary feedback. If they cannot then you probably haven’t explained the context clearly enough. This pitfall is why the lean startup approach is so well-suited to software and technology development: you’re usually dealing with a very tangible and easily understood MVP, and test users tend to be technically-minded and therefore better able to follow your intentions.\n\n## The Boldare MVP process\n\nBoldare's specialty is design and development that is sharply focused on the business needs of our clients and the MVP is essential in ensuring that our results are always more than fit for purpose.\n\nWe use the Scrum methodology with its **clear project roles** (developers, designers, product owner, scrum master) and **short sprints** (1-2 weeks) to work rapidly and productively, often creating a series of MVPs as part of a development path spiralling upward in a series of continuously improving iterations that test each potential element of the final product.\n\n![](/img/team-working-together.jpg)\n\nA generalized summary of the minimum viable product process at Boldare is as follows:\n\n* **Product basis **– the product vision workshop kick-starts the process of exploring and validating the product concept, building a strong and shared understanding of the product vision.\n* **General UI/UX** – a user interface (UI) concept is developed (possibly using a clickable wireframe prototype), which then acts as a guideline for the product’s graphic design; options for the graphics are often tested with the client at an early stage using mood boards to present a choice of styles.\n* **Wireframing** – wireframes are developed to explore different UI ideas and the basic structure of the product architecture is laid out.\n* **UI/UX design** –  based on the mood boards and wireframing, two sample homepage designs are produced as clickable prototypes for the client to choose from.\n* **MVP building** – Based on feedback and learning so far, we build a product with just enough features to gather validated learning about the product and its further development.\n\nA key aspect of our process is always the **consultancy approach** we bring to each client. By beginning each and every collaboration with a 1-2 day product workshop that brings the client and the development team together, we ensure that we really understand the client’s needs in depth. This enables us to lay out a custom development strategy for the client, including MVP releases for testing.\n\nWhat’s more, at Boldare we believe our role includes **knowledge transfer**. During the course of a project, we share our knowledge, processes and techniques with the client, viewing the project as part of the client’s greater digital transformation journey. This gives the client the option of conducting future development in-house, enabling sustainable growth.\n\n## Minimum viable products in practice – Ralloo, a case study\n\n**Ralloo** was a startup in the process of developing a crowdfunding platform, initially targeting the UK market, with a plan to expand internationally later.\n\nIn this case, the MVP was essentially a preview of the final product. It had the on-screen look and feel of a working website but in fact had just two functions available: the process to start a crowdfunding campaign, and a page of existing (fictional for MVP purposes) categories and campaigns. In other words, the MVP included the central features of the final app for testing.\n\n![Rallo](/img/rallo-mockup.png)\n\nThe aim was to **validate the appeal of the final product**, and to give the client something they could use as a demonstration when seeking venture capital.\n\n## MVP - the Boldare's perspective\n\nIn the Boldare approach to design and development, the MVP is the core-value-proposition-wrapped-up-in-essential-features-only version of the product. The MVP process is one of experimentation, testing features and ideas to discover their impact in the real world, and how well they fit with the client’s business needs and goals. \n\n**The benefits **of using this kind of practical exploration include a deeper understanding of the product concept, and a higher quality final result. By keeping the MVP at the core of our development process, product ideas and features may radically change during the course of the project but the output will be exactly what is needed."}],"job":null,"photo":null,"cover":"/img/rallo.png","lead":"The minimum viable product (MVP) is the is a core element of the product development approach we use at Boldare. However, there can be confusion about just **what an MVP is and what it is for**. Here, we lay out the Boldare take on MVPs and how we use them to achieve maximum results for our clients.","templateKey":"article-page","settings":{"date":"December 12, 2018","slug":"mvp-what-why-how","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"68a10263-08e5-5906-aa47-8a3e56250b23","fields":{"slug":"/blog/product-vision-workshops-seeing-clearly-from-the-beginning/"},"frontmatter":{"title":"Product Vision Workshops – seeing clearly from the beginning","order":null,"content":[{"body":"Let’s be clear, our approach is **based on experience not theory**. We look to use the specific techniques best-suited to the individual project and client. \n\nWhat our long experience has taught us is that when we start a digital product development project, we don’t want to talk about the product. We want to talk about **the product vision**. Why is that? Because enjoyable as the creation phase is, first we need to fully understand what we are creating, and why. Only then can we agree on a product development strategy and then begin the work on the product itself.\n\n## The product vision toolkit\n\nWe have many tools at hand to help us dig into what’s really driving the project, including:\n\n* **Business Model Canvas**  – this template is used to gather details of the needs and goals of the client’s business, the company’s value proposition, its infrastructure and finances, its customers; this tool gives us the bigger picture in detail, going beyond the context of the product. \n* **Product Canvas** – this canvas ensures that the development process address the key questions in relation to your product: the target users, its purpose, its goals, the metrics that will measure success.\n\nOne of our key kick-off activities on any project is to **compare these two canvases**, ensure they are aligned, and explore further any discrepancies or contradictions between the two.\n\n* **System Story** – this is a deceptively simple-sounding exercise: create just one sentence to describe the product being built; it’s all the relevant information condensed to a single focus and provides an answer to any questions or doubts during the project - when a developer, designer or analyst is faced with options or choices, the system story indicates the appropriate direction.\n* **Pre-workshop questionnaire** – prior to the Product Vision workshop, we ask client to complete a pre-workshop questionnaire; this gives us much of the essential information beforehand and allows to quickly focus on the sticking points and key issues.\n* **Product Vision Board **– ultimately, all the details are summarized using a product vision board, including the vision itself, the target users, the need or problem that the product will solve, and link to the client’s business goals. \n\n<RelatedArticle title={`System Story – the little sentence that builds big things`} />\n\n## What is a product vision?\n\nFor a definition of product vision, we think it’s hard be beat the one offered by **Roman Pichler,** author of _Strategize: Product Strategy and Product Roadmap Practices for the Digital Age:_\n\n> The product vision is the overarching goal you are aiming for, the reason for creating the product. It provides a continued purpose in an ever-changing world, acts as the product’s true north, provides motivation when the going gets tough, and facilitates effective collaboration.\n\n**The product vision is a set of data or information**. That information relates to the product, its target users, and the project goals. It is not a list of product features for the development team to implement. At this early stage, it’s all about the problem or need instead of what kind of solution will be built.\n\n![system story](/img/team-work-desinger-pawel-capaja.jpg)\n\nNot only does the **product vision kick-start the project** by exploring and validating the concept behind the product, it also builds a shared understanding that can be invaluable in keeping the project on track. And a two to three-day facilitated Product Vision Workshop with the client is the event on which this activity centers.\n\n## The purpose and process of the Product Vision Workshop\n\nEach product vision workshop has clear **standardized objectives**, designed to pull out each project’s unique aspects. Those objectives are:\n\n1. Produce a vision and strategy which translates into the development of a product vision board plus system story.\n2. Establish a decision structure for the project.\n3. Ensure the Product Owner (client representative) has a clear vision of the project agreed with stakeholders.\n4. Project and development roles and responsibilities are agreed.\n\nBefore the workshop takes place, we ask the client to complete a pre-workshop questionnaire. This document contains 22 essential questions, diving deeply into five key topic areas: target users, competitors, weaknesses (including the client business, the desired product, and the target users), values, and image.\n\nOnce we have a completed questionnaire, **we prepare for the workshop **by looking for any areas that are incomplete or contradictory and then we spend the workshop time more productively by tackling the misunderstandings, the non-aligned elements, and any lack of clarity, using tools such as [Pichler’s Product Vision Board](https://www.romanpichler.com/tools/vision-board/).\n\nThe other key output of our Product Vision Workshop is the system story, mentioned above. You may have come across similar tools, often labelled ‘product story’ or ‘product statement’ but whatever the name, the core is four small but tough questions:\n\n* **What** exactly are we building?\n* **How** are we going to achieve our goal?\n* **Who** exactly is it addressed to?\n* And… a tricky one: **what for**?\n\nLet’s be clear, the system story is not easy to write. It’s intended to act as a summary of the information from the workshop and as the project compass, and as you might expect, creating a one-sentence version of everything so far usually takes a while.\n\nHowever, once you have it, that single, perfectly descriptive sentence is the gateway through which the whole project must pass. Or to put it another way, it’s a traffic light – whatever ideas or features or strategies arise for discussion as the project progresses, there’s just one question: _Does it further the system story?_ If the answer is yes, then it’s a green light, go ahead. If it’s a no, then red light.\n\n![team](/img/working-in-the-office.jpg)\n\n## The benefits of having a Product Vision Workshop\n\nWell, aside from,\n\n* clarity on all project-related matters,\n* a cross-organizational team working with a single understanding,\n* a guide for future project decisions,\n\nthe product vision workshop is also the most efficient and time- and resource-effective method of starting a project we’ve found so far. It’s an essential opportunity for the client and the whole product development team to meet and talk, setting the standard for communication for the whole process (hint: openness, clarity, questions and two-way feedback are what we’re aiming for every time). **Bringing the key players together** on a highly focused task builds trust, and motivates and inspires the team.\n\nWe often say that at Boldare we like to join the client’s team rather than act as traditional outsourcing providers, and the Product Vision Workshop is key to achieving that.\n\n## Product Vision in action – Virgin Radio Oman, a Boldare case study\n\nTo support a new youth-oriented radio station in Oman, SABCO Media had just four weeks for the** development of mobile apps and a web app for the Virgin Radio brand**. This was an interesting challenge in which the product vision had to take account of the needs of a strong global brand with a well-known visual identity, while reaching out to a specific demographic (Generation Z) and culture. \n\n<RelatedArticle title={`From design to development in 4 weeks. Creating a mobile and web MVP for an iconic brand`} />\n\n**The Boldare team** included two designers, three frontend developers, one iOS developer, one Android developer and a Scrum Master. The whole team was at the Product Vision Workshop, along with the client’s Product Owner and other key stakeholders.\n\nFirstly, the workshop highlighted the existence of a **number of product goals**. To keep the project focused (and with the short timescale in mind) a single goal was agreed: To introduce young, hip music lovers to a completely new disruptive and innovative place they can call their own.\n\nFor the metrics, there was no legacy data to draw on (Virgin Radio Oman was offering a completely new teenage music experience in Oman) so the number one key metric was, “convert users into active and returning radio listeners”.\n\nThe most important outputs were **the system story** - “Web and mobile platforms providing the listeners with a disruptive and innovative place they can call their own; for teenage music lovers who lack other alternatives.” - and a series of user stories which gave insight into the product scope and informed the specific tasks that would contribute to achieving the project goals.\n\n![Virgin Radio Oman](/img/virgin-radio-oman-mobile-app-designs.jpg)\n\n**The result was that MVPs of the two mobile apps and the web app **were launched within a very tight deadline and SABCO is now looking ahead to the next phase of product development, with Boldare as partner.\n\n> “I admire their organized methodology. At several stages, their work made me feel confident I’d chosen the right partner.”\n\n<BlogQuoteAuthor text={`Neil D’Souza, SABCO IT Manager`} />\n\n## A summary of Product Vision Workshops\n\nThe Product Vision Workshop is the essential start to a digital product development project. By gathering all the key players into one place, the core project information can be discussed and agreed, including goals, scope and responsibilities. The results then become an invaluable way of keeping the project team focused and aligned with the client’s business needs."}],"job":null,"photo":null,"cover":"/img/team-meetings.jpg","lead":"At Boldare, we deliver high quality digital product development through a combination of the lean startup approach and the agile scrum framework. The foundation of our process is a rigorous product discovery exercise at the beginning of every project, resulting in a clear (and agreed) product vision to keep the project on track.","templateKey":"article-page","settings":{"date":"December 11, 2018","slug":"product-vision-workshops-toolkit","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"f3b97c7c-4034-565a-89af-dd7bdfd33cea","fields":{"slug":"/blog/digital-product-prototyping-it-s-a-team-effort/"},"frontmatter":{"title":"Digital Product Prototyping – it’s a team effort","order":null,"content":[{"body":"So, it should be no surprise that we take great care in how we put our teams together, tailoring each unit’s experience and capabilities to create the perfect mix for each project, and for each project phase. When it comes to [digital product prototyping](https://www.boldare.com/blog/digital-product-prototyping-whats-it-all-about/), both a specific skill set and mindset are necessary.\n\n**The prototyping team’s function is to analyze your product concept** and business goals, ideate the product with you, create low-fidelity or high-fidelity prototypes, and use the reactions of customers to the prototyping to explore the basic product assumptions. All of which allows the team to go on to build the best [possible minimum viable product ](https://www.boldare.com/blog/mvp-what-why-how/) (**MVP**). They use a variety of methods, including [design thinking](https://www.boldare.com/blog/what-is-design-thinking/) and [design sprints](https://www.boldare.com/blog/what-are-design-sprints/).\n\n![prototyping](/img/2_full-cycle-product-development-stages-prototype.png)\n\n## Quick context: What is digital product prototyping?\n\nPrototyping is the first **test of your product idea with users**. The prototype is a presentation to potential users and customers in order to get a reaction. That prototype may be barely functional, it may be a façade of a product, and it may not resemble the eventual final product at all. \n\nIn general, prototypes can come in many forms (including paper, video, digital…) but with Boldare’s focus on digital product development, when we do create a prototype, it almost always has some kind of digital presence or format.\n\nPrototyping is not necessary for every **digital design project** – sometimes the first tangible output is a minimum viable product, or MVP – but when they are indicated, they are:\n\n* Quick.\n* Cheap.\n* Low risk.\n* A way of better understanding the proposed product.\n* The first ‘real-world’ test for your product concept.\n\n<RelatedArticle title={`Digital Product Prototyping – what’s it all about?`} />\n\n## Putting together a prototyping team\n\nThe accountabilities of the prototyping team can be summarized as:\n\n1. Minimizing the risk of failure in the long run.\n2. Tackling real customer needs, with empathy, in an innovative way.\n3. Conducting small experiments and tests.\n\nIn light of these accountabilities, and depending on the nature of the project and the product being developed, **the prototyping team** typically includes people with experience in a variety of **key roles**:\n\n* Frontend Developer\n* Visual Designer\n* UX Designer\n* Product Designer\n* Business Analyst\n* Scrum Master\n\nEach prototyping team is a unique blend of skills, knowledge and experience, created to fit the requirements of the project, as discussed with the client. \n\nIn light of the roles listed above, this usually means a mix of various **prototyping techniques** (including Design Thinking, Wireframing), KISS techniques (Keep it Simple Stupid), Business analysis, and numerous testing methods and tools. \n\n**The technologies** they may be called upon to apply to the client’s concept might include JavaScript, JS Frameworks like React or Angular, InVision, Flinto, Framer.js, LYMB, HTML, Bootstrap, and Foundation. \n\n![dev team](/img/room-in-open-space.jpg)\n\nAlongside these more technical requirements, we also take into account our own** team selection criteria at Boldare**, focused on achieving high levels of performance and teamwork:\n\n* People who have already worked together – Familiarity within a team is a key driver of performance and at Boldare, we always include at least two team members who have been colleagues on a previous project. This familiarity can make the forming and storming stages of the team development process much easier (and shorter). From day one, our teams deliver real value.\n* Highly skilled people – Each team has a balance of complementary soft and hard skills, including self-organization so that both individually and as a team, people work flexibly and with responsibility.\n* Mixed seniority – We find that a combination of experience and fresh perspective makes for the perfect team. When prototyping, we bring both to the table for the client. \n\n## The perfect prototyping culture\n\n‘Culture’ is a fancy way of saying, how we do things around here. Every team has one and it should be a perfect balance of the individuals who make up that team and the needs of the project. A team’s culture can be seen in how its members work together, how they collaborate with the client, and in the outputs that they produce.\n\nHere at Boldare, a digital prototyping team works on the **following principles**:\n\n* Balancing the measurable and the unmeasurable (emotions, connotations, habits)\n* Quick decision-making\n* Appetite for bold ideas\n* Learning from failure and risk\n* Essential experimentation\n\nThe one element that takes more of a backseat in this phase of the lean startup approach is product quality. Because we’re not making a product, we’re making a prototype. And a digital prototype sometimes only needs the appearance of a product in order to test an idea, concept or hypothesis.\n\n<NewsletterSmall id={`article-middle`} />\n\n## Benefits of working with a prototyping team\n\nHaving clarified the underlying concept, needs and business goals, the prototype is the first step into the external world for the project. \n\nBy drawing on the outputs of the [Product Workshop](https://www.boldare.com/blog/product-vision-workshops-toolkit/), the prototyping team follow the **lean startup principle **of build-measure-learn to test and refine your ideas and turn them into a testable design. \n\nThe team then applies its expert skills and knowledge to the customer reactions to the prototype to further support the development process, ready for the next stage. They bridge the gap between the Product Workshop and creating the MVP – the gap between ideas and a functioning product – and lay the practical foundations for a successful product.\n\n## The prototyping team in action – BlaBlaCar, a real-life example\n\nAt the beginning of the project, well-known carpooling platform, BlaBlaCar had 24 million users and an enviable position in the marketplace. However, the goal was to expand into 27 new countries, each with their own unique legal and cultural requirements, while also expanding the design of the company’s app with new and improved features.\n\n![blablacar](/img/blablacar-app-designs.jpg)\n\nWhat BlaBlaCar was lacking was an agile, self-organizing in-house development team. The longer-term strategy involved establishing a development center in Warsaw. However, BlaBlaCar knew that it would take too long to recruit, onboard and train a new development team and was looking for a readymade external team that could work closely with the company.\n\nWhat made Boldare right for BlaBlaCar? We met their **partnership criteria:**\n\n* Quick reaction times and fast work (the team was ready to start within two weeks).\n* An already high-performing unit that could become a full-time extension of their own team.\n* Skilled developers and product designers (each individual was interviewed separately by the client).\n* Similar organizational DNA (in this case, a mature company but with a startup culture built on trust, accountability, knowledge-sharing and teamwork).\n\nImplementing a prototyping approach based on collaboration and transparency, the Boldare team created 10 new digital products for BlaBlaCar, enhancing the customer offering and now the company is market leader in its chosen regions, having boosted membership from 24 to 35 million users. \n\n> I was lucky to work with these guys for almost a year. They were very professional from the beginning to the very last day.\n\n<BlogQuoteAuthor text={`Nicolas Renon, Lead Engineer at BlaBlaCar`} />\n\n<RelatedArticle title={`Agile and skilled development teams for a French unicorn`} />\n\n\n\n## Boldare Prototyping Team - skills, experience, teamwork \n\nPrototyping is a key element of our lean product development process here at Boldare. We have experience with producing a wide variety of prototypes, depending on the element of the project we are testing. \n\nOur prototyping teams are chosen for their specific skill sets and experience, according to the project needs. Our culture of teamwork encourages the right application of those skills and experience, and also ensures close collaboration with the client throughout the prototyping phase."}],"job":null,"photo":null,"cover":"POC-teameffort-blog_cover_v4.jpg","lead":"The art of the agile organization is collaboration. In other words, teamwork is essential. Between the individual members of our in-house digital project teams, and with our clients and Product Owners, teamwork is the foundation for a successful, quality product.","templateKey":"article-page","settings":{"date":"December 07, 2018","slug":"digital-product-prototyping-team-effort","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"4ad6cf8e-d46b-5ee1-9542-91bdcc2e3b8d","fields":{"slug":"/blog/10-steps-to-becoming-a-javascript-developer/"},"frontmatter":{"title":"10 Steps to Becoming a JavaScript Developer","order":null,"content":[{"body":"It’s the programmers’ time. Companies all around the world are looking for them constantly. According to LinkedIn, there are **190,000 JavaScript-related job offers** worldwide now. Businesses try to attract devs not only by offering them a fat paycheck but also the atmosphere of the workplace.\n\nNew tech companies design their offices to boost creativity with specific space arrangements. Relaxation rooms packed with **games consoles, dartboards, foosball tables, music instruments**, **comfy furniture** and many more, are almost standard nowadays. Sounds good, doesn’t it?\n\nInterested? So, let’s see what you need to do to be a part of this new era. I’ve prepared a **step-by-step brief guide** how to join the programmer community and **become a JavaScript developer.**\n\n## Why JavaScript?\n\nIn the last few years, I have met hundreds of students. Most of them struggled to choose the programming language which would suit their ambitions and guarantee exciting job opportunities. No wonder. There are many paths a would-be programmer can choose. To pick one language and dedicate the time to master it is a hard choice. So why should you consider **JavaScript as your weapon of choice**? The simplest way is to answer the question: what is (and what isn’t) a JavaScript developer.\n\n**Is JavaScript developer a frontend developer?**\n\nMost usually, yes, JavaScript is the front layer of almost every single modern website. That means all your favorite websites like Facebook, Google, Amazon, and YouTube need and hire frontend JavaScript developers. JavaScript can also be used on the backend side but that’s another story.\n\nFrontend developers, besides writing JavaScript code, also focus on layout and styles; namely, **Cascading Style Sheets, usually referred as CSS**. CSS is used to apply colors, manage the position of elements and arrange the space on the website.\n\n**JavaScript however, is all about dynamics**. For instance, respond to user click, fetch some data from the server, dynamically update the page. It is crucial when it comes to the User Experience and User Interface, with JavaScript your website is way more flexible and easy to use.\n\nNow you know a little of what JavaScript is for, let’s find out how to become JS developer! I have prepared **10 steps for you to follow**. **Stick to them, and you should be fine.**\n\n## Step 1: Learn the basics\n\nThe hardest step of all.\n\nThere will be many problems, such as:\n\n* Where do I start?\n* I don’t understand the resource.\n* Where do I write code?\n\nAt first, set up your machine. Whether it’s Windows, Linux or Mac, get a programming IDE, or in newbie’s words “programmer’s text editor”, like **Webstorm or Atom.** Then try writing Hello World (1. below) in the selected IDE/editor.\n\nBefore I recommend any resources let me give you a hint as to the knowledge and skills you need to learn in the first place:\n\n* How to write Hello World in JavaScript\n* What is a variable\n* Variable types and how to create each of them\n* What is a loop and how to iterate over arrays\n* Document Object Model tree (DOM tree)\n* How to write HTML, learn about tags, especially: head, body, a, div and p.\n* Selecting DOM nodes. Learn key words like querySelect, querySelectAll and get used to them.\n* Have a little play with CSS. Create a first class and assign the html tags. Bonus if you learn how to do this through JavaScript.\n\nAll these things you can learn online or through a private on-site course. I leave the decision to you.\n\n## Step 2: Work on the first homemade little project\n\nThis is a crucial step. You need to get an idea of how to connect the bits.\n\nCreate a very simple static website, such as:\n\n* Calculator\n* Currency converter\n* Traffic lights simulator (with automatic switching)\n\nKeep it to yourself. Try to make it look professional. Don’t hesitate to use Google.\n\nPossibly, you will bump into projects like **Bootstrap** or **jQuery**. Bonus points if you decide to spend few days learning how to use them.\n\nAt this point, stay away from frameworks like Angular, Vue or React. You need to learn a few more things before you jump into that world.\n\n## Step 3: Take a course to solidify what you have learned\n\nMost likely you should aim for a boot camp course for beginners.\n\nIf you’ve learned a second (or third) language, you went to classes. It’s the same for programming languages and JavaScript is no different.\n\nYou may be surprised by the course price (up to 5k$+), but don’t be afraid, it will pay off quickly.\n\nIf you can’t afford an on-site course, try an online one. There are some that are 20 hours long for as little as $20. Check out udemy.com for possibilities.\n\n![Boldare's JavaScript devs ](/img/boldare-javascript-developers-team.jpg \"JavaScript developers team at work\")\n\n## Step 4: Explore best practice\n\nBy this point, you should be fairly confident in creating simple websites. You should easily be able to create html, css and js files and to seamlessly connect them.\n\nWhen it comes to JavaScript, you should now **brush up your knowledge**. You most likely feel quite confident with loops and accessing the DOM. You have probably learned how to:\n\n* concatenate strings (The concat() method is used to join two or more strings).\n* how to convert strings to integers\n* how to inject information into the DOM tree (using document.createElement and then appendChild), possibly even the use of jQuery\n\nYou have also created quite a few functions. You can explain what a function parameter is and when the function is being invoked. You know that code is being executed sequentially.\n\n**This is a huge milestone**. Congrats. Now let’s get down to the business because you are on the last few runs before interviews.\n\nFocus on how your code looks. Format it just like you learned on the courses.\n\nSplit your code into small parts. Don’t hesitate to create local variables and functions to make it clear what is going on in the code.\n\nMake sure you know how to distinguish odd/even elements in a loop, or how to color the 3rd node in the list.\n\nExplore Math.random() and other handy built-in functions prefixed with Array or Object.\n\n<RelatedArticle title={`Introducing Data Visualization in D3 JavaScript library`} />\n\n## Step 5: Learn ECMAScript 6\n\n**ECMAScript** is a standard and JavaScript implements it.\n\nMany browsers do not support ECMAScript code. Thus, ECMAScript code needs to be transpiled to JavaScript to run seamlessly in all environments. (This means replacing ECMAScript syntax with valid JavaScript code)\n\nHowever, most of today’s production code is developed in ES6 or later (ES7, ES8). ES6 is a short name for ECMAScript that was finalized in 2015. (similarly 2016 -> 7 and 2017 -> 8)\n\nECMAScript introduces new concepts that you definitely need to learn:\n\n* Arrow functions\n* Promises and async/await enhancement\n* Collections (maps, sets)\n\nThis is also great time to focus on functions like:\n\n* Map\n* Reduce\n* Filter\n\nAnd better understand the keyword this which is a common troublemaker in the JS world.\n\nBonus points if you learn advanced topics like:\n\n* Iterators\n* Generators\n\n## Step 6: Learn the first framework\n\nBy now, you should know jQuery and its basic functionality. (Even if you skipped the bonus points!) However, it is just a library and to make things more complicated, it’s not being used as much as it was previously. Now is the time to learn something that powers most newly-created websites.\n\nThe frameworks you might consider are:\n\n1. **Angular**. Actively developed by Google developers. A great framework with all of the functionalities that a simple project needs. Very friendly to learn, with great documentation.\n2. **React**. Technically not a framework. React is a library for handling views. Along with Redux, it’s on the rise. My personal choice and I recommend it to you if you are eager to learn more advanced topics and explore the future of web and native development. Used on facebook.com and actively developed by Facebook developers. Comes with great documentation as well.\n3. **Vue**. A solution just in-between React and Angular. Commonly referred to as very easy to learn and with the most friendly learning curve. Adopts the best patterns from Angular and React. In my opinion, it falls short of React but you should try it for sure. It is being actively developed by the Alibaba group.\n\nRemember, this is a long step. Take your time. Learn **npm** and **yarn** during the process and a couple of new libraries for your next project.\n\n## Step 7: Brush up your styling skills in CSS and learn HTML 5\n\nCongratulations on getting this far! You should write your resume and try sending it to few companies/agencies to get some feedback.\n\nDuring this process, you will find out that besides JavaScript, you will be also expected to understand CSS and know its basic principles. Namely:\n\n* Selectors, including special characters like > and +\n* **Precedence** of tags, classes and ids\n* **Flexbox** and its rules\n\nBonus points if you learn:\n\n* One of the CSS preprocessors like **SASS** or **LESS**\n* Some CSS patterns like **BEM** or **SMACSS**\n\nNaturally along with **CSS** you should become very comfortable with HTML and its extension **HTML5**:\n\n* New tags: section, article, header, footer, nav\n* Canvas\n* Dataset and classList\n\nThen you should gain at least a basic understanding of the following topics:\n\n* Web sockets\n* Storage, cache\n* SVG\n\nAs you can see, the list is quite long. The good news is, most of it you can learn within one week.\n\n**Note**: If you apply for a strictly **UI/UX frontend job** you should spend quite a few weeks on just **CSS**. This is probably not a job for **JavaScript developer.**\n\n## Step 8: Prepare for interviews\n\nGet ready for show time. Review your notes and keywords from JavaScript world. To do this, there is one special course I highly recommend: JavaScript: Understanding the Weird Parts.\n\nSpend a few bucks (it should be priced between $10-20) to get the best understanding of the topics you’ve learnt. I’m not affiliated with the guy but I took this course myself and I guarantee you will like it.\n\nThe key concepts you need to practice are:\n\n* Execution contexts\n* “this” keyword\n* Closures and callbacks\n* IIFE\n* Array functions: **map, filter, reduce**\n* Creating new objects through the constructor function\n* Prototype\n\n## Step 9: Tools and design patterns\n\nIf you got a job, great! If not, reiterate, practice and focus on the key points from the feedback.\n\nFrom now on, I assume you’re already performing small tasks as a junior developer. That probably means you got to know **npm** fairly well. You should also have found your favorite editor/IDE. The ones I usually see are **Atom** or **Intellij/Webstorm** and I highly recommend you pick one of the two. Another good alternative is **Visual Studio Code**.\n\nNow is the time to get equipped with Chrome and Firefox **plugins**. Check the documentation of the framework you use. Whether it is Angular, React, Vue or some other, it probably comes with a great plugin for your **Chrome Dev Tools**. To add to that, consider **Lighthouse** and **Dimensions**.\n\n_**Warning: Install plugins with caution. Some of them are used to spy on you or your employer.**_\n\nThen focus on productivity. Ctrl+c and ctrl+v are not the only shortcuts you should know. In fact I doubt if you will need them often. There are quite a few others which make your development a lot easier:\n\n* Selection shortcuts, f.in. select whole line, cut whole line, select full length of closest word, etc.\n* **Open autocomplete box.**\n* Switch between the most recent files (similar to alt+tab on the system level).\n* Navigate between the IDE windows, especially switching between editor and terminal.\n\nAfter all that, you are ready to focus on the **quality and reusability of your code**. The fact that you have developed the solution to the problem does not mean it is done. Most likely the solution needs to be flexible and reusable too. It should adapt to different environments and support many edge cases.\n\nStart exploring **Design Patterns**. Most of them are the same across many languages, and if you dare, you can read resources from **C++** or **Java** too. The most common (and valuable) book I recommend is, **Design Patterns: Elements of Reusable Object-Oriented Software** by Gang of Four. At Boldare we also like _**Clean Code**_ by Robert C. Martin.\n\nThe most notable patterns you should explore first are:\n\n1. Factory\n2. Singleton and Dependency Injection\n3. MV* patterns\n4. Prototype\n5. Iterator\n\n## Step 10: Learn algorithms and how to increase performance of your solutions\n\nThe last milestone to accomplish. By now, you know how to develop reusable code, but it also needs to be robust.\n\nA **5% increase in the speed** of your application would **mean million dollar savings** at Google.\n\nPrepare yourself for such big projects so that when the opportunity comes you won’t miss it.\n\nYou should probably start with sorting algorithms like Quick Sort and Merge Sort and then move on to the graph algorithms, **breadth-first search** and **depth-first search**. Once you get to know these, get yourself a book on algorithms to proceed further.\n\n## Summary\n\nCool! Congratulations on reading this lengthy post, you are probably really eager to become a **JS developer** so get started on your frontend skills right away. Make a weekly plan and write your goals for the year end. It will take at least a few months if not more to accomplish the 10 steps. I’m keeping my fingers crossed for you! Good luck! \n\n<NewsletterSmall id={`article-bottom`} />"}],"job":null,"photo":null,"cover":"/img/boldare-js-developers-team.jpg","lead":"We are living in a digital era where companies like **Facebook, Google, Airbnb, Amazon** and **Uber** are setting new frontiers and reshaping the global business ecosystem. None of this would be possible, however, if it were not for the **work of programmers**, including frontend **JavaScript** developers, of course. The market demand for programmers is enormous these days, and for those who want to be **JS** devs, new opportunities arise every day.","templateKey":"article-page","settings":{"date":"December 05, 2018","slug":"10-steps-becoming-javascript-developer","type":"blog","category":"Tech"},"contributor":"Mateusz Grzesiukiewicz"}}},{"node":{"excerpt":"","id":"545ca9ce-097c-5047-a759-a6fd14566899","fields":{"slug":"/blog/product-market-fit-for-expanding-market-demand/"},"frontmatter":{"title":"Product-Market Fit for expanding market demand","order":null,"content":[{"body":"Analyzing 101 startup failures, [CB Insights](https://www.cbinsights.com/blog/startup-failure-reasons-top/) discovered that the most common reason for businesses falling by the wayside was that there was, _“no market need”_ for the product they were developing. That’s a lot of startups working hard for a lot of months for nothing. \n\nWhich is one of the many reasons we at Boldare use a combination of the **scrum framework **and the [lean startup approach](https://www.boldare.com/blog/lean-process-for-better-product/) to building products. The short design sprints and the build-measure-learn cycle mean that new iterations of a product are built and tested frequently with users. \n\n![lean approach](/img/build-measure-learn.png)\n\n**The incremental approach**, with constant evaluation and validation, keeps the development on track and focused on building a quality product that actually responds to market needs. \n\nWhether we’re with you from the very beginning of your product journey or you’re coming to us because it’s time to take your precious to market, we combine **market analysis** with **agile development processes** to fine-tune your product until it’s just what users are looking for.\n\n## What is product-market fit?\n\nArguably, product-market fit is the first point of real success in the product development process. Everything prior to this stage is about inspiration, experimentation, and hard work. Once you have **product-market fit**, you know that you have something with value outside of your project, a product that is appreciated and desirable in the ‘real world’. But what is it?\n\nYou have achieved product-market fit when you have **a product that customers actually want and will pay for**. Dan Olsen, author of [The Lean Product Playbook](http://leanproductplaybook.com/), has described it as,\n\n> This means that your product meets real customer needs and does so in a way that is better than the alternatives.\n\nAs a term, ‘product-market fit’ was first coined in 2007 by World Wide Web Hall of Famer, **Marc Andreessen**, who defined it as, _“the only thing that matters,”_ for a startup. In fact, according to Andreesen, until you have product-market fit, there’s no point tackling issues such as growth and scaling in your organization – it’s that crucial a milestone.\n\n![product market fit](/img/full-cycle-product-development-stage-product-market-fit.png)\n\nHow do you know when you have product-market fit? The exact metric or measure of success depends on your individual product-in-development and the market you’re pitching at. \n\nPart of the role of a **Boldare product-market fit team** is to help you define this criteria for your individual project. For example, your indicator of success for a new app might be an agreed threshold number of paying customers (who are not family, friends or otherwise your buddy).\n\n\\>> You can also be interested in [Full Cycle Product Development](https://www.boldare.com/full-cycle-product-development/) at Boldare\n\n## Why product-market fit is useful?\n\nOnce you’re focused on product-market fit, your product is in the fine-tuning stage. Prior to this, you’ve tested and approved your initial concept and product idea, you’ve created working models (minimum viable products, or MVPs) to test the key functionality and design with the target group of users, but you don’t have a final product yet. Your MVP might be useful, and even saleable, but it’s not the version that fulfils your original concept.\n\nKeeping the goal of product-market fit in mind, this is the time for fine-tuning: **a rapid cycle of product iterations**, honing individual features and testing them with users, then honing them further with the aim of producing something that truly stands out from the competition or, if it’s a completely new concept and there is no real competition, something that blazes such a long trail that anybody following you will take a long time to catch up.\n\n<NewsletterSmall id={`article-middle`} />\n\n## What are the benefits of product-market fit?\n\nAchieving the point of product-market fit carries the following benefits:\n\n* **Pragmatic** – This stage of the lean startup approach has a purely practical focus. To be fair, right from the start, the question of market and users is integral to the project, but it’s at this stage that you’re closing in on that particular target, making nuanced adjustments.\n* **Potential profit** – Unless you’re a billionaire making digital applications purely for kicks, sooner or later you’ll want your product to start earning money. Product-market fit can be the difference between polite interest from your target market and rabid demand.\n* **Impact on the team** – Let’s not forget the development team. They’ve been working for weeks, maybe months (maybe longer?) and now is when they see the product begin to take its final shape (leaving aside for a moment, any future changes as the market evolves). As author of The Lean Startup, Eric Ries has said, “When you see a startup that has found product-market fit, it’s inspiring.”\n* **Business sustainability **–  Once you have a product that the market wants, that is clearly going to help your business grow.\n* **Product sustainability** – In a sense, market fit can lead to your product being quasi-independent of your business. Sufficient paying customers means that the product exists outside of your internal project team. Once it is out there and in use, its continued existence is no longer solely reliant on you; the product has a life of its own.\n\n![Boldare Team](/img/team-discussion.jpg)\n\n## Product-market fit pitfalls\n\nOf course, if you don’t do it ‘right’ – i.e. fail to fit your product to the market – then once your budget/funding runs out, your business is unlikely to have a sufficient revenue stream to survive. You may have the illusion of some short-term success, but your customer base will not grow, your product will not be profitable, and you’ll be back to square one.\n\n## How to achieve product-market fit – the Boldare process\n\nAs mentioned above, here at Boldare we use the lean startup build-measure-learn cycle combined with the agile scrum framework to help develop your product. As a general overview, when we are involved in product development from the very beginning, the process is as follows:\n\n* **Product basis** – product vision workshops enable us to explore, understand and validate the product concept, resulting in a shared understanding of the product vision.\n* **General UI/UX prototyping** – we develop a user interface (UI) concept (often in the form of a clickable wireframe prototype), followed by the graphic design of the product (using mood boards to test options). Wireframes are used to explore different UI ideas and lay out the basic structure of the product architecture.\n* **Minimum viable product** – A stripped-down version of the product, with real, usable functionality, is used to further test the product and guide its development.\n* **Product-market fit** – repeated iterations are tested and the results analyzed to achieve a perfect fit for the market.\n\nAs with the other stages of the development cycle, during the product-market fit process, it is important to us to work collaboratively with you, the client. We apply our expertise and experience but we do so openly and in constant communication with the client via the development team’s Product Owner (a role filled by a representative of the client company). \n\nWhat’s more, we see our role as including passing on our knowledge (of the relevant processes, techniques, etc.) to your people. This enables you to take on a development role in-house and puts the project in the context of your overall digital transformation journey.\n\n## Product-market fit in practice – BlaBlaCar, a case study\n\nFrench carpooling platform, **BlaBlaCar** had 24 million users and a lead position in the marketplace. Wishing to build on this position, the company’s goal was to expand into 27 new countries, with a variety of individual legal and cultural requirements. The secondary objective was to add new and improved features to the app, thus expanding its appeal to potential users who may have been hesitant in the past. \n\nThe final factor in the project was a shift in BlaBlaCar’s branding, moving away from being purely a transport option (a way of getting from A to B) toward being a more social application, focused on sharing your journey with interesting people.\n\n![BlaBlaCar team](/img/team-meeting-in-blablacar-headquarter.jpg)\n\nThe Boldare team applied the technique of **funnel optimization**, the ‘funnel’ being the customer journey through BlaBlaCar’s website and app to the point of commitment; in other words, the user experience. \n\nOptimizing that funnel involved** testing each element **– landing page, calls to action, booking process, etc. –   and looking for opportunities for improvement with the goals of boosting user satisfaction, increasing the user population, eliminating any weaknesses in the existing product, and adding genuinely valuable new features. New or enhanced features – for example, a route-planning feature that enables drivers to find more passengers – were then A/B tested against the existing product version with chosen groups of users.\n\n<RelatedArticle title={`Agile and skilled development teams for a French unicorn`} />\n\n## Summarizing product-market fit\n\nProduct-market fit is all about **fine-tuning a digital product to match the target market of users as closely as possible**, aiming to create the product that best meets that market’s requirements. The concept has been proven, the look and feel and functionality of the product are accepted, it’s time to polish the product for real-world use. Back to Marc Andreessen’s original use of the term:\n\n_“The life of any startup can be divided into two parts — before product-market fit and after product-market fit.”_"}],"job":null,"photo":null,"cover":"/img/team-board.jpg","lead":"Product-market fit is a key stage in the digital product development process. Continuing the spirit of constant experimentation and validation, this stage is about fine-tuning your product to appeal more directly to identified market needs. It requires close communication with both the client and the target users.","templateKey":"article-page","settings":{"date":"December 05, 2018","slug":"product-market-fit-expanding-demand","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"625ca873-6a9d-55e6-8564-9390834dc2bf","fields":{"slug":"/blog/hackyeah-2018-boldare-team-at-the-biggest-stationary-hackathon-in-the-world/"},"frontmatter":{"title":"HackYeah 2018 – Boldare Team at the biggest stationary hackathon in the world!","order":null,"content":[{"body":"So, let us tell you a short story about how a team of wonderful tech and design savvies from Boldare have joined forces to take part in such a massive coding event in Warsaw, Nov 24-25th.\n\n## Let’s digitize the fun!\n\nThere was so many paths to choose from - healthcare, fintech, cybersecurity... you name it! But we literally decided to have some fun. **We took up** **the task proposed by Totalizator Sportowy – Win with Lotto.** The task’s description says:\n\n> We are looking for a game that combines geolocation with randomness. Maps, coordinates, luck, win. The product of your work should reward players for their activity and gaining new users. It should be based on a simple message and understandable rules. Do not worry about legal restrictions on games of chance and where to get money for winnings from; what counts is creativity and inspiration. Remember that in a game of chance there are winners and those less lucky and that luck plays a more important role than skills. We count on your creativity, knowledge and skills.\n\n## The Problem - How to engage Millennials in the game with the help of technology?\n\nThe current clients of Lotto are people aged more than 35.  Despite its stable position on the Polish market, **Totalizator Sportowy is losing clients **in favor of foreign games with much higher prize pools.\n\nTo maintain their leadership of the lotteries market, Totalizator Sportowy** needs to** **reach younger users, **who have completely different needs and use modern technologies. \n\n### Brand's strengths\n\n* Virtually every Polish person knows this brand.\n* A large group of loyal clients.\n* Many partners – in terms of retailers, sports objects, and many others.\n* A well-established position on the market, public confidence.\n\n### Brand's weaknesses\n\n* Due to its long tradition, brand is mainly associated with standard coupons.\n* It is not linked with new technologies and digital solutions.\n* No mobile apps in its portfolio.\n* The present client group is not young enough.\n\n## The Team - Boldare Team!\n\nOh, so that’s what you call a six-pack. Six different people, various roles, many competencies (tech and design) - they joined forces to form one and only Boldare Team. **Our team consisted of two Backend Developers (PHP), three Frontend Developers (JavaScript), and one Product Designer. **It was the first time we worked in such a line-up, which was both an interesting experience and a challenge for us. To face that challenge, we quickly began to speak a common language and complete each other perfectly.\n\n![boldare_team_hackyeah_2018](/img/image-from-ios-24-.jpg)\n\n## Technologies:\n\nNo poetry, 100% of technology. What have we based our app on?\n\n**Backend**: Python, Django, Docker, PostGIS\n\n**Frontend**: React Native, NativeBase\n\n## \"Draw me the game.”\n\nThe first step we took after beginning the hackathon was talking to the Lotto mentors, who helped us get a better understanding of the stated problem and validate our concepts. **The idea we picked was a good one!** \n\nMentors appreciated our attitude of promoting tourist activity as a primary goal. And so we started drawing! And UXing. And coding. Then the magic happened...\n\n## The Solution - Travelotto app\n\n**During the 24-hours HackYeah event, we created Travelotto **– a mobile game which encourages people to visit various places together, at the same time providing a chance to win attractive in-kind or cash prizes.\n\nThe goal of Travelotto is to **inspire people to spend time together and discover interesting spots in Poland.** It combines elements of tourism, education, and games of chance.\n\n**By buying a coupon,** the user can visit famous historical buildings and points of interest in a given city or town, getting to know its history, and simultaneously win valuable vouchers.\n\nVouchers are an exciting way of adding some variety to sightseeing. **In partner locations, the user can get a voucher for solving a quiz** – this could be a museum ticket, a discount in a nearby restaurant, or a free coupon for the next game.\n\nThanks to the vouchers, you can feel adrenaline and satisfaction throughout the whole game. \n\n![travelotto1_hackyeah_2018](/img/travelotto-grey-light.jpg)\n\n## How does it work?\n\nThe player buys a coupon to be able to participate in Travelotto; it is also **a lot in a weekly lottery**. The game consists in visiting various randomly selected places in a determined order, which becomes known to the user **only at the end of the game.** The user can choose the number of visited places and the radius of their location.\n\n**The more places there are and the longer the distance is**, the bigger the point multiplier in the game. After the user buys a coupon, **places are picked** at random as well as the winning visiting order. \n\nThe points are displayed on a map to the user. **When the player gets closer to the drawn place**, the place is added to their score and the information about this place along with a quiz show up on the display.\n\n**The user can receive additional points and vouchers to partner locations.** If you guess the order of visiting the places, you receive a voucher. What’s more, each coupon **takes part in a cash lottery.**\n\nWe consulted our idea with the Lotto mentors, who had a very positive response to it. They helped us find better business solutions and verified some of our suggestions. \n\n## HackYeah in numbers:\n\n* 24 hours\n* 3100 attendees\n* 199 completed projects in 14 categories\n* 49 projects competing for the top 4 in the Win with Lotto category\n* 6-person Boldare Team\n* 2 hours of sleep\n* 30 cups of coffee \n* 1 working prototype of a mobile game\n\n## It was a hackathon of many first times, when:\n\n* most of the team members had taken part in a hackathon,\n* most of the team members had worked with each other,\n* we had designed a game,\n* we had used Django!\n\n![boldare_teama_hackyeah_2018](/img/image-from-ios-22-.jpg)\n\n## Summing up - what a lesson for a dev & design team!\n\nEven though we didn’t make it to the next level, the hackathon was a great lesson for us:\n\n\\- **we created a functional POC (proof of concept) in 24 hours,** which was an exact rendering of our idea (it could be easily tested on the client or users),\n\n\\- we set up a **detailed plan along with our goals and business assumptions,**\n\n\\- **what we lacked in the first place was a business model**: it was provisionally drawn up but then we focused more on other elements, as the representative of the company liked the idea,\n\n\\- **we performed well in extreme conditions** (some of us slept barely 2 hours during the whole 24-hour time),\n\n\\- despite of **working together for the first time** ever (at least some of us), we proved that you can build an effective, target- and cooperation-oriented team in no time,\n\n\\- we took part in a huge coding-related event of **3000 participants**,\n\n\\- **we enjoyed ourselves **and boldly represented Boldare!\n\nSo, HackYeah was a real fun and a valuable experience for the future – an exemplary model of brilliant teamwork and willingness. **Another proof confirming that a team can achieve much more than a single person.**\n\n## Hungry for more?\n\nYou should know that we love to share such stories, since we're all-time-learners and knowledge-sharing runs in our veins! Hungry for more insights? Interested in taking part in such initiatives and improving your development or designing skills with us? \n\n**The door is always open at Boldare – pop in to chat about what we are working on  and how exactly we do it.** If you thought of changing the way you work and meet such a lovely team - jump to our [Career Page](/career/) and find the role that fits you!"}],"job":null,"photo":null,"cover":"/img/img_9134.jpg","lead":"Sharing is caring! So they say. And that’s why we wanted to share in an experience of thousands of IT people from Poland. **Our 6-person, multi-talented Boldare Team took part in HackYeah 2018 in Warsaw – the biggest stationary hackathon in the world.** In only 24 hours, we created a working prototype of a mobile game ‘Travelotto’ based on geolocation. Wanna learn how we did it? **Read more below!**","templateKey":"article-page","settings":{"date":"December 04, 2018","slug":"hackyeah-2018-boldare-team-at-the-hackathon","type":"blog","category":"People"},"contributor":"Claudia Wensierska"}}},{"node":{"excerpt":"","id":"23ac8e45-1c10-544a-ae63-73a9dc74bc77","fields":{"slug":"/blog/predictive-maintenance-for-wind-turbines-an-interview-with-boldare-s-machine-learning-engineers/"},"frontmatter":{"title":"Predictive maintenance for wind turbines - an interview with Boldare’s machine learning engineers","order":null,"content":[{"body":"This is why the industry is on the search for an efficient and applicable solution which can help **reduce energy loss**, cut the cost of unexpected failures and, putting it simply, save money. This issue could be addressed by smart use of [machine learning](https://www.boldare.com/machine-learning/) algorithms which, based on data from wind turbines, can help **predict failure events** up to 60 days before they occur. \n\nHow can machine learning help with predictive maintenance? What is necessary to build models which can predict turbine failures? What data is required to make it happen? \n\nTo find the answers to these questions, I spoke with** Paweł Krynicki, Tomasz Bąk **and **Paweł Capaja **- members of **Boldare's Machine Learning Team **which is working on a machine learning solution for wind turbine predictive maintenance. \n\n_This interview is based on a webinar by Boldare: \"Predictive Maintenance with Machine Learning Algorithms\". You can find the video from the webinar **[HERE](https://www.youtube.com/watch?v=ZrFOppsONHQ)** or under the interview._\n\n## Guys, I would like to ask you how did it happen that you got interested in the topic of predictive maintenance?\n\n**Tomasz Bąk** **(Ph.D., machine learning engineer)**: Our team has general experience in various implementations of machine learning. However, we do not limit ourselves only to building software according to the customer's expectations. We also look for business problems which can be solved using machine learning.\n\nDuring such research, we came across the problem of predictive maintenance in the wind energy industry. It was just before the Wind Europe trade show, so we decided that it was the best moment to start.\n\n## Can you elaborate on this? What is the Wind Europe trade show?\n\n**Paweł Capaja ( Product Designer):** Expo Wind Europe is the wind community connecting all the enterprises in the market and allowing them to share knowledge and influence the market’s direction. They claim to have over 450 members, and are active in over 40 countries.  At the same time, it is the biggest event for the wind industry in Europe, happening in Hamburg this year. It includes the conference, trade show and **hackathon “Hack the Wind”**, in which our team took part.\n\n![](/img/photo_1.jpg)\n\n## What was the aim of Hack the Wind?\n\n**Paweł Capaja: **“[Hack the Wind](https://www.boldare.com/hack-the-wind/)” had two challenges, and we participated in the one connected with predictive maintenance (the second one was about building a blockchain solution). Our goal was to create an algorithm which could determine possible failures of selected components from wind turbines, 60 days ahead, with the possible highest accuracy. Moreover, the solution had to be presented in the form of a product. \n\n## What was your final score at Hack the Wind?\n\n**Paweł Krynicki (machine learning engineer):** There were two stages of the competition. One was strictly technical - to evaluate the predictive model regarding its efficiency and accuracy. This stage also included a quick pitch of the solution we’ve built, but the focus was put rather on the numeric results and the description of the algorithms we used. In this case, our solution took the 2nd place. \n\nTo give you some background, we were predicting failures of **5 wind turbines **from 1 offshore wind farm for the year 2017. The machine learning model has correctly **predicted 11 malfunctions** **out of 12**: 2 failures were related to the malfunctioning gearbox, 2 to the generator bearings, 1 to the transformer and 6 to the hydraulic system. \n\nThere was only one malfunction which our model didn’t anticipate, and that was related to the generator. In total, we would have saved over 192,490 Euros on the maintenance of the wind farm but due to a high rate of false positives - which cause costs related to calling out a maintenance team to inspect the turbine - our total generated savings were a bit lower, around **12.5K per turbine**. On average, our model was correctly predicting failures of the components almost forty days before they actually occurred.\n\nThe 2nd stage was related to the product we have built upon the predictive algorithm. Our team created a working prototype of a software application supporting the entire maintenance process - from predicting the failure of certain components to ordering required parts, updating the inventory and ultimately fixing the malfunction. In this stage, we made it to the top 3.\n\n## Based on your research at the Wind Europe trade show and conference could you name the critical challenges for the wind industry?\n\n**Tomasz Bąk:** Let me point out the three most significant issues:\n\n* Reduce the cost and repair time. The majority of operational costs in the wind industry come from maintenance, and can therefore be reduced. This problem can be solved directly using predictive maintenance. However, predictive maintenance has also indirect advantages: longer lifespan for the turbines and the optimization of energy production. \n* Different data formats in different systems. This is a more fundamental problem because without data standardization it is impossible to implement predictive maintenance.\n* Problems with the grid. The optimization of energy transmission is needed (which can also be solved using machine learning) and the development of a more modern infrastructure.\n\n![](/img/chart.jpg)\n\n## In your opinion, what is the future of the wind industry? In what direction is it going?\n\n**Tomasz Bąk:** As a machine learning engineer, I would answer: give me your data and then I can make the prediction {laugh}. But, ok, I will try to step into a futurologist's shoes.\n\nI have read about new types of wind turbine, like turbines in the shape of birds, or power-generating kites. So this is the future, the visible one. It will be interesting because we can observe this evolution with our eyes.\n\nThere will also be another, less visible future, which will be driven by artificial intelligence. The application of machine learning will be more comprehensive than it is now. I think that it won’t be limited to predictive maintenance. It would be useful for wind energy distribution or effective wind utilization. Maybe we will have self-repairing wind turbines?\n\nI’m just guessing. However, I am quite sure that in the future machine learning will play a significant role. \n\n## Let’s focus now on the topic of predictive maintenance. What are the characteristics of a good predictive maintenance solution for wind turbines?\n\n**Paweł Krynicki:** Based on our research on the market, we noticed that the majority of the solutions powered by machine learning, or even some simpler data analysis, have the form of a more or less sophisticated dashboard. These kinds of application usually support only a tiny part of the whole business process and require a technician or a data analyst to trigger some maintenance actions manually. \n\nWe think that predictive algorithms are not solutions on their own, **they are just tools **which, properly used, should support a business process and make significant savings. And this does not only include a visualization of the current or predicted state, but it also supports the process of inspection, ordering parts, sending a crew, managing inventory and so on."},{"body":"## SCADA is the most common system for collecting wind turbine data. What are the advantages and disadvantages of that system?\n\n**Tomasz Bąk:** We can name few advantages of SCADA like:\n\n* The data from the SCADA system is relatively easily accessible.\n* SCADA has the cheapest sensors.\n* Data is collected as time-series, so it is quite easy to visualize and analyze.\n\nHowever, SCADA isn’t perfect. You can find better data sources which give you a better failure lead time which is one of the main disadvantages of the SCADA system. \n\n## OK, so what other wind turbine data could be collected? And is it really worth it?\n\n**Tomasz Bąk: **For instance, you can collect oil and grease data. This type of data can be analyzed automatically, and it is easy to make a visual inspection of it. By using this **data for predictive maintenance**, we can deliver better failure lead times, especially for bearings and gearboxes. However, the problem with oil and grease measurement is that the sensors are expensive.\n\nAdditionally, we could analyze vibrations. Vibration data gives the best failure lead time for bearings and gearboxes. In this case, we can distinguish two type of sensors: high and low frequency, but their cost is similar to the cost of oil and grease sensors. \n\n## Could you describe how your predictive algorithm works?\n\n**Paweł Krynicki: **The family of the algorithms we use for this particular problem is called “supervised learning.” Internally they differ from each other a lot but in general, their way of working is the same: they take historical data and try to find a pattern which allows predicting a given value on a new dataset. \n\nIt’s called “supervised” because **we supervise the process of learning**: we know arbitrarily which observations are erroneous so the algorithm can calculate the overall cost of returning a specific set of values and then try to minimize that cost. Usually, the more data we obtain from the past, the better results we can get from the models. Then there are various techniques to clean up and process the data, normalize it or augment it with additional information.\n\nIn our case, we were given with a SCADA dataset containing measurements from **various sensors of a wind turbine**. Additionally, we obtained data from weather stations which allowed us to improve the results. Then we cleaned up and preprocessed the data by adding an additional dimension, aggregating and removing the outliers. \n\nWe also tested different approaches because as in the real world - we use what works best. We checked a recurrent neural network with **Weibull distribution**, various tree-like models and ended up with models trained for each component type, where some of them were simple decision trees and others, for instance, were using an ensemble technique called “boosting” in which we used several weak models which in fact didn’t perform well singly, connected them in a sequence and as a result we got a model which was much better. \n\nTo find the best moment to send the maintenance crew, we have optimized the hyperparameters of the model using a custom cost function - the estimated cost of shipping the inspection in a given point of time.\n\n![](/img/cs_02.png)\n\n## Is there only one solution or algorithm for predicting failures?\n\n**Paweł Krynicki:** The number of ideas on how to predict failures with the best accuracy is endless. During the Hack The Wind hackathon our competitors used a Convolutional Neural Network which is usually used for datasets containing images. And this creative approach allowed them to outperform our model. \n\nIn the future, we will undoubtedly verify if this solution can be somehow connected with ours to get even better results. Also, there are various techniques and models for the time series data which can be adapted depending on the exact problem we are solving. Not to mention improving the results by obtaining new essential features which have an impact on the target variable.\n\n## How can you improve your algorithm?\n\n**Paweł Krynicki: **We’re more than sure the results can be improved drastically. Don’t forget the results I was talking about were coming from a model trained on a dataset of only 5 wind turbines for only 1 year. We believe that when we **gather more data**, the performance can be improved, especially regarding prediction times (how much in advance it is returned before an actual failure occurs) and reducing the number of false positives - most probably this was also caused by the underfitting.\n\nAlso, we’ll be testing different methods and approaches, perhaps there is some model which would outperform the one we have created. Another way of improving the results is to find some new important features. Here the first thing which comes to my mind is the **data from vibration sensors** - this seems to be very effective for training ML models and gives very good results, but on the other hand, the sensors are quite expensive and not all wind farms are equipped with them.\n\n## The technical aspect of the machine learning solution is critical but invisible for the user. How do you make the ML algorithm results actionable for the user?\n\n**Paweł Capaja: **Oh that’s easy. You provide them with an application which is the easiest to read and maximizes the potential of a reaction to the alerts it provides. We have prepared **an app** which not only shows the health of turbines’ components and prediction of possible failure but also helps the user to take action when the error occurs. \n\nThe app allows the creation of tasks and allows the user to **schedule an inspection**. By using geolocalization, it shows the technician the fastest way to the broken component and  a smartphone camera can be used to scan the number of the component to speed up the replacement part ordering process. \n\n<div style=\"width=\"396px; height:858px;\" class=\"cms-iframe\"> <iframe src=\"//invis.io/5HOCU0A32A4\" width=\"396\" height=\"858\" frameborder=\"0\" allowfullscreen></iframe> </div>\n\n## What are your plans for further development of your predictive maintenance software?\n\n**Paweł Capaja:** As a team, we decided that we want to continue the work started at Hack the Wind and develop the original idea further. We’ve decided to approach this in a startup manner. Currently, we have established the first business goals of the product, and we are validating our hypothesis; we are also contacting potential partners to interest them in our idea. Based on that, we want to develop our machine learning solution into a product. We are following the lean startup approach in our work to maximize the positive results. \n\n## What are the possible ways to collaborate with the Boldare Machine Learning Team?\n\n**Tomasz Bąk: **We are still in the phase of product development, so we are looking for collaboration in different areas. \n\nWe would be happy to feed the predictive maintenance model with more data. It will help us to improve the quality of predictions. \n\nIt would be great to find some people with domain knowledge to cooperate. We have a few hypotheses about market expectations, which we want to verify with people from the industry. \n\nMoreover, with such help, it will be possible to use that domain knowledge to increase the **quality of predictions** (we have experience in ML, but our contact with the wind energy sector is relatively recent). We have more experience in image recognition, ML models for customer activity (CHURN, marketing spendings optimization) or recommendation systems.  \n\n## Thank you guys for this inspiring talk!\n\n<div class=\"cms-iframe\" style=\"width:560px; height:315px;\"><iframe src=\"https://www.youtube.com/embed/ZrFOppsONHQ\" width=560 height=315 frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe></div>\n\n## Three key takeaways from the interview:\n\n1. **The cost and time of maintenance can be reduced significantly** with predictive maintenance, but what’s more, a machine learning-based solution can elongate the lifespan of turbines and optimize energy production - in just 48 hours of coding we’ve managed to save 12.5K euros per turbine. \n2. Although data is limited, there is the possibility to** improve the models by adjusting them and searching for new data sources**, such as vibrations sensors. \n3. **Predictive algorithms are just tools which should support other business processes**, for example in the form of an app that can help plan and carry out the process of inspection, ordering parts, sending a crew, managing inventory and so on.\n\n## Learn more about Boldare’s solution for predictive maintenance and the team behind it.\n\n**The Boldare Machine Learning Team** is an interdisciplinary team mixing various skills and levels of expertise. It contains, among others, **machine learning engineers, JavaScript developers, **and** product designers**. All team members have years of experience in commercial projects in their field of expertise. For the last year and a half they have been working together as a machine learning team, and as a team, they took part in the **Hack the Wind competition**. Their machine learning solution for predictive maintenance has been listed among the top 3 in the contest. \n\n\\>> **You can learn more about the Hack the Wind contest and the team who took part in it [HERE](https://www.boldare.com/hack-the-wind/)**\n\nThe product they have developed during the contest gained positive feedback at the **WindEurope trade show**. The ML team decided to further develop the product as a Boldare **internal startup**. If you would like to learn more about our predictive maintenance product for wind turbines you can read more in this **[case study](https://www.boldare.com/work/case-study-predictive-maintenance/)**.\n\n<div class=\"cms-iframe\" style=\"width:554px; height:315px;\"><iframe src=\"https://www.youtube.com/embed/ZrFOppsONHQ\" width=554 height=315 frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe></div>"}],"job":null,"photo":null,"cover":"/img/machine-learning-team-boldare.png","lead":"One of the critical issues for the wind energy industry is the maintenance of wind farms, including component failures and replacement. The scale of this problem is significant. Maintenance operations can [constitute](https://www.researchgate.net/publication/307926766_Integrated_predictive_analytics_and_optimization_for_wind_farm_maintenance_and_operations) approximately 20-25% of the total levelized cost per kWh, and each failure can cost up to $250,000 to resolve. **Reactive maintenance is no longer a solution.**","templateKey":"article-page","settings":{"date":"November 30, 2018","slug":"predictive-maintenance-wind-turbine","type":"blog","category":"Digital Product"},"contributor":"Mateusz Kościelak"}}},{"node":{"excerpt":"","id":"43f7c991-491f-5b3b-ad28-1fd852c0a875","fields":{"slug":"/blog/differences-between-class-and-dex-files-in-java-android/"},"frontmatter":{"title":"Differences between .class and .dex files in Java & Android","order":null,"content":[{"body":"## **Why is this so important?**\n\nAt first sight, it might seem that Android and Java are exactly the same, but when you delve deeper into them it turns out that Android is a completely distinct type of architecture, with different low-level operations, different file structures, and many others. And does the knowledge of those differences influence a programmer’s work? It certainly has a direct impact in Android, where you have to pay attention to the optimization of code during programming from the very beginning, whereas in large apps it is important to use external libraries in Android. In the article below I’m going to tell you why.\n\n## Bytecode - a set of instructions\n\nEach Java class is compiled to Java bytecode. As a result, a .class file is created; Java bytecode which is a set of instructions for the Java virtual machine. There are 256 instructions: out of those, 198 are in fact used, 54 are reserved to be used in the future, and 3 are considered as permanently non-implemented. The instructions for JVM are commonly referred to as opcode (operation code). Each instruction takes 1 byte of memory, in special cases 2.\n\n## JVM vs. DVM - what's the difference?\n\nTo let you better understand the differences between JVM ([Java Virtual Machine](http://www.theserverside.com/definition/Java-virtual-machine-JVM)) and DVM ([Dalvik Virtual Machine](http://source.android.com/devices/tech/dalvik/dalvik-bytecode.html)) in Android, I will describe in a nutshell what happens after .java files are compiled to bytecode in JVM and DVM.\n\nIn JVM, .java class files are compiled to separate .class files, one file for each class. No matter whether the class is public, private, or static. During work, JVM dynamically reads in bytecode to each .class file in case the class is required.\n\nMeanwhile in DVM, the bytecode of all the classes is in one .dex file (Dalvik Executable). One of the most significant differences between JVM and DVM is that DVM does not use Java bytecode but it employs its own Dalvik bytecode, i.e. a set of instructions (opcode) destined for DVM.\n\nOne of the reasons why DVM uses Dalvik bytecode is because DVM, unlike JVM, is based on a register, while JVM is based on a stack. That is why most JVM opcode instructions refer to stack-based operations, and in DVM, most instructions are related to register-based operations.\n\nSo, how does DVM use Java classes added as .jar files to an Android app? It happens because all the .class files are recompiled by means of dx (Dexer) to Dalvik bytecode, and then they are attached to the .dex file. Dexer is a standard component of the Android SDK tool kit.\n\n<RelatedArticle title={`Building digital products based on machine learning - the cost perspective`} />\n\n## How does it look in theory?\n\nTo see the [differences between the .class and .dex files](http://stackoverflow.com/questions/8210173/what-is-the-difference-between-class-and-dex-files), first you need to take a look at the structure of both types of file. Below, I have deconstructed each of the above mentioned files. It is possible to single out the files more distinctly, however, I have decided that enough deconstruction is enough.\n\n_**Figure 1: The structure of a .class file**_\n\n* Descriptions of the most significant elements forming a .class file are as follows:\n* Constant Pool – this is the list of constants in the class, just like constant string fields, class, field, and interface names.\n* Access Flag – 2 bytes determining whether the file is a class or interface, and whether the class is final, protected, or public, etc.\n* This Class – current class name field.\n* SuperClass – 2 bytes indicating the superior class\n* Interfaces – all the interfaces implemented by a given class.\n* Field – field defined by the class file.\n* Method – methods defined by the class.\n* Attributes – a list of all the attributes of the class.\n\n![The structure of a .class file ](/img/class-file-elements.png \"The most important elements of a .class file \")\n\n<NewsletterSmall id={`article-middle`} />\n\n_**Figure 2: The structure of a .dex file**_\n\nI am now going to present you the descriptions of the most significant elements forming a .dex file:\n\n* Header – contains the basic info about the file, its size, indicators to various elements of the file.\n* String_ids – a list of identifiers of all the strings used by the file.\n* Type_ids – a list of identifiers of all the types included in the file (classes, boards, primitives).\n* Proto_ids – a list of prototypes (structures) for file references.\n* Fields – a list of field identifiers referred to in the file.\n* Methods – a list of identifiers of all the methods included in the file.\n* Classes – consists of 8 parts: class id, access_flags, super class type_id, interface list address, source file name string_id, class data address, address of the data initializing the static fields, address of the related annotations to the class.\n* Data – a section of data; actually, previous .dex file fragments mostly refer to the addresses in this section.\n\n![.dex file structure](/img/dex-file-structure-in-java.png \"Crucial elements for .dex file structure\")\n\n## How does it look in practice?\n\nSo much for theory. Now, using the example below, I will try to show you how to make four .class files referring to one class each from a .java file containing four classes (public, private, protected, and static). Next, the compiled .class files will be recompiled to a .dex file.\n\nI created four classes in one file: _MyPublicClass.java_\n\n_`public class MyPublicClass {`_\n_`private class MyPrivateInnerClass {`_\n_`}`_\n_`protected class MyProtectedInnerClass {`_\n_`}`_\n_`public static class MyPublicStaticClass {`_\n_`}`_\n_`}`_\n\nThen, I compiled the file to JVM bytecode using the following command: _javac MyPublicClass.java_\n\nAs a result, I got four .class files.\n\n`./`\n`../`\n`MyPublicClass.class`\n`MyPublicClass$MyPrivateInnerClass.class`\n`MyPublicClass$MyProtectedInnerClass.class`\n`MyPublicClass$MyPublicStaticClass.class`\n\nLet’s see what happens after you’ve compiled the same class to a .dex file in Android using Dexer. To create the .dex file, I will pack the previously created .class files to one .jar file. I will use the following command:\n\njar cvf MyPublicClass.jar com/test/*.class\n\nThe result is the alert below and the MyPublicClass.jar file containing the .class files.\n\n`$ jar cvf MyPublicClass.jar com/test/*.class`\n`added manifest`\n`adding: com/test/MyPublicClass.class(in = 768)  (out= 457)(deflated 40%)`\n`adding: com/test/MyPublicClass$MyPrivateInnerClass.class(in = 497) (out= 288)(deflated 42%)`\n`adding: com/test/MyPublicClass$MyProtectedInnerClass.class(in = 513) (out= 295)(deflated 42%)`\n`adding: com/test/MyPublicClass$MyPublicStaticClass.class(in = 406) (out= 251)(deflated 38%)`\n\nAs soon as I have the .jar file, I can start creating the .dex file. Using Dexer, I compile the MyPublicClass.jar file to MyPublicClass.dex file. I use the following command:\n\n_./dx –dex –output=MyPublicClass.dex /home/grzegorz/MyPublicClass.jar_\n\nIn result, I get the MyPublicClass.dex file containing exactly four Java classes compiled to DVM bytecode.\n\n`./`\n`../`\n`MyPublicClass.dex`\n\n## dex file limit\n\nA popular error alert in Android goes as follows:\n\n_trouble writing output:_\n\n_Too many field references: 131000; max is 65536._\n\n_You may try using –multi-dex option._\n\nWhat does it mean? It means that your .dex file contains too much code and that you should check whether the imported libraries are redundant – if they are, remove them. Another solution is to separate the code into multiple .dex files, so called “multidex”. This operation may have certain side effects, such as:\n\n* Application Not Responding (ANR), i.e. a temporary stoppage of the application caused by reading in .dex files that are too large.\n* Applications based on multidex may be unable to work with systems lower than Android 4.0 (API level 14).\n\nIn this article, I wished to show you the **differences between the structures of .class and .dex files in Java and Android**. A programmer coding in one of these environments may not need to remember about these structures. However, there are cases when this knowledge proves useful, e.g. when you’re trying to start a .class file: if you receive the error alert _java.lang.UnsupportedClassVersionError,_ you know it comes from the version sector describing the version of Java with which the file cooperates.\n\n<RelatedArticle title={`Effective scaling through teamwork`} />\n\nOn the other hand, if you work in Android, you must remember about optimizing the code as such: you should limit the number of imported libraries to a minimum, and if there are any unexpected problems, such as exceeding the number of methods in the file, then, knowing that the .dex file contains all the compiled classes, including libraries, you can consider two solutions – removing some libraries or optimizing the code.\n\nThere are many other situations in which the awareness of the differences between those two types of files is important. They usually turn up while you’re working."}],"job":null,"photo":null,"cover":"/img/25094713777_cae2db29e7_k-1-.jpg","lead":"Several months ago, my adventure with creating mobile apps for Android began. Today, I’d like to tell you about the **difference between .class files in Java and .dex files in Android**. I’ll also show you how to create a .dex file containing a Java class step by step.","templateKey":"article-page","settings":{"date":"November 29, 2018","slug":"differences-between-class-and-dex-files-in-java-android","type":"blog","category":"Tech"},"contributor":"Grzegorz Kukla"}}},{"node":{"excerpt":"","id":"3c699bf0-2b0f-5b91-a69a-41dee56279f7","fields":{"slug":"/blog/lean-startup-series-innovation-accounting/"},"frontmatter":{"title":"Lean Startup Series: Innovation Accounting","order":null,"content":[{"body":"You may have heard the phrase, _“There’s no accounting for taste,”_ but when it comes to the **lean startup approach** to digital product development, there is accounting for innovation. And not only does it exist but it’s necessary. After all, a startup business environment is all about innovation and creativity – if you’re not aiming for something new, you’re not really a startup. \n\nSo we need some way to measure that. Especially considering that a startup is, by definition, a new venture – there are no existing metrics or data or past performance statistics to measure against. You’re starting from scratch and so must your accounts; all your accounts.\n\nIn his book, “The Lean Startup”, **Eric Ries** defines innovation accounting as,\n\n> …a way of evaluating progress when all the metrics typically used in an established company (revenue, customers, ROI, market share) are effectively zero.\n\nIn other words, a business developing a new product is surrounded by apparent ambiguity (how do you measure ‘opportunity’?) and innovation accounting brings a structure to measuring progress and success in that kind of environment. It’s about aligning your accounting with being in the business of new ideas.\n\n<RelatedArticle title={`What is Design Thinking`} />\n\n## What is ‘innovation accounting’?\n\nThe lean startup approach rests on five basic principles:\n\n1. Entrepreneurs are everywhere\n2. Entrepreneurship is management\n3. Validated learning\n4. Innovation accounting\n5. Build-Measure-Learn\n\nKey to lean startup is learning and understanding – both the product and the client’s business. Innovation accounting is a structured way of measuring progress.\n\nTraditional metrics, such as ROI or market share, are ill-suited to the startup business scenario. Ries emphasizes that the use of such measures only encourages exaggeration – either of the initial business plan or the predicted returns – in order to secure funding for the project. Besides, such metrics are not necessarily the measures of success here. \n\n![team meeting](/img/team-in-the-room.jpg)\n\nAt the **product development stage**, is market share really such a concern? Yes, it’s important to know your target user, and yes, it’s a long-term goal to capture as many of those users as possible… but while you’re still building and testing your minimum viable product, the number of users is no indicator of success or failure; the product simply isn’t at that stage yet.\n\nSo, what does innovation accounting look like?\n\n## Leveling up – the 3 levels of innovation accounting\n\nRies understands that metrics and measuring performance is often a tricky science and has suggested that three consecutive dashboards be developed for each product, each building on the last with further information and data.\n\n### Innovation Accounting level 1: customer-focused\n\nThe key is to start with metrics that are not only easy to track but also relate to activities that are part of the digital product development process. Given that lean startup is all about understanding (and addressing) the needs of users, Ries encourages a customer focus for this first level. Examples might be\n\n* **Customer discussions **(How many users do your business talk to each week?)\n* **Customer feedback** (How many users provide feedback on the product each week?)\n* **Conversion rates** (How many users have actually tried the product out?)\n* **Per Customer Revenue** (How much would users be willing to pay for the product?)\n\nThe purpose here is to keep the process of development closely aligned with user needs and feedback. Metrics like these act as a measure of the level of involvement of users in your product development.\n\n### Innovation Accounting level 2: making ‘Leap of Faith Assumptions’\n\nEmbarking on development of a new product for an untested market (at least, “untested” in relation to your product) is a leap of faith. What makes it so? The assumptions you’re making about the product and the market from the beginning.\n\nThe lean startup approach implicitly acknowledges that it’s impossible to start building anything new without an assumption or two and measuring the truth of those assumptions is part of the second level of innovation accounting metrics.\n\nLeap of faith assumptions come in two flavors: value assumptions about the value users will derive from the product, and growth assumptions about how new users will find your product. Testing these assumptions is at the center of the lean startup methodology through **prototyping** and [MVPs](https://www.boldare.com/blog/mvp-what-why-how/), and **validated learning** exercises that guide the product’s development path.\n\nRies’ suggested value metrics aim to test for positive user behavior:\n\n* Rate of repeat purchases\n* Retention rates\n* Willingness to pay a premium price\n* Referral rates\n\nWhereas the recommended growth metrics are looking for indications of sustainable growth:\n\n* Word of mouth referrals\n* Ability to take revenue from one customer and invest it into a new customer acquisition\n* Ability to recruit new customers as a side effect of normal usage\n\nThe focus of this second level of metrics is to clarify the product’s [market fit ](https://www.boldare.com/blog/product-market-fit-expanding-demand/)and readiness for [scaling ](https://www.boldare.com/blog/scaling-your-product-thriving-in-the-market/)in that market.\n\n![](/img/team-meeting-during-holacracy-workshop.jpg)\n\n### Innovation Accounting level 3: What’s the ‘Net Present Value’?\n\nThe beauty of **Net Present Value** (NPV) is that it’s a reality check. Your business plan (and forecasts) may aim for the product to be worth $X in 12 months’ time but NPV tells you what it’s worth now. Unlike more conventional NPV calculations that include assumptions around market size, market share, product cost, etc., the innovation accounting NPV is based on the long-term drivers of your product’s future performance (and value); for example:\n\n* Number of website visitors\n* Percentage of visitors that become users\n* Percentage of users that choose to pay for the product (e.g. where there is a choice of freemium or paid versions available)\n* Average price paid by each user\n\nThe purpose of level three is to shift the focus to the product’s financial performance.\n\n## Measuring the progress of your product\n\nThe key is that innovation accounting and its metrics are not static. The lean startup process rests on a constant spiralling cycle of** Build-Measure-Learn**. Not only is the product constantly improving but with every test or interaction, new data is being gathered. This gives the process a dynamism as the overall data provided by the metrics changes to take account of the latest input.\n\nThe implications of each new piece of data for your business can be seen instantly; the three dashboards offer a constantly updated picture of your product’s path to existence, and to market.\n\n![lean startup](/img/lean-startup-build-measure-learn.png)\n\n## The innovation accounting process\n\nA broad overview of how to adopt innovation accounting in your product development is as follows:\n\n### Choose your metrics\n\nThe key is to keep metrics simple and easy to use. If you’re wondering where to start, the above first level examples may provide an entry point. Or you can prompt ideas by asking yourself these questions and then refining the answers into metrics for which the data is available:\n\n1. Did we do what we said we would?\n2. How are people working differently?\n3. Do users see an improvement? (referring back to the original problem or need your product is an attempt to solve)\n4. What new sources of growth are we tapping?\n\n### Monitor the data\n\nApply your chosen metrics to the three levels, gather the data and measure progress.\n\n### Hold the project to account\n\nAct on the data you have. Is the project team performing to plan? What progress is being made, and in what direction? Is the product development still aligned to identified user needs?\n\n![](/img/lean-startup-workshop.jpg)\n\n## Benefits of innovation accounting\n\nSo far, so good. But what are the specific benefits of innovation accounting?\n\n* **The framework of metrics **has a structure which means that each one is (if you’ve chosen wisely) essential. The three-level structure carries in-built dependencies in that the first measures user engagement, the second the market-readiness of the product, and the third measures financial/market performance.\n* The figures and metrics create a **sharp focus **on the value and performance of the product. This helps keep the development team focused on what is important, on the project’s success criteria: a product that fits the market and can do so in the future.\n* In turn, creating a strong team focus on the underpinning development issues and goals is potentially **strong motivation for collaboration **and teamworking.\n* The system provides a rare **link between research & development** (often a fairly ‘intuitive’ process) and market performance.\n* If you’re in the business of creating products, using the same (or compatible) metrics for each development process allows like-for-like **comparisons between products**.\n\n## Summary of innovation accounting\n\nInnovation accounting is one of the five basic principles of the lean startup approach to business. Specifically designed to address the fact that a startup has no real data history or market traction, innovation accounting involves choosing key metrics that enable you to track and measure what really matters: user engagement with the product, assumption-testing, and current product value. The benefits include the creation of a product better suited to its market, and single focus for all members of the project team."}],"job":null,"photo":null,"cover":"/img/lean-startup-chart.jpg","lead":"Innovation accounting is a key element of the lean startup approach. Embodying the ‘measure’ and ‘learn’ elements of the Build-Measure-Learn cycle, innovation accounting enables business owners and developers to create useful metrics that offer insight into user engagement, product-market fit, and scalability.","templateKey":"article-page","settings":{"date":"November 28, 2018","slug":"lean-startup-innovation-accounting","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"e9317355-0ae3-5691-ade0-f06e70ac4ab3","fields":{"slug":"/blog/practical-tips-on-changing-the-service-provider-and-keeping-your-digital-product-delivered/"},"frontmatter":{"title":"Practical tips on changing the service provider and still delivering your digital product","order":null,"content":[{"body":"## The most common reasons for ‘divorce’\n\nAs in any other business, different service providers offer different levels of service. The contractor’s development stack may look promising as you’re signing the commission contract, but it can turn out to be insufficient to realize your ideas in practice. In such situations, the limited know-how of the contractor’s company is the main reason you’re considering the change of the service provider.\n\nThis is not the only reason for deciding to switch one company for another, though. Other factors might include:\n\n* Cultural differences\n* Political and economic situation\n* Time zones\n* Values and modes of work\n* Languages\n\nIn the [**“Global Outsourcing Survey 2016” report**](https://www2.deloitte.com/lk/en/pages/operations/articles/gx-global-outsourcing-survey.html), Deloitte identified the following factors in a change of contractor, based on the responses made by companies themselves:\n\n* 46% Providers are reactive rather than proactive\n* 33% Don’t provide enough innovation\n* 29% Have high staff attrition rates\n* 25% Lack of leading practices\n* 23% Unqualified resources\n* 22% Lack of internal integration\n* 20% Poor service quality\n* 20% Lack of cross provider integration\n\nAll of the above issues can prompt you to change your service provider. It may be just one or a combination of many but when they occur to a sufficient degree, the divorce is inevitable. What can you do to go through it as smoothly as possible, and **what is important when choosing a new contractor?**\n\n![The team working on digital product](/img/boldare-development-team.jpg \"Changing the digital service provider to deliver your product  \")\n\n## Good practices for entering a new relationship\n\nThe choice of a new partner should be a well-considered decision, if only to avoid the problems that ended the last relationship, but also to minimize the risk of new ones. This is not a simple or quick process. Some make use of opinions shared on various websites, such as [Clutch.co](https://clutch.co/profile/boldare), others look at portfolios of similar projects, follow friends’ or network recommendations, or carry out research online.\n\n<RelatedArticle title={`Product-Market Fit for expanding market demand`} />\n\n**The quality of the first contact can say a lot about a company.** If you have to wait for a reply for a couple of days or their first question is about budget, you can walk away. If the communication (via email or phone) is quick, the company is honestly interested in the problem and able to offer adequate persons to solve it, you can move on to the next level of talks.\n\nThese should involve the presentation of the business and technical problems and the development of a further plan of cooperation. Sometimes an audit is required as a separate task, so if the company undertakes to work on the app or web, you can concentrate on drafting a support agreement.\n\n## The new partnership begins\n\nUnlike starting a new project from scratch, where it is necessary to build the architecture, select technologies, etc. in a project which has already been started by another company, the focus is on what’s already there.\n\nThe code, technology, and architecture are probably already chosen or in place but the previous contractor might have worked on them using a different process, in a different spirit, or with different values. **That’s why the best solution to begin with is to audit the product** in order to find out whether the business and functional requirements have been implemented, what the code quality is, and which features of the digital product are weak (e.g. security gaps).\n\n### The digital product’s audit\n\nHere are the most important points to pay attention to during the audit:\n\n1. **A detailed analysis of the system**: what it serves, what problems it solves, if and to what extent it is used.\n2. The **identification of the most serious problems with the system** – based, among other things, on the backlog. These can include, for instance, slow operation, malfunctioning options, or instability. This process will result in a better understanding of the system.\n3. **A system test using a local installation**. The process of installation itself can say much about the state of the product. Without ready automatic scripts, the app is probably rarely updated.\n4. Checking **if the app collects logs** and if it has a data backup and cleanup mechanism. Without the logs, in case of a breakdown, all you’re left with is pure guesswork, and I don’t think I need to tell you how products without backups end up.\n5. An **analysis of the code**. At this stage, it’s a good idea to answer a series of crucial questions:\n\n* Are there any tests? If so, that’s great, because this gives you a chance to check if anything is tested at all. Analyzing tests has another benefit: you get to know the system and the principles governing it better. If there aren’t any tests, you’re going to face a big challenge, as you cannot be sure you’re not going to spoil some element while editing or fixing the product.\n* Are the coding conventions consistent?\n* Are design patterns used?\n* Are the frameworks and libraries reliable? Here, it’s worth taking a look at their versions. It often happens that security bugs turn up because the installed versions haven’t been updated.\n* Is the product secured against attacks? Security bugs can be detected during the code analysis; for example, you can verify whether the entry fields data are correctly processed to prevent SQL injection. There are many more possible attacks and each should be well analyzed.\n\nTo analyze the source code you can also use static code analyzers which can give additional support to the audit with data from an external tool.\n\n![Development team at work](/img/development-team-working.jpg \"Development team working on digital product\")\n\n### After the audit\n\nA well-run audit will help you take the next step. Its results will determine the following scenarios. For example, if the audit’s results are not good, you should think about several issues:\n\n**Should everything be rewritten?** If the app is small and it’s possible to rewrite it quickly, this makes sense.\n\n**But what if the app is large?** It’s hard to accept that nothing might be released to production for a whole year due to rewriting the product’s code. What’s more, during rewriting, some significant assumptions from the beginning of the project may be missed, and that can harm the business logic of the digital product.\n\nIn this situation, it’s a good idea to place a “cap” over the product and to create new functionalities directly inside it and transfer the old code along the way, taking small steps towards better practices.\n\nThe audit can result in many similar scenarios to take into consideration. The ideal way to address each one is in cooperation with your new partner.\n\n### Backlog\n\nThe next step is to get acquainted with the backlog, both in terms of the tasks already performed and those that are still in the planning stage. You should discuss your short-term and long-term plans with your new or potential partner. Don’t forget to add new tasks to the backlog, those resulting from the audit and subsequent prioritizing.\n\n### Infrastructure\n\nThe infrastructure used by your ex-contractor is a key element. Normally, the list of tasks as well as the whole work history are in their system, e.g. **Jira** or **Redmine**, and the code is in the provider’s version control system, e.g. **GitHub**. Frequently, the product can be found on your previous contractor’s servers (usually in the cloud but sometimes also on physical servers).\n\nYou should transfer all the required data to your own or your new provider’s infrastructure. **Remember to check that the previous contractor no longer has access to databases, apps, and other data.**\n\nBefore the app or web starts on the new infrastructure, it must undergo tests to make sure everything works just like it did in the latest version, and if all the integrations - e.g. with an external payment system - function correctly. When the product’s functionality has been verified, it can be offered to users.\n\n### Development and maintenance\n\nIf you already have a working product on a new infrastructure, a task checklist (backlog), and testing and development environments, you can start off (or re-start with your new contractor, that is) development and maintenance works for the product. Usually some members of the team work on the quick improvement of any essential errors (especially security bugs and those concerning other sensitive components), while the rest works on the development of the product, i.e. adding or changing functionalities.\n\n## A working relationship\n\nEven though the whole process may look money- and time-consuming, sometimes there’s no other way and you just have to change the service provider instead of staying stuck in an unhealthy relationship. The cost of failing to realize your business goals, not to mention the stress of collaborating with an unsuitable team, can be much higher than that of changing provider and finding a new team.\n\nThat’s why it’s so important to create a product roadmap, on your own or along with the potential new partner, to make a precise estimate of the costs of changing contractor. That way you can make sure the profits will balance the possible initial costs in the long term. If the numbers are right, it’s better to finish the unhappy relationship and start a new one, giving you new opportunities and perspectives for the future... and a better chance of project success.\n\nRead more about [our approach and the way we work with our partners](https://www.boldare.com/#approach).\n\n<NewsletterSmall id={`article-bottom`} />"}],"job":null,"photo":null,"cover":"/img/dev-team-at-work.jpg","lead":"Allocating workload to external teams is a very popular way of developing digital products in every industry. With such a large number of companies from all over the world, you can be really picky when choosing the company that will suit your organization best and guarantee the good performance of the project you want to deliver. **However, sometimes the company you choose – the one that seemed the best choice at the time – does not fulfill your expectations when it comes to reaching the goals of your project.** What then?","templateKey":"article-page","settings":{"date":"November 25, 2018","slug":"changing-the-digital-product-service-provider","type":"blog","category":"Strategy"},"contributor":"Adam Ziemba"}}},{"node":{"excerpt":"","id":"05f28b4e-5320-595c-b7b3-d147bc0bb129","fields":{"slug":"/blog/lean-startup-series-validated-learning/"},"frontmatter":{"title":"Lean Startup Series: Validated Learning","order":null,"content":[{"body":"## What is Validated Learning?\n\nIf **lean startup is all about rapid product iterations** closely focused on user needs and requirements, then validated learning is that part of the process by which we learn just how close each iteration is to satisfying the people we’re building it for. \n\nIn fact, inventor of the lean startup approach, **Eric Ries**, has described validated learning as, _“the unit of progress for lean startups.”_ In other words, for a lean startup, success is not so much measured by the number of units you manufacture but by the measurable responses from your target users.\n\nRies himself derived the idea from [Steve Blank’s](https://steveblank.com/tag/customer-validation/) concept of customer validation, that the basic ideas underpinning your product or service should be tested with users, and tested early on in the process, and with the minimum possible effort.\n\nGoing back to the user responses, the key word is _“measurable”_. **Validated learning is quantifiable, based on data** such as revenue, user engagement, and feedback. The result is learning that is evidence-based and actionable, leading to genuine product improvements in each iteration. Done properly, validated learning is remarkably efficient.\n\n![lean approach](/img/build-measure-learn.png)\n\n## Why is it important?\n\nValidated learning lies at the heart of the lean startup and product development process. In fact, Ries has defined the term [minimum viable product](https://www.boldare.com/blog/mvp-what-why-how/) (MVP) in terms of the associated validated learning: _“…a version of a new product which allows a team to collect the maximum amount of validated learning about customers with the least effort.”_\n\nApplying validated learning to your product development process carries several clear advantages over the ‘traditional’ product cycle:\n\n* **Faster development** – when the feedback and learning mechanism is more focused, your startup’s product approaches its final ‘release state’ more quickly.\n* **Actionable metrics** – by basing the learning on measurable data and metrics, the final product version will be more closely aligned to user needs.\n* Reduced costs – better learning means faster, more efficient development, which in turn means less time and resources wasted on your development journey.\n* **More agile** – the validated learning approach facilitates agile working and rapid development of MVPS, making you more flexible as an organization.\n\nA good example of the value of validated learning was the work we did with **POLCO**, a US-based initiative to build an online platform allowing people to vote, offer opinions, and comment on government policies, in turn allowing policy makers to gather real-time feedback from citizens. \n\n<RelatedArticle title={`Transforming US politics with a voting platform for concerned citizens`} />\n\nThe validated learning testing we conducted was part of developing the platform in clear developmental stages. First, testing the first  MVP with Harvard University students gathering crucial usability data and interface feedback for over two months. The next significant test was to launch a local pilot in Austin, Texas which led to further learning and changes before the wider rollout to users.\n\n## How does it help to build scalable products?\n\nIn an age of potential rapid growth, **products must be scalable**. In the development process, you’re not only focused on today’s user needs, but also tomorrow’s. If the features and/or capacity of your product are fixed then you have designed a dead end.\n\nA genuinely **successful product can grow with the market needs**. And this is where validated learning is critical because validated learning is what keeps you alongside those needs, understanding them and anticipating them.\n\nThe lean startup product design process begins with ideas, often many of them. And each idea is a potentially different direction in which to take the product. Validated learning allows you to take small steps in each direction and test it, quickly checking whether your assumptions/information about the market are correct or not.\n\n## A typical validated learning process\n\nA useful way to look at the lean startup product development process is as a series of experiments, each resulting in specific and valuable learning. \n\nYou have an idea and you need to test it. Testing is done by creating an MVP and then seeing how it stacks up against user needs and wants. The feedback from this ‘experiment’ is then used to further refine the idea and the MVP, and then you test again. And so on, using the results of validated learning to continually improve your product – and by “improve” we mean, make more attractive to users.\n\n![team work](/img/team-work-desinger-pawel-capaja.jpg)\n\nGenerally, a **product development process incorporating validated learning** includes the following steps:\n\n### Formulate a hypothesis\n\nA hypothesis is something you believe about your target audience and/or product that needs to be tested. A good hypothesis is specific, measurable and provable (either as true or false, the experiment will decide).\n\n_EXAMPLE_: When creating [the Boldare website and brand ](https://www.boldare.com/work/case-study-boldare/)for our new merged venture into full cycle product development, our hypothesis was:\n\n> The client is choosing a product development company over a software development company\n\nThe need to test this hypothesis led us to develop MVPs of two websites, one for Boldare as a product development company and the other as a software development company.\n\n<NewsletterSmall id={`article-middle`} />\n\n### Devise a metric\n\nA metric is how you measure your hypothesis. It should be directly related to the product and its purpose (boost sales, increase your online community, make the world a better place…?) and therefore help you in the development of a successful product.\n\n_EXAMPLE_: To measure our Boldare brand hypothesis more accurately, we broke the hypothesis down into **5 sub-hypotheses:**\n\n1. _The client chooses a team building product_\n2. _The client chooses a team building software_\n3. _The client is making the decision about choosing the software or product team unconsciously_\n4. _The client is not identifying the product offer_\n5. _The client is not identifying the software offer_\n\nThese more specific, more measurable statements could be easily tested. \n\n### Conduct the ‘experiment’\n\nImplement your idea/improvement – but do so with the minimum amount of investment and effort; it’s called an MVP for a reason! – and gather data and feedback from users.\n\n_EXAMPLE_: In our example, the five sub-hypotheses were tested via a series of scripted interviews with users.\n\n### Analyze the results\n\nExamine the data relating to the metric. Which elements of your hypothesis have been proved and which have not? What learning have we gained? What further changes could be made? Is this direction worth pursuing (is it helping achieve the purpose of the product?) or do you need to pivot, change the direction of the development to more closely address user requirements?\n\n_EXAMPLE_: Our results for sub-hypotheses #1 and 2 showed that the product offer was ‘safe enough to try’ but the software version received a less favorable response, as shown by the results of testing #3, 4 and 5. \n\n### Make the improvements and test again\n\nReturn to step #3, make the indicated changes and measure again. Repeat as necessary.\n\n_EXAMPLE_: The different responses highlighted by testing #3, 4 and 5 led us to amend the software website, drawing on the communication style adopted in the product version. And then on to the second round of testing…\n\nRemember, you’re experimenting. And the purpose of an experiment is to **seek knowledge and learning**: Is your hypothesis true? Does the product-so-far meet user needs? \n\nOne advantage of this validated learning process is that it offers to cut through a lot of pointless debate. Often, people are attached to their own ideas, believing their solution is the best option. But until you test that solution, that belief is just opinion. By using validated learning, you can determine the best solution/direction for development based on the real-world reception of your hypothesis.\n\n## Validated Learning is all about testing and checking\n\nPut simply, validated learning is the practical aspect of the basic principle of the lean startup approach. By repeatedly testing and validating your product ideas with the target audience, you can hone your product with maximum efficiency and minimum effort, reducing the possibility of committing to a dead end development. In other words, test before you invest.\n\n_\\* Winston Churchill, 1948_"}],"job":null,"photo":null,"cover":"/img/team-at-work-1440.jpg","lead":"Arguably, nothing changes without learning. There’s no progress, no growth, no improvement without it. As the saying goes, “Those who fail to learn from history are condemned to repeat it.”* Any development endeavor that seeks to be better/faster/more must include learning in its process, and taking a lean startup approach to business is no exception.","templateKey":"article-page","settings":{"date":"November 21, 2018","slug":"lean-startup-validated-learning","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"77d570b2-f7ec-5415-af3e-d335793486d2","fields":{"slug":"/blog/lean-startup-series-vanity-metrics-vs-actionable-metrics/"},"frontmatter":{"title":"Lean Startup Series: Vanity Metrics vs. Actionable Metrics","order":null,"content":[{"body":"Here at Boldare, we see successful [ digital product development ](https://www.boldare.com/product-design-and-development/) as both an art and a science. To achieve elegant, functional code or a seamless and intuitive UI takes a high degree of flair, but the process also requires an element of scientific rigor, devising and testing hypotheses and – importantly – going with what the results tell us, not what we wish they’d tell us. \n\nThat’s how we understand the product owner’s concept and the users’ needs and can create that elegant code and intuitive UI.\n\nYes, **building a successful product is both art and science**. But how exactly do you define “successful”? That’s another of the more scientific parts: devising metrics and measures, knowing what data you need to collect, and where from. All of which, done correctly, will tell you (prove to you) when your product is a success. And what’s more, these metrics and resulting data will prove useful to the marketing of the product.\n\n## Lean startup metrics\n\nAt Boldare, we use a combination of the **lean startup approach** and the **agile scrum framework **to structure and guide our digital product development. Central to lean startup is the concept of** Build-Measure-Learn.**\n\n![lean approach](/img/build-measure-learn.png)\n\n* The _Build_ phase includes not only building the product (or prototype or MVP) but also **setting up hypotheses to test the product concept **and likely reception from users. Those hypotheses include metrics, success criteria that give a clear reply to the question, What does success look like?\n* In the _Measure_ phase, we gather information and feedback from users responding to the version of the product being tested. The information that we collect is determined by the metrics set previously.\n* This data, and the conclusions we can draw from the test product’s performance against the metrics, is considered in the _Learn_ phase, leading to a deeper understanding of the concept and product requirements, and probably to a new hypothesis to be tested.\n\nHowever, as Eric Ries, author of “The Lean Startup” has pointed out, there are vanity metrics and there are actionable metrics.\n\n## Vanity Metrics vs. Actionable Metrics\n\nA vanity metric is like a **distorting mirror **– you might like what you see in it but it’s not a true picture, it’s just your vanity. After your product test, you probably have some impressive numbers but either they’re not relevant to the hypothesis or they’re not telling you anything you need to know to improve your product – either way, vanity. \n\nClassic examples of vanity metrics might be:\n\n* Number of hits on a webpage.\n* Number of downloads of an app. \n\nYes, your new webpage had a lot of hits but what’s a “hit” anyway? How many people is that? What does it tell you about their experience on your page? What can you do to improve that experience? Where do those hits come from? What did it cost to generate those hits? How do you generate more? The answers to all these questions are: Who knows?\n\nBasically, **vanity metrics might be great for PR** (so long as no one questions them too closely) but the information they provide is just smoke and mirrors. \n\n<NewsletterSmall id={`article-middle`} />\n\nOn the other hand, an **actionable metric **provides the product development team with genuinely useful information. An actionable metric is often linked to specific, repeatable tasks or features in a way that tells you how you might improve those tasks or features. \n\n**Sales could be an example of an actionable metric**. When designing a new feature, simple A/B testing of the product (the existing version contrasted with the version with the new feature) can use a sales metric to establish user/customer response to the feature. \n\nThe data from that metric can point firmly in a number of directions, including put the new feature on general release, re-work the feature for better customer appeal, or abandon the feature and look for an alternative (more popular or needed) improvement to make. \n\n## Why vanity metrics are dangerous\n\nOnce again, Eric Ries offers some insight. What he’s observed is that when vanity metrics are in use, **the lack of clarity **about what has caused an improvement in the figures means that people often attribute the improvement to their part of the project (everybody’s vanity at work). Likewise, should performance against the metric worsen, it’s definitely due to somebody else’s work.\n\nContinue long enough and watch the negative impact on the overall quality of your teamworking.\n\nIn a sense, this is another distinction between the **two types of metric.** \n\n**Vanity** – nobody knows what caused the change in numbers so everyone has an opinion on who deserves the credit or blame.\n\n**Actionable** – it’s crystal-clear what the metric is measuring, opinions aren’t necessary to understand it.\n\nIn other words, long-term use of vanity metrics is not only bad for the health of the product development project but also for the health of the organization.\n\n![team workshop](/img/team-workshop-720.jpeg)\n\n## A good metric is actionable – what else?\n\nAn actionable metric is specific, linked to the hypothesis under test, and produces data results (good or bad) that are unmistakable in their meaning. It tells you what outcomes come from which product features or changes.\n\nAs well as actionable, **a metric should be accessible**. Not only in terms of being clearly understandable but also in the sense that the data is widely and easily available. Metrics and reports are not the sole province of managers and supervisors; that’s not the lean startup way. \n\nWhat’s more, **that metric should be auditable**; i.e. the results or report can be generated from the source data by any member of the project team. \n\nKeeping metrics and data open and transparent ensures that team members are defined by their roles and skills (what they bring to the table) and not their ‘level of clearance’.\n\nFinally, **good metrics are finite**, they have a shelf life so don’t become attached. If a good metric is tied up with testing a hypothesis, then once the test is done and a credible result achieved, the project moves on to the next hypothesis and the next version of the product. Then, once the product is launched, the metrics may change over time as the product ‘matures’ and targeted marketing becomes the priority as the available data increases.\n\n_For example_, for a young or in-development product, you may be restricted to data such as:\n\n* Social media shares, downloads, followers, active members, reviews, etc.\n\nOnce the product is established and feeling the effects of a marketing campaign, you might look at what you can do with:\n\n* Time on site, conversion rate, sales, revenue, customer satisfaction, etc.\n\nAnd a mature, well-known product might benefit from metrics that draw on data such as:\n\n* New members, lost members, profit, revenue per customer, costs of production, churn rate, retention, etc.\n\n<RelatedArticle title={`MVP development - what, why & how`} />\n\n## Basic principles of actionable metrics\n\n* **Quality not quantity **– Don’t swamp your product project with data. Focus on the right data. One actionable metric that tells you something useful about the product-in-development is more valuable than a dozen feelgood vanity metrics.\n* **People** – a tenet of lean startup states, “Metrics are people, too.” This means that you need to know where the data is coming from. Can it be tracked back to the individuals generating it? Apart from personalizing the process and maintaining a focus on users, there’s a practical advantage: if there’s any doubt about the meaning of the data, you know who to ask the clarifying questions.\n* **Measure only what you need** – The data available, even connected with a small product change, can be overwhelming. Measure what you need to prove or disprove the hypothesis and no more. It’s easy to get lost in irrelevant information (remember the example of Number of hits on a webpage?)\n\n## A metric example - The story of Boldare\n\nBoldare is a combination of two sister companies, XSolve and Chilid. The idea behind [building this new entity ](https://www.boldare.com/work/case-study-boldare/) was to offer the full range of software design and development services. Naturally, we used our usual product development processes, including hypotheses and metrics.\n\nOne of our initial hypotheses in the project was: \n\n_“The client is choosing a product development company over a software development company”_.\n\nTo test this hypothesis, **we developed two MVP versions of a boldare.com website** to test what was appealing to our clients. To narrow the scope and focus in on useful data, we focused on what was driving clients’ choices, **devising five sub-hypotheses**:\n\n1. _The client chooses a team building product_\n2. _The client chooses a team building software_\n3. _The client is making the decision about choosing the software or product team unconsciously_\n4. _The client is not identifying the product offer_\n5. _The client is not identifying the software offer_\n\nThese specific statements were easily tested by a series of scripted interviews with users and clients. Not only did this mean the data gathered was directly relevant to the hypothesis, but the ‘people’ element was preserved by being able to clearly identify the individual sources of the answers to the questions.\n\nThe results showed that our ‘**product offer**’ was well-received and was ready to go ahead, but users weren’t engaging with the ‘software offer’, prompting further development work.\n\n![team workshop](/img/team-in-the-room.jpg)\n\n## Actionable Metrics for better product\n\nMetrics are key to the **Build-Measure-Learn** principle of lean startup. However, those metrics must be actionable; i.e. relevant to the product and the hypothesis being tested by the project team.\n\nActionable metrics will **drive the development project to a successful conclusion** and on into the product marketing phase, while so-called vanity metrics involve collecting data that ultimately cannot be used to further the product development process. \n\nThe final word goes to Eric Ries: _“The only metrics that entrepreneurs should invest energy in collecting are those that help them make decisions.”_"}],"job":null,"photo":null,"cover":"/img/meeting-room-1440.jpeg","lead":"Metrics and measurement are at the heart of the lean startup approach and agile methods of product development. Yet measurement alone is not enough – success comes from measuring the right things. That’s the difference between vanity metrics and actionable metrics.","templateKey":"article-page","settings":{"date":"November 19, 2018","slug":"lean-startup-vanity-metrics-vs-actionable-metrics","type":"blog","category":"Digital Product"},"contributor":"Dave Foxall"}}},{"node":{"excerpt":"","id":"a14e040a-8768-5d38-80fe-c023cc6de5bd","fields":{"slug":"/blog/introducing-data-visualization-in-d3-javascript-library/"},"frontmatter":{"title":"Introducing Data Visualization in D3 JavaScript library","order":null,"content":[{"body":"It is in the answer to this question that data visualization becomes an** essential tool**. Using this tool, businesses (and others, of course) can **tame the data** and derive conclusions from adequately visualized datasets, thus greatly improving their decision making. Data visualization helps our brains to comprehend complex dependencies by displaying them in a more brain-friendly, graphical way. It is a tool which helps us understand our world better.\n\n## What is D3 all about?\n\nD3, which stands for a **Data-Driven Documents**, is a JavaScript library created for data manipulation and visualization. It enables you to visualize your data using plain HTML, SVG and even Canvas API.\n\nTo begin with, **D3 can be confusing**, especially if you’re looking for simple predefined charts that you can quickly apply to your project. However, if you invest a little time to master (or at least get familiar with) this library you can make powerful, fully animated aesthetic charts relatively easily.\n\nIn this short introduction to D3, we will use **global electric power** consumption data as an example dataset. Our goal is to help the user obtain all the information that this data can provide.\n\n## How to start with data visualization\n\nWhen it comes to data visualization there are a number of variables to be considered. Alberto Cairo, the author of _“The Truthful Art”_, states that good data visualization has to be:\n\n* Truthful\n* Functional\n* Beautiful\n* Insightful\n* Enlightening\n\nWhen we choose how we want to visualize our data, these are the features that we need to consider before beginning.\n\nLet’s try to apply the above assumptions in practice by visualizing the Worldwide Electric Power Consumption (kWh per capita) dataset from [The World Bank](https://data.worldbank.org/). We want to visualize the levels of power consumption in each country.\n\nSometimes the simplest solution can be the most efficient. And that’s why we’ll start with a simple line chart. Take a look at our data schema:\n\n![data ](/img/dataset.jpg)\n\nWe have 264 records, organized alphabetically by country, with a consumption rate in kWh assigned in the value column. In order to visualize it, we will use the **D3-shape module**.\n\n_Note: Since version 4 of D3 uses a modular approach, it’s easier to load and implement only the functions we need, the build is small and it can be even smaller using a module loader like webpack or rollup.js, thanks to tree-shaking_.\n\nSince we need to scale our data to an SVG canvas, we’ll be also using the linear scale from the D3-scale.\n\n_Note: for a full working example click _[_HERE_](https://github.com/mbrc27/d3-workshop/tree/power-basic)\n\nAfter adding the axes and labels, we have our first version of the data.\n\n![](/img/line200.jpg)\n\nLet’s see if the chart complies with Cairo’s visualization statements.\n\nWe can say that it’s **truthful** because we haven’t hidden any data nor have we manipulated the scales; we have simply shown all the values within the same scale. But to be honest, we have so much going on in the chart that it could be misleading. We can make our chart wider and try to visualize all the countries on the axis, but it would still be too much data to analyze at once, and that makes it hard to find or draw conclusions about data trends or patterns.\n\nSo, in the case of truthfulness, let’s say it isn’t perfect and the same goes for being **functional**. Is this chart **beautiful**? I don’t think so. We’re not adding any ‘junk’ but we could definitely make it more appealing. However, when there’s so much happening in a chart, beauty becomes difficult.\n\nIs this chart **insightful**? Is it **enlightening**? The same problem exist as with truthfulness. It shows all the data, but can we process it? Can we see which regions have greater power consumptions? What differences are there between the northern and southern hemispheres? It’s hard to tell from the chart in its current state.\n\nIn order to fix some of these issues, we can try to **show only certain data**, or to group some countries by continents or regions.\n\n![](/img/line50.jpg)\n\nBut with this approach, we lose some of the insights and thus we can accidentally direct the user to pay attention to certain data at the expense of the rest. That’s not always a bad thing. Another time we may want to show how much bigger/smaller the consumption is in Western Europe compared to Eastern, but in this case we want to show it all so that the user can find those comparisons by themselves. Our goal is to make this chart as enlightening as it can be.\n\nSo how can we visualize this data to make it a **better data visualization**? Perhaps we can categorize the power consumption and sort the data that way? Maybe we can use another type of chart or diagram?\n\nBased on the assumptions we have chosen above and because we can observe some similarities based on the geographic location of the countries, we’ll try to address these issues by** visualizing them as a map**.\n\n## Using geodata for visualization\n\nMany datasets based on geographical location can be visualized as a map. Geographic Information Systems (GIS) provides us with variety of functions, ideas and algorithms to make that possible.\n\n_Note: to find out more about GIS ecosystem check out Open Source Geospatial Foundation (OSGeo)_[_ page_](https://www.osgeo.org/)_._\n\nTo make our data more interesting (we could say: more **insightful** and **enlightening**) and more appealing (**beautiful**) to a user we will visualize the dataset as a map. Furthermore, we’ll display it as an interactive globe so that users can spin the globe around to observe different regions and zoom in to a point of interest.\n\nIn order to make this happen we have to use a projection from **D3-projection **and geoPath from the **D3-geo module**.\n\nAt first, we have to define what type of data we have: local, countrywide, or worldwide. This is important because we have to determine which geographic projection to use. On a local scale we have to remember that each country has its own national coordinate systems by which all maps are visualized. So, using different coordinate systems to visualize data can result in different shapes and rotation for countries.\n\n### Web Mercator\n\nOn a worldwide scale, we have global coordinate systems. In this case the most popular projection is **Web Mercator** also known as **Google Web Mercator**. It’s a variant of the Mercator projection and is based on spherical formulas. It has became a standard for a web mapping in the global scale visualizations.\n\n![Web Mercator projection](/img/mercator.jpg)\n\n### An orthographic projection\n\nAnother interesting projection is an orthographic projection. The aim is to visualize 3D objects in two dimensions (e.g. on a web browser). D3 provides us with an** geoOrthographic projection** which enables us to visualize the Earth as a globe (or in this case as a planar circle). The downside of this projection is that we won’t be able to fit all of the continents on our canvas as we would in a Mercator projection. However, we can change the projection rotation when the user interacts with our map, enabling them to focus on their points of interest.\n\n![Orthographic projection](/img/orthographic.jpg)\n\n## Visualizing the world\n\nTo visualize the whole world, we need to apply our power consumption data. By joining our data with a **GeoJSON** of the world we were able to populate our map with actual data values (all the missing countries or values were set to 0).\n\nThen we have to decide how we want to visualize our data. In our line chart example, we were visualizing power consumption values on the Y axis. In this case our axes are our coordinates so we need to find a way of visualizing them. In this case, there are two popular ways to  visualize the dataset:\n\n* **Choropleth map** – values are displayed as colors which can represent categorical or continuous values.\n* **Bubble map** – values are displayed as bubbles where their diameter represents a linearly scaled dataset or is used for categorical representation.\n\nBefore we decide which visualization will be more beautiful, it’s more important to think about which type will be more insightful: one type (choropleth) enables us to easily identify regions with similar values; on the other hand, the other (bubble) enables us to easily compare values (by the size of the bubbles).\n\n### The bubble map\n\nFirstly, lets see how the bubble map serves our purpose. In order to create it we have to create a scale for the bubbles. We can use a linear scale from D3-scale or a categorical scale in order to define categories with the values we want to represent. After choosing a scale, we place our bubble in the geometric center of the specific country. Now we are good to go with data visualization.\n\n### The choropleth map\n\nIn order to create a choropleth map, we have to prepare a colored scale to which we apply the previously prepared categories.\n\nD3 offers many color schemes and most of them are based on Cynthia Brewer’s [ColorBrewer](http://colorbrewer2.org/#type=sequential&scheme=BuGn&n=3).\n\n_Note: Cynthia Brewer is an American professor of geography and her most notable work – ColorBrewer – aims to deliver effective schemes for thematic or choropleth maps that are usable for web, print, and also colorblind people._\n\nIf we’re looking for a color scale for our data, we can use one provided by a **D3-scale-chromatic module** or we can prepare a scheme basing on ColorBrewer’s online application by ourselves. If we’re using continuous data we won’t be able to use ColorBrewer, but D3 provides some continuous color scales (using one-dimensional b-spline interpolation for the RGB values). In this case we’re using a discrete scale.\n\nAfter we prepare our visualization, we can compare both maps on the example below. Feel free to experiment and try analyzing these visualizations with Cairos statements.\n\n![](/img/globe-map.jpg)\n\n_Note: _[_full working example code_](https://github.com/mbrc27/d3-scene-3d)_._\n\n## Analyze the visualization\n\nNow it’s time for the most important part of the process. We have to validate the visualization.\n\n### Is it truthful?\n\nWe have countries placed on a globe with their power consumption representation with the same linear scale applied. We show every country and the data assigned to it. In a situation where values are missing, we can show them in a separate color.\n\n### Is it functional?\n\nIn this case our approach provides the user with the basic information, but it is missing country names and value labels and the user may have a problem comparing data from different parts of the globe.\n\n### Is it beautiful?\n\nThese versions are more appealing to the user. Thanks to ColorBrewer, we have provided functional and aesthetic colors for our data. We have also enriched the globe with shadows and glow effects (also we added a few stars to the surrounding space).\n\n### Is it insightful and enlightening?\n\nAt this point our visualization enables users to draw conclusions based on countries’ locations. It’s easier to look at the dataset as individual regions, and without preparing any additional visualization, so we can say that it is now more insightful and enlightening.\n\nUnfortunately, our visualization suffers from the ‘**chart junk**’ which is, “visual embellishments that are not essential to understanding data” (Bateman S. et. al.), so our chart has sacrificed a bit of a functionality in favor of beauty.\n\nOur last step is to make our **visualization more functional** by reducing that ’chart junk’. To do so, we use a specific Mercator projection which allows the user to analyze data from every country without rotating the globe.\n\n![](/img/mercator-map.jpg)\n\nFinally, our visualization is easier to read, more functional, and the user can easily compare different countries and regions. At the same time, it is still pretty much an aesthetic solution.\n\n**Pro-tip:** The 3D globe solution could be more efficient if the spherical shape of the Earth was included, e.g. for cruise ships route and plane trajectory visualizations, day and night light pollution and many more details.\n\n## Conclusions\n\nIn this brief guide, we have only covered the **basics of data visualization**, focusing on mapping. To improve our visualizations we could implement a better labelling engine (currently, the labels appear only if the scale is enlarged). We can implement this by ourselves, or by using an alternative mapping library, such as [Leaflet.js](https://leafletjs.com/) (which works with D3).\n\nWe can also improve the visualization’s performance – this example is based on a 2D canvas, but for a more interactive 3D visualization it might be better to use WebGL solutions (there is support for D3 in [Three.js](https://threejs.org/), a 3D JavaScript library).\n\nThe way in which you build your visualization matters but the most important part of the whole process is to analyze the problem you want to illustrate with the data, and know how you want to show it.\n\nNow that you know the basics of data visualization, you can start making some of your own! If you want to make some with us, let’s talk then.\n\n**References:**\n\n[“Useful Junk? The Effects of Visual Embellishment on Comprehension and Memorability of Charts” ](http://hci.usask.ca/uploads/173-pap0297-bateman.pdf)\n\n[“Graphics Lies, Misleading Visuals” ](https://infovis.fh-potsdam.de/readings/Cairo2015.pdf)\n\n[ColorBrewer ](http://colorbrewer2.org/#type=sequential&scheme=BuGn&n=3)"}],"job":null,"photo":null,"cover":"/img/giant-globe.jpg","lead":"Nowadays, **we are flooded with data**. We are living in the information era. How could it be otherwise? Our cyber-activity, our devices, the billions of sensors placed on practically every inch of free space, all contribute to an **endless data stream**. We collect it and try to make any sense of it. But how to sift the stream? How do we know what is valuable and what is not?","templateKey":"article-page","settings":{"date":"November 07, 2018","slug":"data-visualization-in-d3-javascript-library","type":"blog","category":"Tech"},"contributor":"Marcin Brach"}}},{"node":{"excerpt":"","id":"a3748254-2e36-5a1e-b1c3-e12684fd7a66","fields":{"slug":"/blog/marble-js-new-open-source-framework-for-javascript/"},"frontmatter":{"title":"Marble.js – new open source framework for JavaScript","order":null,"content":[{"body":"The [Marble.js](https://marblejs.gitbook.io/marble/) framework is an open source project created by Józef Flakus, Boldare’s JavaScript Developer. He built it as a response to the lack of a new approach to programming in the backend world of Node.js. The purpose of Marble.js is to be an** HTTP middleware for the Node.js platform**, which at its core is based on the functional reactive programming paradigm in RxJS. Thanks to Marble.js, the developers can create an API in condensed form which is faster and easier to expand.\n\nWhy Marble.js? The inspiration for the name came from a popular form of notation and visualization of asynchronous data streams, also called „marble diagrams”,  which are used for teaching, and documenting the data flow and stream transformations.\n\n![marble.js](/img/middleware.jpg)\n\nI asked Józef why he decided to build Marble.js:\n\n> In my opinion, reactive programming is not just a simple trend but a real direction in which JavaScript is heading. Reactive programming allows faster functionality increments through its ability to determine complex behaviors much more simply and with less code. The only obstacle standing between today’s approach and the future is to understand the paradigm. From a technical and business point of view, it’s worth adopting and investing in reactive programming. Interestingly, this is not a new solution – libraries such as RxJS have been with us since almost 2009, but until the new version of Angular was released they were not so popular.\n\nIf you like to know more about the philosophy behind Marble.js, you can check the project [documentation on GitBook](https://marblejs.gitbook.io/marble/) and visit [Marable.js GitHub ](https://github.com/marblejs/marble)profile.\n\n## Using a lean startup approach for Marble.js\n\nBuilding a new framework is not something you can do overnight. It is always a process with a clear philosophy behind it. For Józef, the idea for Marble.js was born months ago. However, he took his time and made sure that there were no similar solutions on the market.\n\n\\>>Interested in lean approach? Check out [Polco case study](https://www.boldare.com/blog/case-study-polco/)\n\nAfter analyzing the market, Józef got to work. He decided to use a lean approach for the whole process. In just one week, he built a working **proof of concept **(POC) of Marble.js, and after just one more week, he had an **MVP** of the product online. To validate his ideas, Józef took the MVP to the JavaScript community. He gathered feedback and started to improve Marble.js in subsequent iterations. At the moment of writing, Marble.js is in the pre-release stage, and Józef is still enhancing this open source framework based on community feedback.\n\n![marble.js](/img/marblejs-controllers-in-action.jpg)\n\n## Marble.js to enrich reactive programming\n\nMarble.js received an incredibly positive response from the JS community. In the first week of its publication on GitHub, Marble.js earned 700 stars (and for the first two days, it was the most popular TypeScript repository) and its fair share of exposure on social media, getting attention from, among others, **Ben Lesh** (core maintainer RxJS) and **Minko Gechew** (Google Developer Expert).\n\n![marble.js](/img/ben-lesh-tweet-about-marble.js.jpg)\n\n![marble.js](/img/minko-gechev-tweet-about-marble.js.jpg)\n\n**What are the plans for Marble.js? Józef:**\n\n> The short-term plan is to release a 1.0 version of the framework within the next two months. But for the long run, I would like to create a community around Marble.js. Because it is an open architecture based on a ‘middleware system’ the community can create its own (let’s call them) plugins to complement the infrastructure. I also hope that Marble.js will contribute to the popularization of the reactive programming approach.\n\nI keep my finger crossed."}],"job":null,"photo":null,"cover":"/img/marblejs.jpg","lead":"The strongest foundation for every successful company is its people. At Boldare, we are proud of every single person who takes part in our journey of building amazing digital products because we know that they are exceptional individuals and team players. And the **Marable.js** framework by **Józef Flakus** perfectly illustrates what kind of forward-thinkers we have working with us.","templateKey":"article-page","settings":{"date":"November 07, 2018","slug":"marblejs-new-open-source-framework-for-javascript","type":"blog","category":"Tech"},"contributor":"Kamil Mizera"}}},{"node":{"excerpt":"","id":"209d906b-0385-5007-8608-34403e51f78e","fields":{"slug":"/blog/system-story-the-little-sentence-that-builds-big-things/"},"frontmatter":{"title":"System Story – the little sentence that builds big things","order":null,"content":[{"body":"## Don’t drown in the information jungle\n\nAt the beginning, we have the entry brief, however, we can’t take it for granted.\n\nThat’s why the meeting between the client and the rest of the team is crucial. During this **workshop**, we define, little by little, a common vision and **business goals**. By the end, we have understood the project in detail and just need to create a single answer to four little questions:\n\n* What exactly are we building?\n* How are we going to achieve our goal?\n* Who exactly is it addressed to?\n* And… a tricky one: What for?\n\nThis should all be answered in one sentence and… voila! We have our system story - **a summary of the whole project in a single line**. Don’t be under any illusion that it’s easy to write. In fact, you will dwell on it a lot before you create it, believe me. However many people at the workshop, however many sentences… we only need one, a single perfect sentence, approved by the team and the client.\n\n\n\n![system story](/img/system-story-path-v1.jpg)\n\n## Verify your assumptions\n\nI’ll give half of my kingdom to the person who knows everything about a yet-to-be-developed product.\n\nOf course, we ask a ton of questions and gather a huge amount of insight. This allows us to find a **technical solution**, come up with the **general strategy**, plan a team, etc. This mass of information gives us a great overview but can we be 100% sure we know everything? Is what we assume to be the core problem really the problem we want to solve?\n\nTo take an example, before the workshop with our client from Vancouver, we were familiar with the whole** product vision**. We were almost certain that we were to build a catalogue of sconces designed for hotel interiors. During the system story, we verified all our previous assumptions.\n\nOur goal was to build an appealing, modern catalogue of customizable sconces. But… not for the hotel owners, for interior designers. We had to build a tool which would help them **effectively sell **the unique product to the contractors. The proper user path was: _designer chooses a certain sconce from the product list (designed by us), then includes it in their interior project which will be shown to the final client._\n\nWe quickly realized that the designer is like a bridge between the owner of the business and our website. And they became our story users! The **system story gave us the certainty** that we could be sure we had found the perfect user. The rest of the project was about answering to that user’s needs.\n\n\n\n![Numera Lightning](/img/numera.jpg)\n\n## Good navigation throughout the design process\n\nAnother key point is to remember the user’s needs and** business values**. The system story stays with us during the whole release. Only such verification provides a strong and **effective product**.\n\nOur collaboration with a client from the Saudi Arabia is an example. Our main goal was to create the best search offers for Saudi travelers. The product had to respond **users’ needs **and find the most appropriate deal at a good price. The system story was helpful from the beginning but when we were designing the wireframes it was critical. There were many features on the key view, but we knew our user and his needs. We focused on a quick, useful search with dedicated and matched results. **Each increment was verified with the system story.**\n\nFinally, we built a useful, modern and intuitive booking engine, responsive to today’s needs. That was a huge challenge. But a good system story guided us quickly to the right solution.\n\n![Rehalati](/img/rehalati.jpg)\n\n## A small thing but a weight of gold\n\nFrom the very start of a project, throughout its implementation, to product testing, the advantages of a system story are clear. The **Product Owner** verifies the project assumptions and clarifies the final vision with the stakeholders and the team. The developer’s team is sure what, for who and why the product is needed. This allows them to verify further features.\n\nFinally, it gives comfort and certainty for all, that everyone is on the same point and has the same knowledge. It helps build a fruitful relationship between the PO and the team too. So… it’s useful for everyone.\n\nTo sum up, the system story (also known as the “**product story**” or the “**product statement**”) describes the product users and verifies the business need. It helps to build the right product for a particular user which responds to real needs. Furthermore, it helps to avoid basic, major mistakes. That **saves money and time** in the long run. From the other hand, it also provides the comfort and certainty that everyone is on the same point, has the same knowledge and is following the same path to reach the business goal. And it really binds the team together.\n\nHowever, it’s only the tip of the iceberg. There are many other traps on the design process road. But more about those in subsequent posts…\n\n\n\n![system story](/img/system-story-graphic.jpg)"}],"job":null,"photo":null,"cover":"/img/system-story.jpg","lead":"We know that a **project kick-off workshop** always means obtaining a lot of information.\n\nFurthermore, the **product design **journey can be long and bumpy!\n\nIn our [product design and development process](https://www.boldare.com/product-design-and-development/) here at Boldare, there are many tools which help us navigate along the right path and verify our assumptions. We don’t want to keep them all under our hat!\n\nToday, we reveal the first step in any successful development project!\n\nRead on to find out why it’s worth working on a system story.","templateKey":"article-page","settings":{"date":"October 29, 2018","slug":"system-story-the-little-sentence-that-builds-big-things","type":"blog","category":"How to"},"contributor":"Anna Bil"}}},{"node":{"excerpt":"","id":"4063b7a7-933f-5dc0-ad59-812f89ab802d","fields":{"slug":"/blog/digitalizing-renewable-energy/"},"frontmatter":{"title":"Digitalizing renewable energy","order":null,"content":[{"body":"## The rise of the renewable energy sector\n\nIn the last few decades, there have been countless projects aiming to increase the share of renewable energy in global energy consumption. This effort has paid off. We are much better at generating “green” energy than 20-30 years ago, and that brings benefits. In 2016, more than [10% of energy consumption](http://www.ren21.net/wp-content/uploads/2018/06/17-8652_GSR2018_FullReport_web_-1.pdf) was covered by so-called **modern renewables** (including energy generated by wind, solar, biomass, geothermal, ocean & hydro sources) . What is more, the average 10-year growth rate of modern renewables at that time increased by 5.4%.\n\nThe role of “green” energy is continually growing. In countries like Denmark, modern renewables have became **a crucial source of energy for the grid** (in Denmark renewables account for almost 60% of total energy generation, in Uruguay the figure is 30%, in Germany 28%). This growing share of renewable energy is an effect of the **heavy investment **over recent decades. In 2017, new investment in renewable power and fuels reached $279.8 billion, rising from $181 billion in 2008.\n\n![REN21 Renewables Global Status report](/img/new-investment-annual-in-renewable-power-and-fuels.jpg)\n\nA fair share of that investment was targeted at solar power ($161 billion) and wind power ($107 billion).\n\n![REN21 investments by type](/img/global-new-investment-in-renewable-energy-.png)\n\nOne tangible effect is the increase in size of the **renewable energy market **which, according to [Allied Market Research](https://www.alliedmarketresearch.com/press-release/renewable-energy-market.html), is worth $1,469,078 million and will have grown by about 50% by 2025. And this optimistic forecast for a renewable energy industry can come true with the help of digital transformation.\n\n## Digitizing energy\n\nGenerating energy from renewable resources is a challenge in light of the need to manage multiple and decentralized sources. Additionally, the industry [faces complex challenges](https://www.res4med.org/wp-content/uploads/2017/05/digital-energy-transformation-whitepaper.pdf) in the form of power delivery and quality, identifying new revenue sources, and improving asset level visibility as well as issues connected with cyber security, and implementing and integrating new technologies – the list of factors is long.\n\nAll these issues raise the need for digitalization which can push the industry further and boost the generation and distribution of green energy. But how will “**digitalization energy**” help?\n\n![Sonnen](/img/sonnen-case-study-developing-software-and-ux-boldare.jpg)\n\n## The benefits of digitalization for the energy sector\n\nImplementation of new technologies has had a positive impact on the industry. [According to McKinsey](https://www.mckinsey.com/industries/electric-power-and-natural-gas/our-insights/the-digital-utility-new-opportunities-and-challenges), digitalization can make improvements in areas like:\n\n### Energy generation\n\n* Optimized plant maintenance\n* Spare parts management\n* Fuel management\n\n### Trading\n\n* Fewer losses\n* Preventive maintenance\n* Workforce productivity\n\n### Retail\n\n* Individual, new products\n* Better prices and customer segmentation\n* Digital operations\n\n### Group headquarters\n\n* Optimized operations\n* Management through enterprise resource planning\n\nWe can easily add to this list of improvements life extension for power plants and networks, lower network losses, lower O&M costs, and many more.\n\nAll of this can be achieved by implementing and using high tech. How?\n\n**\\>>Interested in digital transformation? Check how we help **[**sonnen build web app Visualising Energy**](https://www.boldare.com/work/case-study-sonnen/)****\n\n## The technological shift in energy\n\nGenerating, managing and distributing energy is more than ever a matter of gathering, processing and using carefully **selected data to optimize processes and resources**. That is why energy companies [invest heavily](https://www.iea.org/digital/) in the digital electricity infrastructure and software. In 2016 alone, they spent $47 billion on this, 20% more than the year before.\n\n![Digitalization and Energy IEA 2017](/img/investments-in-digital-electricity-infrastructure-and-software.png)\n\nAmong the many digital solutions being explored, two cutting-edge technologies are at the top: IIoT and AI.\n\n## Industrial Internet of Things (IIoT)\n\nThanks to the development of the so-called **Internet of Things**, the renewable energy industry can collect enormous sets of essential data. Smart meters and smart grids, packed with sensors to collect data related to diagnostics, maintenance and the health of assets, are a great example of exploring the possibilities of the Internet of Things with renewable energy sources in mind. Also, thanks to IoT devices in smart homes and smart buildings, companies can better recognize consumer needs and monitor real-time energy consumption in order to optimize energy transmission.\n\nHowever, collecting raw data is not enough to make a meaningful change. This is why the renewables industry uses the powerful possibilities of AI.\n\n## Artificial Intelligence (AI)\n\nAdvanced AI algorithms are used to analyze data, build **forecasts models **and even act autonomously, if necessary. Artificial intelligence can be used in many areas relevant to the renewable energy industry.\n\nOne of them is energy storage. AI is used to improve storage efficiency. For example, [The Stem](https://www.stem.com/) company uses AI to map energy usage and track fluctuations in energy rates for more efficient storage.  \n\nAnother example of AI use is the case of[ DeepMind](https://deepmind.com/), which helped Google to control temperature and **power consumption** in their data centers to increase efficiency. Also, [Nest](https://nest.com), owned by Alphabet, is an excellent example of using AI to monitor the energy consumption behavior of individuals and businesses via smart thermostats.\n\n![Nest thermostat](/img/nest-thermostate.jpg)\n\nArtificial intelligence can also be used to forecast weather and **atmospheric conditions**, including the amount of hourly photovoltaic energy that will be produced at power plants. Why is this so important? Because weather conditions impact the power that can be generated from solar or wind sources. This is why Spanish company [Nnergix ](https://www.nnergix.com/)pools data from the energy industry, combines it with satellite data, and uses machine learning to make more accurate forecasts.\n\nThese are just a few examples of using artificial intelligence in renewables. Beside the IIoT and AI, many other** digitalization solutions are having a positive impact on the industry**, including platforms for asset management, logistics management, and improving communication and workflow efficiency for employees. All of these are part of the digital transformation changing the renewable energy industry.\n\n## This is just the beginning of the digital transformation of renewable energy\n\nThe global consumption of energy is growing, and according to the [U.S. Energy Information Administration](https://www.eia.gov/todayinenergy/detail.php?id=32912) (EIA), it won’t change in the near future. The EIA forecasts that global consumption of energy will grow by 28% by 2040. However, [according to](https://www.mckinseyenergyinsights.com/insights/the-drivers-of-global-energy-demand-growth-to-2050/) McKinsey, by 2050, almost 26% of energy will come from renewable resources, and notably, 7% will come from wind and solar. This is a great opportunity for companies from both the “green” and “traditional” energy industries to seek advantage from **digital transformation to meet the power and energy needs of the future**."}],"job":null,"photo":null,"cover":"/img/wind-turbines-photo-by-jason-blackeye.jpg","lead":"We need energy. The pillars of modern society and the global economy are built on it. We generate it from multiple sources and consume it on an unprecedented scale. In 2017 alone, humankind [consumed](https://yearbook.enerdata.net/electricity/electricity-domestic-consumption-data.html) more than 20,000 TWh, twice as much as in 1990. However, in the same year, almost **79% of energy** came from irreplaceable fossil fuels. This is why we need more energy from renewable sources.","templateKey":"article-page","settings":{"date":"October 23, 2018","slug":"digitalizing-renewable-energy","type":"blog","category":"Future"},"contributor":"Kamil Mizera"}}},{"node":{"excerpt":"","id":"a9a74167-061d-5449-a2c6-dc7c1782dc89","fields":{"slug":"/blog/6-benefits-from-having-a-qa-ba-in-your-development-team/"},"frontmatter":{"title":"6 benefits from having a QA/BA in your development team","order":null,"content":[{"body":"A product owner expects to cooperate with an experienced and creative team that will help them to develop the best possible web product and satisfy end users. Confidence in product quality is essential and successful delivery depends on all interested parties understanding each other, sharing an awareness of users’ pain points and goals, and also of the business objectives that inspired the entire product.\n\nThis all usually involves two specialists: one to take care of testing and another to support everyday tasks related to requirements. However, what if you could invest in both by adding **only one person to your team**?\n\n\\>> **You might be also interested in the article:** [A step by step guide to Event Storming](https://www.boldare.com/blog/event-storming-guide/)\n\n## Who is the QA/BA specialist?\n\nA quality assurance and business analyst specialist is a functional tester whose goal is also to facilitate everyday work with business requirements in the development process.\n\nThe role is designed to support the team throughout the entire product development in** two major areas:**\n\n1. Achieving development of a high quality web product.\n2. Contributing to a shared understanding between the development and product teams. \n\nThe **quality assurance and business analyst** will help to analyze initial goals and needs, meticulously evaluate product requirements, support the design process, ask tons of questions, facilitate communication between all interested parties, and eventually test the implemented features.\n\n![team meeting at Boldare](/img/team-meeting.jpg)\n\n## 6 advantages that your team and product gets with a QA/BA\n\nLet’s assume that the team’s goal is to create a brand new product or enhance a solution already on the market. Above all else, what is expected from them is creative thinking and the ability to solve problems. Introducing a specialist to the team who can **facilitate this process**, knows techniques that will help the team dig deeper into the business objective, and at the same time remembers about crucial edge cases brings a lot of value to the general team effort.\n\nTo gain a better knowledge and feedback from an experienced dev team on the subject of co-operation with a quality assurance and business analyst specialist, I conducted a simple survey asking about the biggest benefits from incorporating this role into everyday workflow. From that exercise I was able to extract six core advantages of introducing a **QA/BA specialist** to your organization.\n\n### 1. Well-organized and maintained requirements\n\nIn order to expedite a shared understanding of what has to be done, the requirements have to be clear, precise, feasible, consistent and current. But who has the heart to keep it all constantly up to date?\n\nA a quality assurance and business analyst makes every effort to **keep the stories small and independent** from the very beginning. They take care of user story mapping, well-described acceptance criteria, and easy access to other necessary elements, like designs, flows, etc. Usually, they can quickly answer developers’ questions about the expected behavior of features or end user activities, and can facilitate discussions related to concerns about the product that is being built.\n\n### 2. Better understanding during testing\n\nGood requirements should also be testable and anticipate the edge cases across that the [development team](https://www.boldare.com/development-teams/) will encounter. If enough attention is paid to those aspects from the very beginning then the risk of high severity bugs is definitely lower in the UAT phase.\n\nIf a a quality assurance and business analyst is part of the team, all members are encouraged to think from the start about how to verify assumptions. Eventually, someone who has deep knowledge about the features’ origins (business goals, user pains and gains, interactions with other parts of the system…) will test them. And the **better the understanding of the product**, the more accurate those tests are.\n\n### 3. More valuable decisions, earlier\n\nWhy? What about? What if? These are examples of kind of questions that you should hear most often from a a quality assurance and business analyst. But those questions are not only aimed at product owners during requirements gathering, but also at developers during testing or just everyday work when the team needs to tackle problems.\n\nSurprisingly, through my entire career I have heard from the clients that what they value most in cooperation with me are the questions that I persistently ask. **Questions help to spot the gaps, avoid risks** at early stages, think about consequences and impacts for the entire product, and encourage everyone to focus on creative solutions.\n\nIt’s important to note that all of this does not happen at the UAT phase or after production release, but much, much earlier – at the point when the ideas about the product are brought to life.\n\n![team meeting at Boldare](/img/team-meetings.jpg)\n\n### 4. Happy developers\n\nProgrammers’ time is golden. Solving problems is what they like. **Creating amazing products** is fun for them. In many cases, browsing through a wall of text describing requirement specifications, updating every little detail, communicating all changes and maintaining documentation is not what they enjoy the most.\n\nHaving a quality assurance and business analyst as a team member leads to a situation where developers do not have to spend additional time on agreeing detailed acceptance criteria or thinking about all edge cases at stages when the requirements are still vague.\n\nWhen the time is right, they can focus on evaluating the path to the feature’s goal, fix users problems, provide thorough analysis during refinement and – what they do best – actual development.\n\n### 5. Efficient communication\n\nOrganizations that hire outsourced teams tend to be concerned about the **quality of communication** with the contractors. Especially when different time zones are a factor. Transparent communication is the key to mutual trust and success.\n\nWith a a quality assurance and business analyst in the team, the discussion is constant. They ask about objectives, reasons and decisions, but also encourage the developers to do the same. As a result, nobody is afraid anymore that their questions might be ignored or seen as silly.\n\nMoreover, acceptance criteria do not get lost in the chain of communication because there is a dedicated person to check if the requirements are correctly organized and communicated to the team (and tested), so no one is frustrated that we forgot about something.\n\n### 6. A non-technical perspective\n\nCreating exceptional products requires that **user stories are implementation-free**. They should represent the expected change in end user behavior, not technical aspects of achieving the final solution (which is the developers’ role to figure out).\n\nA a quality assurance and business analyst keeps the focus on goals and users even if it is tempting to dig into technicalities. Having someone with a different perspective on the team broadens the horizons and helps everyone to look at the various aspects and inevitable challenges from another angle. The result is that people are inspired to have deeper conversations.\n\nThe advantages listed above draw a clear picture of how a a **quality assurance and business analyst** role can support a team’s focus through greater understanding of the business objectives. By adding a a quality assurance and business analyst person to the development team, you ease the process of eliciting and maintaining business requirements, and securing the proper flow of knowledge and expectations during development and tests. Apart from that, out-of-the-box thinking is encouraged, you introduce a non-technical perspective and facilitate more professional internal and external communication.\n\n\\>>**You may also be interested in article:** [Wondering about viability? Let impact mapping reassure you](https://www.boldare.com/blog/build-product-that-make-impact/)\n\n![team meeting at Boldare](/img/team-working-together.jpg)\n\n## Prospective questions and concerns\n\nYou might be thinking, “Isn’t it useless or even harmful for an agile team’s self-organization?” or simply, “What is the value of combining the roles, wouldn’t that be distracting?” Here are some common concerns when thinking about hiring a a quality assurance and business analyst specialist.\n\n### Are they another product owner or some kind of a proxy?\n\nDefinitely not! Why not? Basically, the role of QA/BA is to support conversation between the client’s product team and the development team, not to take over their responsibilities.\n\nA a quality assurance and business analyst can help to elicit requirements, so that they are readable and useful for coders and make recommendations about usability, but they will not have the deep business knowledge required to make final decisions. That is entirely up to the product owner and business stakeholders (although a QA/BA can provide some techniques to support that process).\n\n### Will there still be a place for developers to ask questions?\n\nOf course! Adding a QA/BA to the team definitely does not mean that the only role left for a developer is coding. To build a great product it is crucial to combine experience and input from various points of view. And while a a quality assurance and business analyst specialist can ask questions about goals, users, flows and edge cases, they will never deeply investigate technical details and risks that might have a significant impact on the final solution.\n\nWhat, in my opinion, is worth mentioning is the fact that when, after a few months of cooperation, I asked the team what had changed since I joined, the majority said that they stopped getting frustrated about wasting time on ineffective meetings that were supposed to be devoted to requirements analysis.\n\nNow, we still meet and discuss the user stories and acceptance criteria, but at a later stage, when the vision is clearer and the team can focus on the flow.\n\n### What if a BA suggests non-feasible solutions?\n\nGood cooperation is always based on communication and discussion, so although a QA/BA might have some wild ideas, they will never push for them without consulting with the development team and the product owner in the first place.\n\nThat said, I strongly believe that even the ideas put forward by a non-technical team member may inspire others to figure out practical technical solutions.\n\n### Will the developers still be involved in communication and product design?\n\nYes, a a quality assurance and business analyst should never take on the role of a secretary or be the only one point of contact between a client and the development team (nor should any other team member). All team members have to be wary of getting lazy and maintain a constant line of communication with the product team.\n\n![team meeting at Boldare](/img/team-discussion.jpg)\n\n## Why is all this important?\n\nNowadays, tech products exist in an environment where the market changes pretty fast. For an outsourced team, it is essential to keep pace with the rate of change in order to support clients in running the most successful businesses.\n\nThat is why we make the effort to create cross-functional teams that not only provide code, but also have the expertise to support the product’s entire development, including research, testing, user experience and all activities focused on understanding the business pains and needs.\n\nAfter more than a year of having the a quality assurance and business analyst specialists in the organization to support the team, this is what we noticed at Boldare:\n\n* there is more interest in requirements from the development team members (developers ask about elicitation techniques, attend workshops regarding analytic skills and seem to be more eager to face challenges related to functional requirements);\n* product owners get a helping hand in everyday duties related to requirements management and documentation;\n* quality of developed products is higher, because the functional testing is more profound;\n* communication between development and product teams has improved – everyone is involved in the process of problem solving and it is easier to reach a shared understanding.\n\nMany teams work really well without an analyst, but **having a QA/BA certainly helps in demanding product development** with a complex business domain.\n\nThe support of a person who has more business-focused and quality-oriented competences saves time, boosts creativity, strengthens the entire product team in achieving the common goal, and limits the risk of misunderstandings. And that is, without doubt, essential for tech products’ prosperity."}],"job":null,"photo":null,"cover":"/img/team-meeting-in-conference-room.jpg","lead":"Imagine: you have a product which you have built with a development partner, an external company. They provide a **full stack development team** to secure the success of the product. Obviously, they are responsible for technical implementation and testing, but how can your in-house Product Manager make sure that the business vision is clearly transmitted to the people who will bring it to life?","templateKey":"article-page","settings":{"date":"October 11, 2018","slug":"6-benefits-from-having-qa-ba-in-your-team","type":"blog","category":"How to"},"contributor":"Natalia Kolińska"}}},{"node":{"excerpt":"","id":"e20e0491-9012-501f-9237-56c08d8a7dda","fields":{"slug":"/blog/wtf-open-source-web-testing-framework/"},"frontmatter":{"title":"WTF: Open Source Web Testing Framework","order":null,"content":[{"body":"One of the goals of creating this framework was to **simplify writing tests** that are useful both for development team and for business purposes. For this reason, the test execution logs are quite complex. Reports may be useful for business users thanks to **Gherkin scenarios**, which use natural language to describe the performed tests, and screenshots to visualize the errors. \n\nDev teams will make use of the low-level logs, such as requests history (HAR) collected by proxy or browser console logs. Framework methods are high-level and have built-in waits, which facilitates writing tests significantly. The ease of test-writing was itself tested during in-house training for our company interns, who were able to learn how to write tests in quite a short time despite being previously unfamiliar with the technology.\n\n**Boldare’s Web Testing Framework** is available via [GitHub](https://github.com/xsolve-pl/testing-framework) and [NPM](https://www.npmjs.com/package/xsolve_wtf).\n\n## Main goals\n\n### Language\n\nThe framework was written in **JavaScript**. There were several reasons for that choice, the most important being JavaScript’s popularity when it comes to web apps. When tests are written in a language commonly used by developers, there’s no problem with finding people who could run a code review of the tests. Besides, code reviews carried out by someone specializing in a given technology are the most valuable – they are more than mere checking of general assumptions. In case of Python or Java that could have been problematic.\n\n### Selenium WebDriver\n\nSelenium WebDriver is probably the most frequently used tool for automating E2E web apps tests, directly or indirectly. Its bindings are also available for JavaScript (although they’re simplified in comparison with PHP, Python, or Java). So, Selenium WebDriver was also used as a base for the Boldare Web Testing Framework.\n\n### Gherkin – useful for business goals\n\nE2E tests should be useful not only from the dev team’s perspective. Business clients are also important users of tests, which should be easily understood by non-technical persons. That’s why Gherkin was used as the BDD layer. When properly used, the overhead on the Gherkin layer is minimal, and Gherkin itself has a lot of advantages for dev teams: it generates clear test reports, makes it easier to create bug reports, etc.\n\n### Logs\n\nThe main purpose of E2E tests is to verify if the app is working correctly. However, it’s also crucial to quickly identify errors in the case of a red test. In such situations, each detail that can help to reproduce the error or fix it may come in handy.\n\n* Gherkin scenarios are the first level of logs. In fact they’re steps helping reproduce the bug: apart from being used in bug reports, they will be understandable by clients.\n* Screenshots are another frequently used test output – thanks to them, you can see what the tested app looks like in the moment of failure, from a high-level point of view.\n* For developers, **HAR** is definitely a useful log. It can be used to track particular requests, which can be very helpful in identifying problems. Proxy is used to collect them, and HAR files are saved for every scenario.\n* The browser console logs can be of use mainly for front-end developers.\n* The Selenium driver log can be a great help for QAs, mainly while writing new tests.\n* The framework log supplements the logs above. It can be general – in the case of a method failure – or specific, providing information that helps track the functioning of the tests.\n* Other useful logs (without support implemented in framework yet) include web server logs. Another source of logs can be tools, which are specific to the technology used in the project: in the case of the **PHP and Symfony** back-end, these would be Symfony Profiler logs.\n\n### Easy and quick test implementation\n\nCommercial project tests are always limited by budget – you can virtually never test the app as vigilantly as you would like to. Still, the framework you use has a significant impact on the pace of test writing.\n\n* High-level methods available in the framework facilitate test implementation and also speed it up. The availability of these high-level methods does not limit the user – low-level Selenium WebDriver methods are also available and can be used if necessary.\n* Framework methods have built-in waits, which makes it much simpler to use them. The user retains the control over them – the default values of the configuration file _config.json_ are normally used, but you can choose a non-standard value when calling particular methods.\n\n### Stability\n\nDev teams cannot trust tests if the results do not recur in a given version of the app or when some tests are randomly “red”. The most frequent causes of non-stable tests that I’ve encountered are incorrectly used waits and application state changes during the execution of an action. The built-in waits in our framework methods have another good point – apart from the ease of use and quickness of test writing – they improve test stability.\n\n### Headless\n\nE2E tests are often run on headless servers. The frequently recommended headless browsers, e.g. PhantomJS, do not correspond with real browsers. PhantomJS uses a forked version of the **QtWebKit** engine from the Qt library, which is considerably different even from the WebKit engine used in Safari. E2E tests run on such browsers will not guarantee the proper functioning of the app on the real browsers.\n\nOne option of running headless tests on a real browser is to use **Xvfb** (X virtual framebuffer), a Linux tool that enables you to create a virtual screen within which a real browser (like Chrome or Firefox) can be started. If a browser is not available for Linux, you can use Remote Driver and connect to a virtual machine or a cloud service offering browsers for test execution.\n\n## Methods\n\nThe framework gives access to methods which can be generally divided into actions, validators, and “other”.\n\nActions are methods allowing the use of particular tasks in the browser, e.g. clicking. Validators verify the effect of the performed actions.\n\nBoth actions and validators are performed in the context of page elements: for example, you can click on an element or check if it is visible. The elements are identified by XPath selctors.\n\nA complete list of the available methods can be found in the manual at GitHub; below, you’ll find a few examples.\n\n### Actions\n\n* click(xpath, customTimeout)\\\n  Thanks to the _**click** _method, you can click on an element identified by XPath referenced by an _**xpath**_ parameter._\\\n  **customTimeout**_ is an optional parameter serving to define the maximum time for an action. If it’s not set, the default value from the framework’s configuration file will be used.\n* loadPage(url, customTimeout)\\\n  loadPage opens a page given as a **_url_** argument.\\\n  The _**customTimeout**_ parameter, just like in the click method, is optional.\n* Main actions:\\\n  fillInInput\\\n  setCheckboxValue – defining the checkbox value – true / false\\\n  setFileInputValue\\\n  sleep – static sleep\\\n  cleanBrowserState – cleaning browser state (cookies, localStorage, sessionStorage, console log)\n\n### Validators\n\n* Get and Validate\\\n  In the framework, get methods return a value, e.g. the number of elements on the page, the text on the elements, etc. _**Validate**_ methods serve to verify whether the number of elements is correct or whether the text is right.\\\n  The main difference is that _**get**_ shows the current status, and _**validate**_ checks that a given value agrees with the expected value before the timeout. This is especially important in the case of dynamic pages where the value can change. Thanks to _**validate**_, logic can also be transferred to a lower level – instead of getting the values during the tests to check if they’re correct, the validator can be used. The logic can be transferred even lower: to XPath, which enables you to verify several values at the same time, as can be seen in the following example – _**validateElementDisplayed**_.\n* validateElementDisplayed(xpath, customTimeout)\\\n  The validateElementDisplayed method validates the visibility of the XPath-identified object. It can be a simple element or an extended XPath like the one presented below, validating two values simultaneously. XPath finds the _**div**_ element containing two child elements – _**span**_ – with specific values.web testing framework\n\n![Web Testing Framework 1](/img/development-code-div.png)\n\n* Main methods\\\n  getCurrentUrl, validateUrl, validateUrlByRegex\\\n  validatePageReadyState\\\n  validateElementDisplayed / NotDisplayed\\\n  validateElementVisible / NotVisible\\\n  validateElementsDisplayed / NotDisplayed\\\n  getCheckboxValue, validateCheckboxValue\\\n  getElementsNumber\\\n  getElementText, validateElementText\n\n### Other methods\n\nOther methods are not directly related to the actions performed on the page, but they may prove useful while writing tests. These are, for example, loggers and methods allowing the taking of screenshots or loading the current time.\n\n## Configuration\n\nTo configure the framework, you can use the config.json file. It’s one of the framework’s requirements, so it should be visible in the main project directory. It contains the most important settings of the framework – from the most basic, like the Selenium Server URL, to more advanced ones, like the level of proxy logging or Selenium Server polling delay. The picture presents a sample configuration; you’ll find more detailed information in the GitHub documentation.\n\n![Web Testing Framework 2](/img/development-code-configuration.png)\n\n## How do you make a test?\n\nThe framework doesn’t impose any particular way of writing a test, apart from the fact that Gherkin scenarios must be on the top. Below, you’ll see one of the possibilities.\n\n### Gherkin\n\nIn the **_features_** directory, there are .**_feature_** files containing Gherkin scenarios for particular functionalities. In the example below, you can see a sample scenario verifying the correctness of an online shop functionality – buying a product.\n\n![Web Testing Framework 3](/img/development-code-scenario.jpg)\n\nThe steps are high-level, as they describe whole actions, for instance, adding a product to the cart. In this way, they are both understandable by business users and useful for dev team, and at the same time they reduce the overhead resulting from writing scenarios. Additionally, any possible changes in the app will not result in the need to rewrite a big part of the scenario – some modifications “below” should be enough.\n\nIn most cases, test data are not directly placed in Gherkin – there is a clear, separate name which allows to get them from test-data file.\n\n### Step->Context\n\nThe example of logging in will show you how individual steps are mapped with corresponding actions.\n\n![Web Testing Framework 4](/img/development-code-user-logs.jpg)\n\nContext methods are automatically generated by Cucumber – you just need to name the parameters used (in this case: _**userName**_) and call the adequate method from the proper page.\n\n![Web Testing Framework 5](/img/development-code.jpg)\n\nIn this situation, the log-in form undergoing the test is on the home page – therefore, the _**logIn**_ method used to log in is located in _**HomePage**_ (the home page is really simplified so there’s no need for a separate Page, such as _**LoginPage**_). It only serves to execute the appropriate method and pass the parameter: userName (“test user 1”). The correct logic is in the Page method.\n\n### Page\n\n![Web Testing Framework 6](/img/development-code-function-login.jpg)\n\nThe **_logIn_** method visible above fills in the login and password fields and clicks on “log in” button. Test data (username or password) are taken from the test-data file by means of the **_getUserData_** method. The user in test data is identified through the username provided in the **_userName_** parameter.\n\n### Test data\n\nTest data are located in _**testData.js**_. This can be, for example, JSON containing all the necessary values. User data can be named, e.g. _**userData**_. In the log-in scenario, the username and password would be sufficient. In other scenarios, though, other details might be necessary, such as the e-mail address.\n\n![Web Testing Framework 7](/img/development-code-user-data.jpg)\n\nThe _**getUserData**_ method presented in the example only returns values for a particular user, improving readability when compared to direct getting of the value. It might happen, though, that the data must be processed in some way.\n\n![Web Testing Framework 8](/img/development-code-test-data.jpg)\n\n## Open source\n\nThe Boldare Web Testing Framework is a young project – there are many functionalities to be added and numerous ways of improving the existing ones. Feel free to take part in the process of developing the framework, both in the form of PRs and through suggestions of what could be changed or made better.\n\nYou can access the framework via GitHub and NPM."}],"job":null,"photo":null,"cover":"/img/kamil-chyrek.jpg","lead":"Boldare’s Web Testing Framework is a framework designed for the automation of End-To-End (E2E) tests of web applications. It was created as part of a company initiative called “10% of time for **open-source**” and it was released under the terms of MIT license.","templateKey":"article-page","settings":{"date":"June 05, 2018","slug":"web-testing-framework","type":"blog","category":"Tech"},"contributor":"Tomasz Konieczny"}}},{"node":{"excerpt":"","id":"c41c41c0-b0ba-5f70-88ce-c4d3f425fa7f","fields":{"slug":"/blog/when-two-become-one-the-story-of-boldare/"},"frontmatter":{"title":"When two become one. The story of Boldare","order":null,"content":[{"body":"Boldare is the result of a natural joining of two sister companies: **XSolve** and **Chilid**. Boldare is a way to channel the skills and aspirations of people working in both companies into one. To give them a new framework for personal development and space for even more agile thinking and working. And to offer something different to the market: a company which creates digital products not for the clients, but with clients to meet the real needs of end users. A truly forward-looking digital product development company.\n\n## The roots of Boldare\n\nBoldare is the natural evolution of XSolve and Chilid. XSolve, established in 2004 by **Piotr Majchrzak**, is focused on software development and long-term collaborations. The company offers agile-thinking, scrum development teams dedicated to working with customers side by side to help them solve their business problems. The company has been listed among [Global PHP Leaders](https://clutch.co/press-releases/103-web-software-development-companies-clutch-global-leaders-2017) on Clutch and as the one of the **fastest-growing** private companies in Europe, [according to Inc. 5000](https://xsolve.software/blog/xsolve-on-the-inc-5000-list-our-journey-in-numbers/). \n\n\\>>Check XSolve [official website](https://xsolve.software/), [Clutch profile](https://clutch.co/profile/boldare) and [LinkedIn profile](https://pl.linkedin.com/company/xsolve-sp--z-o-o-). \n\nOn the other hand, Chilid was established in 2010 by **Anna Zarudzka** as a response to different customers needs. Chilid, is a design-driven company, focusing on front-end and rapid development. Chilid mixes product vision, design, software development and agile to deliver digital products, mostly in the form of MVPs. Chilid has [nine Awwwards](https://www.awwwards.com/Boldare/), CSS REEL winner, German Web Award and Indigo Design Award. \n\n\\>>Check Chilid [official website ](https://chilid.com/)and [LinkedIn profile](https://pl.linkedin.com/company/chilid-sp.j.). \n\nBoth companies were meeting different market needs yet working under one roof and cooperating on a regular basis. XSolve and Chilid have been partners on more than **100 products** for clients such as **BlaBlaCar**, **Corel, Agnitio**, PSO, Netrounds, Showbiz Models, Viners, Tauron, Oneida and many more. In time, as the market and customer requirements evolved, the distinction between the two companies began to vanish.\n\n It was time to go one step further."},{"body":"## The reasons to be Bold(are)\n\nBoldare is not a simple consolidation of two companies but a creative approach to their business domains resulting in a new organization and offer. To understand Boldare better, I asked Anna Zarudzka, the CEO of Chilid, the most simple question of all: why?\n\nShe told me there are three core reasons for bringing Boldare to life, which are: \n\n**People**\n\n_**\"**The reason we decided to merge are people. Piotr and I noticed that our people were getting strangled by schemas, that they don't have enough space to breathe. The people working in XSolve and Chilid have slightly different mindsets. Boldare is a way to preserve these mindsets, combine them and put them to use in the service of digital product development. And the one of the tools to achieve that is holacracy. Holacracy, which we introduced in both companies less than a year ago, gives us a unique chance to go with this merger, it catalyzes it. It helps us to preserve the autonomy of our teams and yet keep the focus on a mutual goal. Thanks to holacracy we keep the focus on two core aspects of product development but we are now one organism. Without holacracy, we wouldn't have a proper tool for the merger which would make the whole process much more difficult. Happily ‘Hola’ proved to be useful and helped us to become Boldare.\"_\n\n**Market **\n\n_**\"**The dualism of Xsolve and Chilid resulted from market needs. 8-10 years ago the market wasn't ready for the company where product design and software development are under one roof. Clients were seeking coders in one place and were coming for designers somewhere else. But in the last few years, client needs has been evolving. They're looking for a trusted partner with experience who will assist and guide them through a journey of digital transformation; who will provide a comprehensive offer covering the full digital product development cycle; who won’t force a choice between scalable software or a user-centered interface. Moreover, companies need a partner with whom they can consult on their business needs, and what is more, they expect to find all of this in one place. We want to build this place for them.\"_\n\n**Experience**\n\n_**\"**For the last decade, Xsolve and Chilid have been working side by side but, except for joint projects, for different types of clients with different needs. During this time both companies built a level of expertise in their domains which meets the client's high standards regarding quality and professionalism. Our experience gained from working on more than 250 products for 89 clients is one of the reasons why we decided to merge both companies. We know that we are prepared to offer the market something different and we are doing that with the full awareness that we can provide the same high quality in Boldare, as we did in XSolve and Chilid.\"_\n\n## The story of Boldare\n\nSo, what is Boldare? It is a fusion of two companies and two mindsets. It is experience and know-how accumulated, mixed, transformed and aimed at developing digital products and design-driven software. It is an agile and design-thinking, lean-building, scrum-managing work environment cemented by its unique cultural fit. But this is not a simple case of 1+1=2. It never has been and never will be. \n\n**Anna Zarudzka, the CEO of Chilid:** \n\n_\"Boldare has been established to create products that users would actually use. Products which will build relationships and habits. In this approach, the software is divided into what is needed and what is unnecessary. We want to develop software which is needed, which will shape the future. We want to provide our customers with human-centered products that really meet their business needs. We want to offer them a digital transformation. This requires a comprehensive verification of those business needs. Technology is no longer isolated from humanism. It is technology and humanism together.\"_\n\n**Piotr Majchrzak, the CEO of XSolve:** \n\n_\"With 14 years of experience and having built 250 products built we recognize that in today's world, software development that is not a core activity too often is nothing more than local optimization, and doesn’t empower clients to become global leaders. Today, a successful company needs a super-agile, highly competent design and development team. But that alone is not enough. It’s also essential to have an environment and culture of user-centred innovation to produce future-proof, secure, needed and significant web apps, mobile apps, and enterprise software That constitutes a fundamental paradigm shift of working with an external development company embedded into your organization like an in-house development department. Only in this way can modern companies be certain of executing their vision rapidly, creating habit-building products that are used regularly, and responding quickly to an ever-changing business environment, fulfilling company business goals with minimum waste. Boldare is a response to these changes and new market needs. We offer human-centered digital products and guidance for companies who want to catalyze their innovation or kick start their digital transformation.\"_\n\n**This is Boldare.**"}],"job":null,"photo":null,"cover":"/img/anna-zarudzka-and-piotr-majchrzak.jpg","lead":"This story is not about merging companies. This story is about people. People who for the last 14 years were building exciting **digital products**. This story is about how software development meets design to create something new yet valuable for end users. This is the story of **Boldare**.","templateKey":"article-page","settings":{"date":"June 04, 2018","slug":"the-story-of-boldare","type":"blog","category":"News"},"contributor":"Kamil Mizera"}}}]},"contributors":{"edges":[{"node":{"excerpt":"","id":"ad4a22c2-f1f9-5eed-a322-08c0cbfc72b4","fields":{"slug":"/contributors/adam-ziemba/"},"frontmatter":{"title":"Adam Ziemba","order":null,"content":null,"job":"Customer Success Guide","photo":"/img/adam-ziemba.png","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"de38694f-459b-5c43-a04d-e017daecf733","fields":{"slug":"/contributors/anna-bil/"},"frontmatter":{"title":"Anna Bil","order":null,"content":null,"job":"Product Designer","photo":"/img/ania_bil_blog.png","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"2b26f7a5-7fad-52f7-a597-110764a5b39c","fields":{"slug":"/contributors/anna-skawinska/"},"frontmatter":{"title":"Anna Skawińska","order":null,"content":null,"job":"Java Developer","photo":"/img/anna-skawin-ska-java-developer-.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"487500a7-95fa-52ce-b66e-8fbd7390a170","fields":{"slug":"/contributors/anna-zarudzka/"},"frontmatter":{"title":"Anna Zarudzka","order":null,"content":null,"job":"Co-CEO of Boldare","photo":"/img/anna-zarudzka.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"811fb6bd-64da-5b1f-86af-87488bdd2f99","fields":{"slug":"/contributors/claudia-wensierska/"},"frontmatter":{"title":"Claudia Wensierska","order":null,"content":null,"job":"Product Designer","photo":"/img/image-from-ios-2-2-.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"1daa2bfc-f4d9-54e8-af4c-26803363f04e","fields":{"slug":"/contributors/dave-foxall/"},"frontmatter":{"title":"Dave Foxall","order":null,"content":null,"job":"Blog Editor","photo":"/img/dave-foxall-2-.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"7fb675ae-3ebc-5aae-a81c-5a1d7ece03b0","fields":{"slug":"/contributors/dawid-rogowicz/"},"frontmatter":{"title":"Dawid Rogowicz","order":null,"content":null,"job":"Frontend Developer ","photo":"Dawid_Rogowicz.png","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"96148145-77e2-521e-8483-a24d368a85ff","fields":{"slug":"/contributors/grzegorz-kukla/"},"frontmatter":{"title":"Grzegorz Kukla","order":null,"content":null,"job":"Java Developer","photo":"/img/grzegorz-kukla.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"ac376421-4cfd-5885-9162-114eaf8a15f3","fields":{"slug":"/contributors/jonathan-wooddin/"},"frontmatter":{"title":"Jonathan Wooddin","order":null,"content":null,"job":"Guest Blogger","photo":"Jonathan_Wooddin.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"74b0f21e-659c-5e80-bba2-06603fb3eb65","fields":{"slug":"/contributors/kamil-mizera/"},"frontmatter":{"title":"Kamil Mizera","order":null,"content":null,"job":"Content Editor-in-Chief","photo":"/img/kamil-mizera-.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"8fd24eb6-db34-56ea-bcd4-5492c800964d","fields":{"slug":"/contributors/kacper-geisheimer/"},"frontmatter":{"title":"Kacper Geisheimer","order":null,"content":null,"job":"JavaScript Developer","photo":"Kacper_Geisheimer_JavaScript_Developer.png","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"be6c3e0b-6fbf-5517-99c8-650f78c63b1f","fields":{"slug":"/contributors/kamil-mikosz/"},"frontmatter":{"title":"Kamil Mikosz","order":null,"content":null,"job":"Frontend Developer","photo":"/img/kamil-mikosz.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"ab98f2af-26b1-50c1-a372-8f9059cff184","fields":{"slug":"/contributors/jozef-flakus/"},"frontmatter":{"title":"Józef Flakus","order":null,"content":null,"job":"Senior JavaScript Developer","photo":"/img/20840986_1453742828012914_5601588540288690596_n.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"ebd2adc5-39b1-5a8e-9cfa-cca58c133b21","fields":{"slug":"/contributors/karolina-kolodziej/"},"frontmatter":{"title":"Karolina Kołodziej","order":null,"content":null,"job":"Communications Manager","photo":"/img/karolina-kolodziej.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"06e843fa-c803-5d46-b8da-3392606c180b","fields":{"slug":"/contributors/lukasz-mitusinski/"},"frontmatter":{"title":"Łukasz Mitusiński","order":null,"content":null,"job":"Java Developer","photo":"Lukasz_Mitusinski_Java_Developer.png","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"c285c3f7-5108-5295-a238-b4d2bc4107d8","fields":{"slug":"/contributors/krzysztof-miczkowski/"},"frontmatter":{"title":"Krzysztof Miczkowski","order":null,"content":null,"job":".NET developer","photo":"/img/wp_20150704_002-2-.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"7fe90594-3623-5803-b924-3440cd3cb887","fields":{"slug":"/contributors/mariusz-bak/"},"frontmatter":{"title":"Mariusz Bąk","order":null,"content":null,"job":"Senior Software Developer ","photo":"/img/1810317.png","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"23fe696e-bdd9-5db5-97e5-7c415a90f53a","fields":{"slug":"/contributors/marcin-brach/"},"frontmatter":{"title":"Marcin Brach","order":null,"content":null,"job":"JavaScript Developer at Boldare","photo":"/img/marcin-brach.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"3c39dd75-dc4d-5085-ab47-49eedb24d940","fields":{"slug":"/contributors/mateusz-grzesiukiewicz/"},"frontmatter":{"title":"Mateusz Grzesiukiewicz","order":null,"content":null,"job":"Senior JavaScript Developer ","photo":"/img/mateusz-grzesiukiewicz.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"1166809c-2652-55ff-a9a9-d35c5ff10b32","fields":{"slug":"/contributors/mateusz-koscielak/"},"frontmatter":{"title":"Mateusz Kościelak","order":null,"content":null,"job":"Direct Marketing Lead","photo":"/img/mateusz-koscielak.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"88a52405-13b1-51d6-90dd-dd1f2b4a8c89","fields":{"slug":"/contributors/natalia-kolinska/"},"frontmatter":{"title":"Natalia Kolińska","order":null,"content":null,"job":"QA Business Analyst","photo":"/img/natalia-kolinska.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"159c6e0d-8b74-571e-b355-120ec5a6e00a","fields":{"slug":"/contributors/mateusz-wycislik/"},"frontmatter":{"title":"Mateusz Wyciślik","order":null,"content":null,"job":"Machine Learning/Python developer","photo":"/img/prof_sqr.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"3e951423-0b04-53b7-afb7-e787c02cc143","fields":{"slug":"/contributors/patrycja-kasperkiewicz/"},"frontmatter":{"title":"Patrycja Kasperkiewicz","order":null,"content":null,"job":"Office Coordinator","photo":"/img/patrycja-kasperkiewicz.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"424b273f-f67e-515f-84cd-eeae16915cfb","fields":{"slug":"/contributors/pawel-kaiser/"},"frontmatter":{"title":"Paweł Kaiser","order":null,"content":null,"job":"Customer Success Guide ","photo":"/img/pawelkaiser.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"7e7643bb-e010-5f35-aadb-341b15aa453e","fields":{"slug":"/contributors/pawel-krynicki/"},"frontmatter":{"title":"Paweł Krynicki","order":null,"content":null,"job":"Senior PHP Developer","photo":"/img/paweł-krynicki.jpeg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"91ebd35e-d1c1-5a34-8844-03cfcba5816d","fields":{"slug":"/contributors/radek-grabarek/"},"frontmatter":{"title":"Radek Grabarek","order":null,"content":null,"job":"Guest Blogger","photo":"/img/radek-portret-800.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"9cfe40f6-01b4-55c9-b937-fafd7bd7bf34","fields":{"slug":"/contributors/piotr-majchrzak/"},"frontmatter":{"title":"Piotr Majchrzak","order":null,"content":null,"job":"CEO","photo":"/img/piotr-majchrzak.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"28ee12d9-7f00-5e75-adce-539ff4326637","fields":{"slug":"/contributors/sebastian-musial/"},"frontmatter":{"title":"Sebastian Musiał","order":null,"content":null,"job":"Senior JavaScript developer","photo":"/img/_musial.png","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}},{"node":{"excerpt":"","id":"99f1dc20-b1c5-507f-b4a6-7e24c1f8f3f5","fields":{"slug":"/contributors/tomasz-konieczny/"},"frontmatter":{"title":"Tomasz Konieczny","order":null,"content":null,"job":"QA Engineer","photo":"/img/tomasz-konieczny.jpg","cover":null,"lead":null,"templateKey":"contributor-page","settings":null,"contributor":null}}}]}},"pageContext":{}}