Category Archives: Development

Internet of Things: Challenges

By Sebastian Pereira, Information Systems & Processes at Santex

The Internet of Things, or IoT, is the inter-networking of physical devices, vehicles, buildings and other items embedded with electronics, software, sensors, actuators, and network connectivity which enable these objects to collect and exchange data.

Wikipedia states that the first discussion around “a thing” that was interconnected was a Coke machine that would determine how many drinks were available.

IoT use cases include several applications that range from connected homes, consumer electronics, industries, retail, logistics, government, automobiles, among other areas.

But if it’s been around for so many years, perhaps with different names but with the same discussions in the background, why we are not surrounded by all these things already? Jayson DeMers in his Forbes article states that part of the problem is too much competition with not enough collaboration –  something that discourages and delays the revolution. It is also encouraging bigger companies such as Google, Amazon and Apple, and taking a step into the problem, that they might drive that collaboration with their own applications and infrastructure.

This  competition and little collaboration can be seen as symptoms of a much bigger problem that pose a series of challenges that everybody will have to solve and agree upon for the revolution to come. We are talking about a potential market of billions of dollars for services and applications that range from apparent trivial things to more complex and with higher impacts on societies and economies.

Following are the top 3 challenges I think we have on the horizon with IoT:

  • Security. This is mainly based on the fact that IoT implies more and more devices will be connected through networks, and therefore there will be more opportunities for hackers to exploit. The one thing we learned over the years is that no one is secure, and basically more interconnected devices means more problems – at least more problems to be solved.

To serve as a terrifying example – one of many – take a look at this article, where hackers stopped a journalist’s car in the middle of a highway to prove their point: they can control a car remotely, mentioning this scary scenario: “Imagine last year if instead of cutting the transmission on the highway, we’d turned the wheel 180 degrees,” says Chris Valasek. I can imagine. But he spells it out anyway. “You wouldn’t be on the phone with us. You’d be dead.”

  • Connectivity. If we go back to the definition stated at the beginning of this article, IoT implies that a lot of devices are interconnected, and aside from the security challenge, this means there will be more efficient ways to have all of these devices talk to each other. The (now) classic way of connecting devices as a centralized paradigm for authorization and connection of different nodes within a network may be heading to a decentralized model, such as Fog Computing. With this,  data, computing, storage, and applications are distributed in the most logical, efficient way between the data source and the cloud. There are other solutions where the decentralization is higher, but certainly each option is tied to different security challenges.
  • Making sense of the data. Does Big Data sounds big enough? Imagine something even bigger than. IoT will pose the challenge of cleaning, processing and interpreting vast amounts of data produced by sensors. Gartner estimates that there will be 25 billion connected things in use by 2020.  Internet networking specialist Cisco ISBG’s forecast is of 50 billion connected devices. To have an example of this from the airlines industry, at last year’s Paris Air Show, Bombardier showcased its C Series jetliner that carries Pratt & Whitney’s Geared Turbo Fan (GTF) engine, which is fitted with 5,000 sensors that generate up to 10 GB of data per second.

So basically, applying analytics to IoT has the same general approach on a different scale: how data is collected and how it is interpreted/how can be used. This Forbes article states that applying Machine Learning to analyze the data will be a more efficient option. Given that the current manufacturers of sensors and IoT applications are not experts on analyzing and getting good quality information that can be actionable, new services start to appear on the horizon. One example is Machine Learning As a Service, where buyers can quickly get the insights they need without making huge investments in technologies that are not core to their business.

Of course there are many other challenges with IoT and many problems to solve, but that’s what makes this so interesting to talk about it and work on. Other challenges that can be mentioned are:

  • Power
  • Sensors
  • Standards
  • User Experience and User Interface
  • Waste Disposal
  • Data Storage
  • Laws and Regulations

It certainly states a huge opportunity for business, whether for good or bad purposes.

Sources:

When (in my opinion) Not to Use Drupal

By Sebastian Gonzalez – Drupal Developer at Santex

I would like to clarify first off that I love to work with Drupal. I’ve been working with the Drupal platform for about 10 years now, and through all those years of getting frustrated over the same things, I realized something. I noticed that when certain clients or businesses had a previous project in Drupal that was successful, they would want to handle any future projects in the same way, when in reality Drupal may not have been the best tool to use.

In all these years of experience, I came across various projects and had a lot of different experiences – some very rewarding and others not so great. In some of these last projects that I didn’t think were so great, I noticed that something kept repeating. Drupal was being used for any kind of project on the simple premise that “it can do everything.”

If a client needs just any sort of app, we as developers usually say that Drupal is the solution. But what we should is is that Drupal could be the solution. Changing the message from “Drupal can do that” to “Drupal should be able to do that” is fundamental to starting any project off on the right foot.

Drupal is a CMS (Content Management System) that was intended to be a content administrator. Every page in the world has content, and when we talk about ‘content,’ we automatically think that it should be able to be handled administratively. This leads one to automatically think of a CMS like Drupal, WordPress, or Joomla. For me, the important question is what you want to do with the content. Where is this going and what is it going to be used for?

A lot of people view Drupal as a CWMS (Content Workflow Management System), and I agree with this vision. In my opinion, it makes sense to use Drupal when a business’s domain entails a lot of different types of content with multiple users who have different levels of permission. All of these users can alter the state of the content, making it fluctuate through different phases of the workflow where there aren’t annotations, reports, or emails involved.

The reality is that the vast majority of websites built using Drupal should not have used Drupal. This is not because Drupal can’t do the job, but rather because it’s a waste of all its functionalities that end up not getting used. A clear case of this is with classic brochure websites or institutional sites where the content is static and hardly changes over time. There isn’t much interaction between users beyond basic contact forms or a comments section.

Our world is currently dominated by mobile devices. Drupal was able to enter into the competition with its latest version 8, which came out in November 2016. Using and integrating components with the popular framework Symfony provides a robust back-end to facilitate API development. Drupal is jumping onto this trend with something called Headless – an architecture that uses Drupal as the back-end paired with a framework to present the data, which could be AngularJS, React.js, or any other framework.

In summary, I believe Drupal should not be used for:

  • Simple brochure websites
  • Single-purpose apps (like a chat application)
  • Gaming apps

I think Drupal should be used for:

  • News websites with multiple users
  • Multi-user publishing apps
  • Any app or website that includes workflows among people with different roles/permissions
  • A mobile version for Drupal

To conclude, here are 4 more pieces of advice:

  • Choosing one tool or another has to do with understanding the business’s control over the application or website. The more you know about the project, the greater the decision power in choosing which platform to use to meet those needs.
  • Use Drupal from the start and don’t try to switch and start using it for something else when things are not properly in place.
  • Stop saying “Drupal is the solution” and starting saying “Drupal could be the solution!”
  • Always explore alternatives because new technologies are coming out everyday.

Those are my two cents.

 

About the Author – Sebastian Gonzalez is an experienced Drupal Developer at Santex,  passionate about his work.  Sebastian is a strategic team player always willing to contribute and to solve problems.

One day of Singularity University at The Tech Pub

Blog1

This month at Santex, we had the pleasure of hosting Peter Wicher, Director of Strategic Relations at Singularity University. Over his extensive career, Peter has held executive positions in Silicon Valley in the industries of consumer electronics, semiconductors, education, and integrated systems.

We asked our Director of Operations, Eduardo Coll, to tell us a bit about the experience.

SANTEX: Tell us a bit about what Singularity University is and what it stands for.

Eduardo Coll: We had the pleasure of having Peter Wicher from Singularity University (SU) visit our Tech Pub. SU is a university created and founded by Peter Diamandis and has sponsorship from Google, NASA, and Autodesk, among other large companies.

Its vision is to create technology solutions that can make a positive impact on a billion people. There are 7 billion people in the world, and SU is trying to impact 1 billion. The university has unique programs for both individuals and organizations. They also have an incubator where they work on projects across verticals, which are selected because they aim to resolve some of the great problems facing humanity today – like renewable energy and access to drinking water. One of the concepts that they promote in SU, which Peter Wicher explained to us during his visit, is the concept of “exponentiality” – exponential technology and exponential growth.

SANTEX: Elaborate more on this concept. Where does this exponential growth in technology go?

EC: For humans by nature, it’s easier to understand linear growth. We grow older lineally; we don’t pass from 2 to 50 years old without turning 3, 4, etc. We physically grow in the same way, as we gain weight in successive numbers, and therefore we tend to forget that there can also be exponential growth in certain things. SU strives to leave its students with the ideology that exponential growth can be applied to our daily lives and that we don’t have to act within a linear mindset. This enables people to more rapidly achieve their visions, and helps the university reach its goal of impacting 1 billion people.

The motto at SU is “don’t make something better by 10%, make it 10x better!” When you think about changing or creating something, you don’t have to make something new that’s 10% better than what already exists. You should strive to make it 10 times better! When you do this, your business or your technology or idea will grow exponentially. Some familiar examples that they point out are: Uber generated a revolution in the transportation industry using technology that was already over 10 years old – cell phones, GPS, web services. They simply made it into an app and the number of trips, drivers, and passengers increased exponentially. They created an exponentially better transportation system.

SU also mentions Airbnb, who also revolutionized the hospitality system with the idea of renting homes and individual rooms for a lesser cost than staying in a hotel or vacation house. These technologies and systems are disruptive, and obviously have their flaws. They have problems that occasionally  need to be fixed that need to be observed in their entirety, but we’ll save that for another article.

SANTEX: How do some of concepts learned during SU’s visit pertain to Santex currently?

EC: Peter brought us some lessons that really dazzled us, lessons that we should apply to our lives daily both as an organization and individually. With existing technology and new technologies to come, the objectives that SU presented to us will be made simple.

At Santex, we are beginning to understand and work with the concept of exponential growth and the use of technology to solve some of humanity’s biggest problems. As a company, we want to support our clients with the knowledge needed to help them grow, which in turn will help us grow as well. We’ve set the goals of improving 10x more for every new project that we take on, and striving to solve problems that help not only our clients, but us as an organization and the community we’re involved in.

About Singularity University (SU)

SU is an academic institution in Silicon Valley whose focus is to bring together, educate, and inspire leaders about the exponential power of technology to solve some of the greatest challenges facing mankind.

QA, A Misunderstood Role

By Gabriela Chaves – QA Analyst at Santex

Why it is important to fully understand the role and it’s benefits

keyboard-886462_640

If you have been close to the software development process, chances are that you have experienced working on agile projects where it is common to conduct a small waterfall model in which the QA runs tests on late stages of development or perhaps there’s no QA assigned at all. In my experience, I find that this reveals only a slight notion of what a QA does and the impact his or her work has on an agile project. I believe it’s beneficial to share deeper insight on the responsibilities of this position.

The QA applies an analytical mindset throughout the complete process with this concept in mind:

“Are we building the right product, and, if so, are we building it correctly?”

A person in this role is someone who constantly questions all parts of the development process to ensure the team is producing the desired output. Kenny Cruden indicates this in his article “The QA Role – What Is It Really?” It is also referenced in international quality norms and standards such as ISO 9000 and CMMI dev with the name “Verification and Validation”.

Adding detail to the already known activities, a QA also thoroughly analyzes the product to be developed, and from sprint zero starts suggesting improvements and changes, polishing unclear aspects, detecting possible discrepancies and bugs, and bringing attention to items that may have been overlooked, with the aim of avoiding issues before they come up. Working side by side with Business Analysts and Developers, a QA and his or her team will not only develop an usable product, but they will also deliver one that suits the client’s needs. By constantly keeping in mind the business and the user perspectives, the QA helps build a better, stronger, and more reliable product, resulting in a satisfied customer and a greater appreciation for the company’s work.

There’s an internal benefit as well as Stephanie Dedhar points out in her article “Six irresistible benefits of real quality assurance.”

‘A focus on QA helps to develop a culture of continuous improvement. Colleagues will help each other develop, challenging things and preventing complacency setting in and leading to carelessness. In my experience, high standards are infectious – if one or two members of the team set the right example and pick up even the littlest things, these good habits will spread and you’ll develop a true QA culture.’

From all of this we can infer that the work performed by quality control specialists has a bigger impact than assumed by the people outside the project, providing an increase in quality and helping make the client happy with the end results. It can also be noted that starting the work early as previously described can result in increased client satisfaction and a reduction of rework, in turn reducing the total costs of the project.

About the Author – Gabriela Chaves is an experienced QA Analyst at Santex,  passionate about her work. Great analytical skills and quick learner.

Sources

Kenny Cruden – https://www.thoughtworks.com/insights/blog/qa-role-what-it-really

Stephanie Dedhar – https://stephaniededhar.wordpress.com/2012/01/24/six-benefits-of-real-quality-assurance/

5 WWDC ’16 Announcements Every Software Development Company Needs to Know

By Coleman Miller – iOS Developer at Santex

wwdc16

Apple made a lot of announcements last month in its annual World Wide Developer Conference, and introduced the latest versions of its operating systems and developer tools. Here is a breakdown of the most important announcements that will affect software development companies moving forward.

1. SiriKit

In my opinion, this is the most sought-after functionality developers and clients alike have requested over the years. Well, its finally here. Apple is providing a public API so third parties can develop iOS extensions that trigger in response to Siri. The only drawback is that it is limited to the following categories:

  • Audio or video calling
  • Messaging
  • Payments
  • Searching photos
  • Workouts
  • Ride booking

In addition to these new features, its worth mentioning that Siri already supports automotive control features with CarPlay, and HomeKit has allowed allowed Home Automation with Siri since iOS 8. This new API is going to help usher in a wave of innovation and new categories of mobile apps we haven’t seen before. It will also greatly improve the UX of existing apps like Uber and WhatsApp.

2. Swift 3

Although this should be #1 on this list, I believe Swift will bring more changes to software industry in the long term, but short term, Swift 3.0 is a huge improvement from 2.3. One of the biggest breaking changes is Apple adding “Swift Overlays” to its frameworks (some of which were originally written in Objective-C in the 90s) to make Swift a first-class citizen for iOS development. Another breaking change that will affect every single iOS app (with any Swift code), is the move by Apple to forgo classes in favor of structs and value types in its Foundation framework. This is more than a simple API change, it’s in fact, a huge paradigm change for current Apple Developers and programmers coming from other languages like Java, C#, and JavaScript. C developers should feel at home though. Unlike last year, Apple is letting developers chose between Swift 3.0 and Swift 2.3 for publishing apps to the App Store, so developers can take their time migrating to the new version of Swift.

3. Home App

When HomeKit was announced in iOS 8, it took a while for companies to make their existing IoT products HomeKit-compatible. Fast forward 2 years, and now HomeKit is a first-class citizen of iOS, even shipping a beautiful `Home.app` on your home screen. HomeKit’s goal is the unification of IoT and Home Automation products by adopting an Apple-defined protocol so they can easily talk to each other. This allows you to control the lights in your house via Siri, and setup home automation rules (Apple calls them “Scenes”) similar to what IFTTT does with apps. While Apple has accomplished this goal protocol-wise (by providing both HTTP and Bluetooth variations of its HomeKit Accessory Protocol to encompass all manner of devices), besides the Siri integration, Apple provided no user interface for HomeKit, and on the app side, that experience was fragmented. With the new Home app, centralized home automation is easier than ever, and you won’t need to download the specific third-party apps for each HomeKit accessory you purchase. This should boost HomeKit’s popularity and demand with hardware developers.

4. WatchOS GPU-accelerated Games

WatchOS is in a special category of iOS development due to the lack of native APIs like OpenGL and UIKit. While most attribute the App Store’s success to the proliferation of mobile games, that innovation and boom would have not been possible had the iPhone only allowed Web apps like Steve Jobs originally planned. Due to the issue of battery life, the Apple Watch provides a very limited API for native apps, in fact, its more limited then making an average website. One way Apple wants to lure developers to its WatchOS platform is by allowing them to make OpenGL accelerated 2D and 3D games with its SpriteKit and SceneKit frameworks. Since this is what many developers have asked for since day one, it will promote a boom of WatchOS games, like we see on the iOS and tvOS platforms. One drawback is the fact that those platforms can use OpenGL and natively port their code from Android, to iOS. WatchOS game developers will have to rewrite their rendering code for Apple’s platform.

5. Message and Map Extensions

With the introduction of iOS extensions in iOS 8, Apple has allowed third party apps to embed a part of their app in Apple’s stock apps (e.g. Contacts, Photos) and other third party apps. Now in iOS 10, developer’s can write extensions for the Message and Map stock apps. This will allow users to use apps like Uber and Yelp in the stock `Maps.app` without having to switch between contexts. The Message extensions allow all manner of custom content in the stock iOS messaging app, again, allowing for a new category of mobile apps.

About the AuthorColeman Miller is an experienced iOS Developer at Santex,  passionate about his work.  Coleman is continuously learning and training to investigate new technologies.

What Thread, Main Thread? Part II

By Martín Zangl – Android Developer at Santex

mobile-phones-1

If we are to understand some basic, common behaviors for approaching a simple solution using threads, we know that at some point we have to manage communication and execution order. For that, Android provides us with a bunch of concurrency and communication frameworks that are designed, implemented, and integrated in accordance with many patterns that you can find in POSA books.

Android provides differents tools according to concurrency patterns:

We can resolve many problems with one or more of the following:

  • Using handlers and other threads
  • Asynctasks
  • Loaders
  • IntentServices

Custom Handlers and Threads

As previously stated, there is only one Looper per Thread, but we can also have different handlers post messages and process them.

For example, we could define two threads with two handlers to send messages to each other.

threads1.png

For one instance, what if one of that threads is the Main Thread, we could send update messages to UI widgets and notify something happens in the other thread. Remember that if we are just using a simple pattern like observer pattern and notifying every change directly to the UI won’t work because we are trying to change the state of view object from a thread other than the main thread. In that case we could post the result or intermediate results on the handler registered to the main thread. In other words, we have an Activity, we declare a new Handler, that handler would be associated to the Main Thread – that is, the main looper – so every time we send a message from another thread, the handler will post the message in the message queue, then the looper will process that message sending it to the registered handler. Then we can update some UI widgets.

This is a pretty clean solution, but it becomes very difficult to handle the UI widgets’ lifecycle. That is to say a configuration change happens or the user changes the context often.

The worst scenario is when a configuration change happens, because in that case a new instance of the activity will be created. It would be even worse if we had references for any particular view on those messages; in that case the reference cannot be garbage collected and we’d just be leaking memory.

More in detail, every time that a configuration change happens two new messages are posted to the looper queue, one is CONFIGURATION_CHANGE and the other is RELAUNCH_ACTIVITY and this is what happens after that message is processed:

  1. calls onSaveInstanceState(), onPause(), onDestroy() on the old activity instance.
  2. create a new activity instance.
  3. calls onCreate() and onResume() on that new activity instance.

In the case that we send messages from other threads to the main thread, we have be careful. We cannot predict in which activity instance we are posting those messages.

We could do some speculation and think if any message posted before the orientation change would be handled before onPause() the leaving activity, and if any message posted a after the orientation change will be handled after onResume() he incoming activity.

 What can we do?

Fix the architecture instead of messing it up with handler.post().

Do not hold view or context references.

Remove all messages or callbacks in the activity onPause()

And the last one if you want to get fired use hanlder.postAtFrontQueue() to make sure a message posted before onPause() will be handled before onPause().

Next post we’ll talk about Asynctask, IntentService and Loaders.

About the Author – Martín Zangl is an experienced Android Developer at Santex,  passionate about his work.  Martín is continuously learning and training to investigate new technologies.

Source:
https://corner.squareup.com/2013/12/android-main-thread-2.html
https://www.youtube.com/watch?v=S1Y1Zt3lfeQ&list=PLZ9NgFYEMxp4KSJPUyaQCj7x--NQ6kvcX&index=32

 

What Thread, Main Thread? Part I

By Martín Zangl – Android Developer at Santex

mobile-learning

Public Static Void Main

As we know, every single Java app starts with call to method public static void main(). This is true for Java desktop, JEE servlets, and Android applications.

When Android boots, it uses a simple process called ZygoteInit. Zygote (Wikipedia) is a cell that can divide asexually by mitosis to produce identical offspring. This is a VM Dalvik process that loads the most common classes of the Android SDK on a thread, and then waits. When starting a new Android application, the Android system forks the ZygoteInit process. The thread in the child fork stops waiting and calls ActivityThread.main()

Here is what it’s essentially doing:

public class ActivityThread {

public static void main(String... args) {

Looper.prepare();

Looper.setMainLooper(Looper.myLooper());

Looper.loop();
}
}

Looper? What is a Looper?

Here we can find a particular concurrency pattern called Thread-Specific Storage. This pattern allows multiple threads to use one “logical global” access point to retrieve an object that is local to a thread, without incurring locking overhead on each object access.

articulo

When a Android application starts, it creates a Looper object. A Looper object contains a static ThreadLocal object, a Message Queue, and the Thread reference that created it. In other words, a Looper implements a Thread-specific event loop. Using a Looper is a good way to process messages serially on one Thread.

Looper.prepare(); This operation associates the looper with the current thread and storage it in a static ThreadLocal.
Looper.loops(); will process each message in the queue, and block when the queue is empty.

As previously said, each looper is associated with one thread. To retrieve the Looper associated to the current thread you can use the method Looper.myLooper().

An example of using a Looper with a Thread:

class HandlerThread extends Thread {
Looper looper;
public void run() {
Looper.prepare();
looper = Looper.myLooper();
Looper.loop();
}
}

Handlers is the natural companion to a looper. Looper has a Message queue and Handlers put messages or runnable objects in place and process each of them, i.e. it allows them to send messages to a looper message queue from any thread and handle messages dequeued on the thread associated to that looper.

You can associate many handlers to one looper. The looper delivers the message to one specific handler.

A default Handler constructor associates it with current the thread and its looper. We could define the other Looper if we want in order to post messages to the Message queue of whatever Looper we want.

The looper instanced in the void main method is called Main Looper, part of the Main Thread. This particular thread is in charge of dispatching events to the UI widgets that include the drawing events. All components (other Activities, Services, Broadcast Receivers and Content Providers) that run in the same process are instanced in the Main Thread.

When an application performs intensive work in response to user interactions, this single thread model can yield poor performance. If everything is happening in the Main Thread it will block the whole UI, so no events can be dispatched, including drawing events. That is when a ANR (Application Not Responding) dialog appears. In that case, we just put all the long background operations in another thread, but other problems arise in paradise – only the main thread can process UI widgets. So, we need to somehow handle communication between threads.

Next post we’ll talk about:
Using custom handlers and other threads
Asynctasks
Loaders
IntentServices

About the Author  – Martín Zangl is an experienced Android Developer at Santex,  passionate about his work.  Martín is continuously learning and training to investigate new technologies.

Source:
https://corner.squareup.com/2013/10/android-main-thread-1.html
http://developer.android.com/reference/android/os/Looper.html
http://developer.android.com/guide/components/processes-and-threads.html

7 tips for new Project Managers

IMG_2912

By Johan Tabori – Project Manager at Santex

The project management role has evolved very rapidly over the last two decades. The traditional view of “boss” has morphed into a combination of “facilitator” and “coordinator” which fits better in agile organizations. The following tips may help you to improve your project management skills in today’s increasingly changing business environments:

1. Ensure healthy and friendly work environments.
Fear is the worst incentive to work, therefore, make sure the team work environment is as friendly as it can be, your teammates will trust you and you will be able to delegate responsibilities more adequately. Same works for the client, team dynamics can be affected by how good a relationship with the client is, so don’t be afraid to demand collaboration and mutual respect.

2. Know your team and client.
As a project manager, you need to be a little bit of a psychologist. As you move forward in the project, it’s very important to understand both your team’s and client’s mindsets. This will become very helpful when bringing up sensitive issues or when you need to resolve conflicts.

3. Quickly respond to communications.
Unless you are in a meeting or have an emergency, don’t wait too long to respond an email or call. If you’re not sure about the topic in discussion, don’t be afraid to ask for clarifications. If it requires further investigation, let the sender know and promise you will looking into it and get back to him/her as soon as possible.

4. Review project status with your client periodically.
Weekly follow up meetings is the best way to keep your client and/or stakeholders informed. Make sure you cover key aspects of the project such as current status, scope, milestones, communications and team updates.

5. Involve your team as much as possible in key decisions regarding the project.
In most cases, your team have more technical skills than you do, so instead of imposing any particular technology, architecture or framework, make sure these are agreed within the team.

6. Take the opportunity to learn.
Self centered project managers fail miserably in accomplishing long term goals . Acknowledge your weaknesses and information gaps and learn from every team member and client.

7.  Demonstrate your value as a service provider before asking for more business.
Clients hate when they are presented with prospective new businesses at the beginning of the contract. They want to see you “in action” before they can start thinking about it. Once you have proved you deliver value to their organization, they will come to you and discuss future projects.

 About the Author
Johan Tabori – Johan’s education as an informatics engineer prepared him well to become the project manager that he is today. A natural multi-tasker, he has been leading IT project teams in a variety of vertical markets and applications for more than 10 years.

Extreme programming… once again

By Jose Torres – iOS Software Engineer at Santex

images

Vague or constantly-changing requirements are a fact of life. Instead of ignoring them, we should adapt our processes to reality. Extreme Programming (XP) principles exist to help us safely drive the work of building software. The web is full of information on XP, which can be synthesized as:

> Lightweight, evolving, flexible knowledge to develop software.

The concept of XP comes from the 90s. It bears repeating though, because, unfortunately, many organizations have lost the point. Perhaps they apply technical principles and fail in their flaccid adaptation. Maybe they employ agile processes but little technical practices. Can these discrepancies be balanced? How can we fight back?

Move to an extreme state and embrace its principles. Some organizations resist this shift. One of the best ways to adapt to this change is by running a pilot on a small, internal project.

XP principles state that at least two developers must work in a single workstation. To extend this concept, add one more step after the development sprint organization and consider having the team determine the number of developers who will work together for each user story. On the most critical user stories, place the whole team at a single workstation to discuss and then write production code.

XP principles also dictate a short release cycle for the product. To take this concept further, set up a specific time period during the day (i.e., every three hours) to continually release the product. You could also consider a full integration, if possible. This will help relieve the problems of production integration later, as integration is always happening. As David Farley states “reduce cycle time and the rest falls out.”

Keep in mind that having an active local community can help you to go further. In London, for example, there are multiple extreme programming initiatives like XProlo, eXtreme Tuesday Club, XPDay dedicated to XP practices, where people can join and share knowledge. We should continue creating initiatives and networking to create communities and evolve together.

There are many ways of actively moving forward on integrating extreme principles to software development. As main actors, we are responsible for tracking the efforts of our organizations as they assimilate real XP practices to the next level.

About the Author
Jose is an innovative Software Engineer who specializes in developing iOS applications for both iPhone and iPad. Skilled in creating business applications as well as games, Jose enjoys mentoring colleagues and fellow developers.

How Agile methodologies mitigate cognitive biases that lead projects to failure

By Walter Abrigo, Managing Director at Santex

I want to emphasize in this article how the existence of two cognitive biases (which are almost always present in our daily lives) position agile methodology practices  as one of the most adaptable frameworks for project monitoring and management in general. This is especially true when the context of the given project development is complex, has changing requirements that are poorly defined, and where innovation, competitiveness, flexibility, and productivity all combined are critical to achieving the desired results.  

Cognitive biases

  1. The emotional aspect of our decisions and choices.

  2. The fallacy of planning.

By reviewing each of these biases, we can see how people’s behavior fits better and more consistently with the structure of Agile methodologies.

Our decisions and choices are emotional

The following cases demonstrate how in our everyday decision-making we often forget the Base Rates (or the true distribution of events). Additionally, we strive to make sense of representative stereotypes, we seek causes and explanations, and we have a natural aversion to losing whenever there is something at risk.

First Case: Forgetting the Base Rates (the true distribution of events)

Tom is extremely intelligent, although he lacks true creativity. He needs order and clarity, and prefers systematic organization. He has a strong competitive drive and seems to have little interest and sympathy for others. He does not enjoy dealing with other people. Although he’s self-centered, he has deep moral awareness.

Let’s order the following nine areas of expertise according to the probability that Tom would be a student in any of these fields. We’ll use 1 for the most likely and 9 for the least likely.

  • Business Administration

  • IT

  • Engineering

  • Humanities and Education

  • Law

  • Medicine

  • Physics and Biology

  • Social Sciences and social work

Most will agree that Tom fits well with the stereotypes of smaller groups of students, like IT and engineers, but would fit poorly into larger groups, like humanities and education, social sciences and social work. This is an example of how we substitute the probabilities of the Base Rates for representative stereotypes.  

Second Case: Prejudices based on stereotypes

Linda is thirty-one years old. She’s single, outspoken, and very bright. She majored in Philosophy and when she was a student, she was very concerned about the issues of discrimination and social injustice. She participated in several anti-nuclear protests. Given this information, which of the following scenarios fits best with Linda’s personality?

  1. Linda is a bank teller.

  2. Linda is a bank teller and activist for the feminism movement.

Most will agree that Linda is most suited to the role of “bank teller and feminist.” The stereotypical teller may not be a feminist, so including this detail adds more emphasis to the description. Nonetheless, both feminist tellers and regular tellers share the common fact that they coexist in the world of ‘tellers.’

P(teller)=P(feminist teller) + P(teller not feminist).

Third Case: Seeking causes

Take the gender of six children born one after the other in a hospital. The sequence of boys and girls is random. Each event (birth) is independent of the other, and the number of boys and girls born in the hospital in the last hour has no effect on the gender of the next child. Consider now three possible sequences (M = male, F = female):

  1. MMMFFF

  2. FFFFFF

  3. MFMMFM

Are these sequences equally probable? The intuitive answer is, “Of course not!” but that is false. Because each event is independent and the results M and F are both (approximately) equally likely, all possible sequences for the six births are as likely as any other. Now that we know that this conclusion is true, it seems counterintuitive because only the third sequence appears to be completely random. Our minds are built with associative machinery that continuously seeks causal relationships, and this tendency leads to serious error in our evaluation of sequences that are truly random.

We are hunters of patterns, believers in a coherent world in which regularities (like a sequence of six girls) are not accidentally produced, but rather the effect of a particular cause or someone’s intention.

Fourth Case:  We are willing to risk more when it comes to losses than gains.

Situation 1: Imagine a group of people where each one has $3,000 and you give them a choice between:

  1. Receiving another $1,000, or

  2. Flipping a coin and playing the $1,000 for double or nothing: if they win they’ll receive an additional $2,000, but if they lose they get nothing.

What would you choose?

Situation 2: Imagine a group of people where each one has $5,000 and you give them a choice between:

  1. Giving up $1,000, or

  2. Flipping a coin to play $1,000 for double or nothing:  If they lose, they give up $2,000, but if they win they don’t lose any money.

What would you choose?

Most of us in Situation 1 prefer option 1 and most of us in Situation 2 prefer option 2. The interesting thing here is that the odds of the four options are identical, but differ considerably in our minds. We are more willing to take a risk when it comes to LOSSES and are more reluctant to take a risk when it comes to benefits.

The fallacy of planning

The fallacy of planning in one manifestation of an omnipresent optimistic bias. Almost all humans see the world as less harmful than it really is, our skills better than what they really are, and our goals easier to achieve than they really are. We also tend to exaggerate our ability to predict the future, which exudes optimistic overconfidence.

When we complete a successful project, we assume that it was due to our accurate and detailed planning of controlled variables. We forget the random variables that impacted us positively. We assume the cause of success was within the plan, and we are the performers.  

When we finished a project and it was unsuccessful, we assume that this was due to the presence of external uncontrollable variables, not foreseen from the beginning which affected us negatively. The cause of failure is out of our hands, and we are not the performers.   

Agile methodologies mitigate these biases

Having raised the existence of these two cognitive biases (the emotional side of our decision-making and the fallacy in our planning), we see two aspects of Agile methodologies that make them in the most effective way to mitigate the biases: valuing people and response to change.

By realizing that our decisions are more emotional than they are rational, we place more value on individuals and their interactions than we do tools and processes. This allows us to communicate more empathetically and understand the emotion behind our choices.

Regarding the fallacy of planning, by putting more value on response to change, rather than following a plan, we can better detect the random variables that may arise and impact the results.

In this way, we can realize the importance and value that Agile methodologies have in reducing the noise and deviations that may occur during the development of a project.

Sources

KAHNEMAN, D. (2011) Thinking, Fast and Slow. Debate Editorial.

About the Author Walter Abrigo is a Managing Director at Santex. In addition to his large academic career, he possess market expertise in several organizational processes such as management control, change and strategy, recruiting and staffing as well as performance and engagement.

You can read the spanish version of this article published in “Pulso Social”.