<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kimaru Thagana</title>
    <description>The latest articles on DEV Community by Kimaru Thagana (@kimaruthagna).</description>
    <link>https://dev.to/kimaruthagna</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F575898%2F795075d0-7d9c-4054-92e7-733c359242aa.jpeg</url>
      <title>DEV Community: Kimaru Thagana</title>
      <link>https://dev.to/kimaruthagna</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kimaruthagna"/>
    <language>en</language>
    <item>
      <title>Kaplan Meier Estimator in Python</title>
      <dc:creator>Kimaru Thagana</dc:creator>
      <pubDate>Wed, 12 Oct 2022 18:47:38 +0000</pubDate>
      <link>https://dev.to/kimaruthagna/kaplan-meier-estimator-in-python-k64</link>
      <guid>https://dev.to/kimaruthagna/kaplan-meier-estimator-in-python-k64</guid>
      <description>&lt;p&gt;In the fast paced world of business, decision makers are usually interested in interpreting customer behavior in order to understand them better. With a better understanding, the business can then deploy marketing or operational actions that either prevent the customer from leaving (&lt;strong&gt;churn&lt;/strong&gt;) or keeping the customer happy such that they are more likely to stay(&lt;strong&gt;retention&lt;/strong&gt;)&lt;/p&gt;

&lt;p&gt;In either case, the business needs to find the optimal point at which the customer is most likely to leave and then, make their move. If they make their move too early, they waste resources and if they are too late, they lose the customer. Is there a scientific/repeatable way to know this &lt;strong&gt;“golden point”&lt;/strong&gt;  in time? The time it takes for the event to happen with a certain probability? Apparently, researchers in the field of medicine have had a go at this and came up with an estimator. This value is generally used to interpret survival of a subject from a certain &lt;strong&gt;“event”&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Generally, this estimator falls into the broad category of &lt;em&gt;survival curves&lt;/em&gt;(due to the general shape of the result on a line graph) ; the method is referred to as the Kaplan Meier estimator. Read more about it &lt;a href="https://www.karger.com/Article/Fulltext/324758" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial, we will consider a scenario of an IoT company that sells a remote sensing device.The sample data can be found in this &lt;a href="https://github.com/KimaruThagna/CohortAnalysis/tree/master" rel="noopener noreferrer"&gt;repository&lt;/a&gt; along with the code used to generate the sample data. The device usually sends regular updates on a daily basis and the update is one of two types. &lt;strong&gt;ROUTINE CHECK&lt;/strong&gt; and &lt;strong&gt;SYSTEM ERROR&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;As a business, we will be interested in the error message as our event and the time between the date of purchase and the date of occurrence of the event as the time to event in days. The graph will be interpreted as &lt;strong&gt;“what is the probability of survival by the population(user devices) from the event of a system error at day X”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In performing survival analysis, the first concept that needs to be made available is the time to event. The time in whatever frame(days, weeks, minutes, years) from beginning of observation to when the event occurs. In our case, the beginning of the observation is the date of sale of the device. The end is when the first error event is sent per user. &lt;/p&gt;

&lt;p&gt;In the csv linked &lt;a href="https://github.com/KimaruThagna/CohortAnalysis/tree/master/data" rel="noopener noreferrer"&gt;here&lt;/a&gt;, this computation has already been done and the &lt;strong&gt;time_to_event&lt;/strong&gt; value has been computed in the &lt;strong&gt;days_to_event&lt;/strong&gt; column. With most datasets, you will be able to have a &lt;strong&gt;duration_to_event&lt;/strong&gt; column or derive it easily. However if the use case is similar to ours where we have two different datasets, consider this step in SQL. Can also be easily translated to Python. Follow &lt;a href="https://github.com/KimaruThagna/CohortAnalysis/blob/master/sql/duration_table.sql" rel="noopener noreferrer"&gt;this link&lt;/a&gt; for the SQL version.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;UserId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;RegistrationDate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;EventType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;EventDate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;days_to_event&lt;/span&gt;
&lt;span class="mi"&gt;85&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2021&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;03&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="k"&gt;SYSTEM&lt;/span&gt; &lt;span class="n"&gt;ERROR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2021&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;08&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;29&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;163&lt;/span&gt;
&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2021&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;05&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="k"&gt;SYSTEM&lt;/span&gt; &lt;span class="n"&gt;ERROR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2021&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;05&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;
&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2021&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;06&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="k"&gt;SYSTEM&lt;/span&gt; &lt;span class="n"&gt;ERROR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2021&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;07&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;49&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After you have your time to event data, you now get to apply the Kaplan meier estimator to the data. This will generate a different dataset that is commonly known as the &lt;strong&gt;survival table&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;The survival table is what is plotted and gives the survival curves that many know of. To apply the estimator, one needs a bit of an understanding of the math behind it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Kaplan%E2%80%93Meier_estimator" rel="noopener noreferrer"&gt;Image credits&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;T is the total observation time. i is a point in time between 0 and the maximum t. For example, if you are looking at events over 1 year, your t value would be 365. At time ti, di is the number of events that have happened as at time ti. In our case, this will be the number of users whose devices have reported their first error message. Ni is the number of subjects that have either survived the event or are still at risk of experiencing the event as at at time ti. In our scenario, this is the number of users whose devices have survived failure or are still at risk of failing as at time ti.&lt;/p&gt;

&lt;p&gt;We then subtract this ratio from 1 to get the ratio of survivors because the end goal is to determine who survived at a specific point in time.&lt;/p&gt;

&lt;p&gt;The PI symbol is a cumulative product symbol. This gives the cumulative survival probability of all the user devices at time t.&lt;/p&gt;

&lt;p&gt;All the above will be quite tricky to compute by hand. It would require deep knowledge of statistics which may not be the case to many. This is why there is the library lifelines which makes all this easier. All the above is reduced to 3-7 lines of code.&lt;/p&gt;

&lt;p&gt;To use the library, only two items are required. The &lt;strong&gt;time_to_event&lt;/strong&gt; column and the &lt;strong&gt;target/event&lt;/strong&gt; column. Since the target column varies from one use case to the other, a simple transformation step is required. Transform the column values to boolean where the target event is &lt;code&gt;TRUE(1)&lt;/code&gt;and the rest are &lt;code&gt;FALSE(0)&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;lifelines&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;KaplanMeierFitter&lt;/span&gt; 

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data/duration.csv&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;EventType&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SYSTEM ERROR&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;EventType&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;span class="n"&gt;time_to_event&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;days_to_event&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;EventType&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;kmf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;KaplanMeierFitter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;kmf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;time_to_event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event_observed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;kmf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;at_risk_counts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Kaplan-Meier Curve&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the code above, we are defining a new column Target and assigning to it the result of the transformation. Once done, all that is required is to fit and plot the &lt;strong&gt;Kaplan Meier&lt;/strong&gt; estimate. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zyvy34gzexg6t3txpgs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zyvy34gzexg6t3txpgs.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the example above, we can interpret the following&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At day 50, there is a 0.99 probability of devices surviving the SYSTEM ERROR EVENT&lt;/li&gt;
&lt;li&gt;The least probability of survival being 0.88 means the business can promise the devices will survive the SYSTEM ERROR event at day 350(roughly 1 year) with 88% confidence.&lt;/li&gt;
&lt;li&gt;At day 50, there is a 0.01 probability that devices do not survive the event and hence, report an error. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In conclusion, we have learnt about the Kaplan Meier estimator and how to employ it to answer vital business questions around survival of events. With such knowledge, so much more is possible. Some other applications of this technique include determining:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How many days until a customer cancels our subscription&lt;/li&gt;
&lt;li&gt;How many hours until our IoT device fails&lt;/li&gt;
&lt;li&gt;How many orders do customers make until they cancel their subscription&lt;/li&gt;
&lt;li&gt;How many years until our installed water pump fails&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Knowing about all the above with a good degree of accuracy allows a business to not only operate efficiently but to also stay ahead of competition by handling their customers or assets better. All using the power of data.&lt;/p&gt;

</description>
      <category>retentionanalytics</category>
      <category>sql</category>
      <category>python</category>
    </item>
    <item>
      <title>The Data Trinity</title>
      <dc:creator>Kimaru Thagana</dc:creator>
      <pubDate>Wed, 04 Aug 2021 11:47:05 +0000</pubDate>
      <link>https://dev.to/kimaruthagna/the-data-trinity-5gj3</link>
      <guid>https://dev.to/kimaruthagna/the-data-trinity-5gj3</guid>
      <description>&lt;p&gt;A trinity is a reference of three(3). Three items working in perfect harmony/orchestration, seemingly as a single unit, to achieve a defined goal. In the modern world of data engineering, this is a holy grail that many are in search of.&lt;br&gt;
In this case, we are considering the scope from source to business insight using data. The three most important components. These are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Extraction and loading tools&lt;/li&gt;
&lt;li&gt;Transform and storage tools&lt;/li&gt;
&lt;li&gt;Visualization and Intelligence tools&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We will be going through and discussing the options in each of the &lt;em&gt;trinity&lt;/em&gt; components. What to consider and what to weigh.&lt;/p&gt;
&lt;h2&gt;
  
  
  Extraction and Loading Tools
&lt;/h2&gt;

&lt;p&gt;This component of the trinity is mainly involved in taking data from source(ingestion) and "transporting" it to destination. A cool feature with most tools is scheduling ingestion. You can choose to ingest your data from source to destination daily, after x minutes or y hours. This allows you to focus on other more important tasks.&lt;/p&gt;

&lt;p&gt;Within the data engineering context, &lt;strong&gt;Extraction&lt;/strong&gt; refers to the process of obtaining raw data at source. The source can be any software artifact that holds or produces data. These include APIs, databases,software systems such as CRMs, transactional systems et al.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Loading&lt;/strong&gt; - Dumping data into a destination artifact. The data can be raw data, if one is using the ELT approach or processed data if one is using the traditional ETL approach. The most common destination artifact is a &lt;strong&gt;data warehouse&lt;/strong&gt;.  &lt;/p&gt;
&lt;h3&gt;
  
  
  Considerations
&lt;/h3&gt;

&lt;p&gt;When dealing with this component, the main considerations include data privacy, engineering resource management, costs and robustness of the tool used. Let us consider a practical example with real life tools.&lt;/p&gt;

&lt;p&gt;If your company is price sensitive, you might opt for a free open source tool such as &lt;a href="https://airbyte.io/"&gt;Airbyte&lt;/a&gt; but absorb the engineering costs of setup and maintenance. If your company wishes to focus their engineering resources on other tasks other than extraction and loading, they can use a managed service like &lt;a href="https://fivetran.com"&gt;Fivetran&lt;/a&gt; where they pay for the service. &lt;/p&gt;

&lt;p&gt;The trade offs are purely situation dependent. Maybe you want an open source free tool, maybe you want a fully managed service, maybe you are bootstrapping and do not have funds, maybe you are a big company and do not mind paying.&lt;/p&gt;

&lt;p&gt;Airbyte and Fivetran are some of the most common tools in this space within data engineering.&lt;/p&gt;
&lt;h2&gt;
  
  
  Transform and Storage Tools
&lt;/h2&gt;

&lt;p&gt;This component of the trinity is mainly involved in processing your data according to your business needs and also storing the data.&lt;br&gt;
The transform component is where business logic is domiciled. This is where you perform data transformations to generate business value from data. They could be as simple as filters and as complex as joins, rolling column computation, pivoting, etc. Most transformations will be done in SQL. This is because of its ability to perform data processing and also compatibility with the storage systems. Most of the storage systems will be designed to be SQL compatible and hence, SQL as the transformation language is the most common. A common tool in this space is Data Build Tool &lt;a href="https://www.getdbt.com/"&gt;DBT&lt;/a&gt; A powerful tool that supercharges SQL by introducing other programming paradigms such as jinja templating, source definitions, hooks, variables and sanity checks/tests among others. The alternative would be stored procedures and SQL scripts but you would be losing out on all the great features of DBT. &lt;br&gt;
I have had a go at it in my personal github which you can check over here. &lt;a href="https://github.com/KimaruThagna/DBT-Bon-Voyage"&gt;DBT Bon Voyage&lt;/a&gt;&lt;br&gt;
Fivetran also offers an SQL based transformation interface where one can run their SQL scripts.&lt;/p&gt;

&lt;p&gt;The storage component is simply where the data lives after extraction and loading. The most common artifact is a data warehouse or data lake depending on conceptual design. &lt;br&gt;
The most common services in this category are AWS &lt;a href="https://aws.amazon.com/redshift/"&gt;Redshift&lt;/a&gt;, Google cloud &lt;a href="https://cloud.google.com/bigquery"&gt;Big query&lt;/a&gt; and &lt;a href="https://www.snowflake.com/"&gt;Snowflake&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Visualization and Intelligence Tools
&lt;/h2&gt;

&lt;p&gt;This component of the trinity is mainly involved in synthesis and displaying of business value. This is where the business intelligence analyst, data analyst, data scientist and business executives operate. They use the extracted loaded and transformed data to answer business questions and produce actionable insights. The software artifacts in this level often have visualization, query and reporting tools.&lt;br&gt;
Common tools in this level are business intelligence software such as &lt;a href="https://looker.com/"&gt;Looker&lt;/a&gt;, PowerBi and Tableau among others. &lt;br&gt;
The best and most robust features in any of these tools are on a paid tier and hence, costs are definitely a consideration. Whether you would want it on your private server or on a public cloud that the vendor can setup for you, is also a choice depending on your data policy.&lt;/p&gt;
&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;By now you are aware of the data trinity in terms of tools. A well oiled machine that is commonly referred to as the modern data stack.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Airbyte/Fivetran --&amp;gt; Snowflake/Redshift/BigQuery [With DBT or custom SQL scripts running on top] --&amp;gt; Looker/PowerBI/Tableau
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A great company that offers  data consulting services through out the whole stack is &lt;a href="https://www.silvercreek.io/"&gt;SILVER CREEK INSIGHTS&lt;/a&gt; They have direct partnerships with Looker and Fivetran and hence, your entire data stack needs can and will be solved under the Silvercreek umbrella.&lt;br&gt;
If you would like to interact further, you can find my personal &lt;a href="https://kimaruthagna.github.io/"&gt;site&lt;/a&gt; or &lt;a href="https://www.linkedin.com/in/kimaru-thagana-4920b5181/"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dataengineering</category>
      <category>etl</category>
      <category>elt</category>
      <category>datapipelines</category>
    </item>
    <item>
      <title>Soft Skills in a Hard Skills Industry</title>
      <dc:creator>Kimaru Thagana</dc:creator>
      <pubDate>Thu, 04 Mar 2021 06:25:59 +0000</pubDate>
      <link>https://dev.to/kimaruthagna/soft-skills-in-a-hard-skills-industry-5ib</link>
      <guid>https://dev.to/kimaruthagna/soft-skills-in-a-hard-skills-industry-5ib</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;For most people, a large part of their life is spent in the workplace. Your work environment has a direct effect on the quality of life you lead.   And since most jobs will not be done in solitude, but will be carried out in teams, your success rests on working with other people to achieve your common goals as much as it does on the individual job you do. &lt;br&gt;
Should you lack the skills to navigate the work environment and the people you work with, your day to day becomes daunting, which leads to job dissatisfaction and possibly quitting outright.  These soft skills can be as important as your technical skills. &lt;/p&gt;

&lt;p&gt;Contrary to popular belief, soft skills can be learned and taught. Some may dismiss them as  personality traits, skills you either are born with or not. But these soft skills can be taught through structured and unstructured mentorship. &lt;br&gt;
A structured  approach involves planning and predefined goals. This is ideal where people endeavour to achieve results within a fixed time frame and are available for the planned activities.  Figuratively speaking, unstructured mentopships involve taking a friend's or colleague's hand and walking the journey together in learning a new skill.  Mentoring occurs for both people and occurs without a fixed timeframe. It could ideally go on forever. &lt;br&gt;
In this article, we will explore the soft skills that most affect tech and software engineering careers.  We’ll discuss how they impact our day to day lives, how to gain them, and lastly, how to practice and teach them to peers.   &lt;/p&gt;

&lt;h1&gt;
  
  
  What are soft skills?
&lt;/h1&gt;

&lt;p&gt;They can be best described as social, people and communication skills that are heavily intertwined with an individual's attitude, persona attributes and mindset.&lt;br&gt;&lt;br&gt;
These skills directly influence, whether positively or negatively, an individual's level of&lt;br&gt;&lt;br&gt;
emotional and social intelligence.&lt;br&gt;&lt;br&gt;
Soft skills are therefore paramount for any member living in a society for they will need to interact on an interpersonal level.&lt;br&gt;&lt;br&gt;
A superb grasp of soft skills means that you are emotionally and socially intelligent. In this regard, you are easy to work with and hence, desirable as a partner in a social setting or as an employee in a work setting. Depending on what you wish to go for.&lt;br&gt;&lt;br&gt;
In the workplace, especially in reference to Information Technology(IT), there are generally   seven(7) soft skills that have been singled out to be the most important. With these,&lt;br&gt;&lt;br&gt;
you are generally a highly desirable candidate for collaboration or work on any project.&lt;br&gt;&lt;br&gt;
These are:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Leadership skills - Qualities that make you capable of handling a leadership role and
responsibly managing work under no supervision. This shows a sense of autonomy and trustworthiness. This skill is ideal in gaining promotions to higher ranks at work.
&lt;/li&gt;
&lt;li&gt;Communication skills - Verbally and in writing. A vital cornerstone of interpersonal relations. Your teammates or managers need to understand what you are saying
in a clear and timely manner. Communication skills encompasses facets such as letter and email writing, public speaking and one on one conversations among others.
This skill is vital in improving your desirability at work since when mastered, people will gravitate towards you. You will be easy to collaborate with.
&lt;/li&gt;
&lt;li&gt;Teamwork and collaboration - The spirit of teamwork and collaboration is paramount in any society or group.
This skill encompasses items such as resource sharing, selflessness, empathy and tolerance. One should be able to consider things from their teammates perspective and get where they are coming from.
Great collaboration skills allow you to be a critical and indispensable member of any team.
You are easy to work with, you engage with other team members actively and therefore increase team morale and productivity.
&lt;/li&gt;
&lt;li&gt;Conflict resolution - This involves being a fair arbiter. In the event that a conflict or misunderstanding arises, using this skill,
you will be able to listen to both sides, de escalate the situation and propose a pragmatic solution that is just and leaves all the conflicting parties satisfied.  This ties into leadership and with this skill, you can easily rise into a leadership role.
&lt;/li&gt;
&lt;li&gt;Reliability and dependability - This calls upon your character. How true you are to your word. It is very critical to be reliable since it is impractical for someone to give you work and to keep following up if it is done.
Reliability signals autonomy which puts you on track towards a more senior role since your managers believe you can deliver on a larger scale.
&lt;/li&gt;
&lt;li&gt;Flexibility and adaptability - With the ever changing world of tech, the most adaptable becomes the most valuable.
Being very stiff and resisting change weighs you down and does the same to your work mates. They may find it very hard to work with you.
Flexibility involves being able to adapt to new situations and make the best out of them.
&lt;/li&gt;
&lt;li&gt;Critical Thinking - A vital skill in a tech related or engineering field. This is more of an umbrella skill that encompasses observation, analysis, inference and problem solving. With this skill, you simply get the job done.
Mastering this skill makes you very marketable since you can deliver products and services that people are willing to pay money for. You are able to identify pain points and address them with a practical and suitable solution hence solving the problem.
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Importance of Soft Skills
&lt;/h1&gt;

&lt;p&gt;The main importance is smooth interpersonal relations and peace of mind. From the above enumeration, it can be observed that all of them gravitate&lt;br&gt;&lt;br&gt;
towards making your life working with other people easier.&lt;br&gt;&lt;br&gt;
Soft skills also enrich you and make you more valuable as either a team member or an employee. The more valuable you are, the higher the price and the more favourable the terms you attract.   In the tech setting and work place, the main importance of these skills is to keep you in the job or position that your hard skills propelled you to attain or propel you to a higher position.   The skills can therefore not be ignored if one wishes to progress in their career.&lt;br&gt;&lt;br&gt;
As a personal testament, I was once a junior developer in an agricultural tech startup. I knew very little and was quite intimidated.&lt;br&gt;&lt;br&gt;
To offset this imbalance, I volunteered for every task, communicated any progress or blockers encountered, took correction and constructive criticism positively and ensured I was as reliable as can be. I was able to save my job due to these qualities that the management saw and decided to give me a chance to learn and catch up.  &lt;/p&gt;

&lt;h1&gt;
  
  
  Gaining Soft Skills
&lt;/h1&gt;

&lt;p&gt;As we have established what soft skills are and their importance, the next logical step is to learn how to attain them and improve on them as much as possible. &lt;br&gt;
Since these are people skills, they are best taught by other people, who have these skills, through mentorship. There are generally two forms of mentorship.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Structured Mentorship and Fellowships
&lt;/h2&gt;

&lt;p&gt;A formalized approach that involves structures, timetables, deadlines and expected outcomes within a certain time frame.  This mode of mentorship is ideal for campus students. Individuals who are in any institution of learning and are relatively young in their career or have not started at all.  The structured form capitalizes on the human resource capacity of seasoned professionals to teach, mentor and guide the relatively novice individuals. Some arrangements involve paid mentorships but most serve as structured mentorships for free for the mentees.&lt;br&gt;&lt;br&gt;
To sustain the program, partners and sponsors are involved. Some partners offer grants, some offer resources such as venues and some offer human capital in the form of mentors.&lt;br&gt;&lt;br&gt;
There is also a self sustaining model where the mentees of the first cohort can come back and&lt;br&gt;&lt;br&gt;
offer their time as program assistants or mentors in the next cohort. This is based on the assumption that after graduating as a mentee, you are equipped and fit enough to impart knowledge and wisdom to anyone in the subsequent cohort.&lt;br&gt;&lt;br&gt;
The pros include:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Structured approach- This creates order and a course to follow. With such parameters in place,
It is easy to achieve goals within the intended time frame.
&lt;/li&gt;
&lt;li&gt;Easier to follow up- With clear goals to be achieved, there is easier monitoring and evaluation of progress.
&lt;/li&gt;
&lt;li&gt;Can be easily replicated- Structures allow documentation of procedures. This makes it easy to replicate the success of a structured program in another setting.
The main con is that it is demanding and hence, may be taxing on individuals who may have prior commitments.  There is a lack of flexibility. The time bound requirements attached to each goal may sometimes create unforseen pressure on participants and hence, not giving their best.
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Unstructured Mentorships
&lt;/h2&gt;

&lt;p&gt;This form of mentorship, also referred to as the &lt;em&gt;buddy system&lt;/em&gt;,  is ideal on a long term basis between people who are in close proximity in terms of career or socially. This could be your friend or colleague. With unstructured mentorship, there is no predefined course or curriculum to follow. This then means that the participants get to decide the rules of engagement, what the end goal is and how it can be measured. Though deceivingly free and open, this requires a lot of discipline&lt;br&gt;&lt;br&gt;
 as an individual and as a unit. You are your own boss and own critique.&lt;br&gt;&lt;br&gt;
 It is best reserved for individuals with some greater level of experience in life or career  since they have built their discipline over time and can manage the mentorship activities themselves.&lt;br&gt;&lt;br&gt;
 The pros include freedom and flexibility to choose your own structure and what works best for you, no time bounds or restrictions hence can be done at a desired pace among others.&lt;br&gt;&lt;br&gt;
The main cons are tied to the fact that there is total freedom. With great power(freedom) comes great responsibility.  With no order or timetable to follow, a stellar level of discipline and personal responsibility is demanded of the participants for the exercise to bear fruits.&lt;br&gt;&lt;br&gt;
Everyday Practice&lt;br&gt;&lt;br&gt;
To be good at any skill, you have to be willing to put in the hours. Gaining soft skills is no exception.&lt;br&gt;&lt;br&gt;
It requires habitual changes that eventually lead to sharpening of soft skills.&lt;br&gt;&lt;br&gt;
A very strong requirement in this is the discipline to put in the work everyday.&lt;br&gt;&lt;br&gt;
Tips to sharpen your soft skills include  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Proactively work in team settings
&lt;/li&gt;
&lt;li&gt;Seek public speaking opportunities in your settings whether work or home. This builds your confidence in speaking to crowds.
&lt;/li&gt;
&lt;li&gt;Volunteer for leadership roles in your circles. eg team lead, master of ceremony etc
&lt;/li&gt;
&lt;li&gt;Offer help with applications and writing such as job applications and scholarship applications. &lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;To wrap it all up, it is evident that this is a vital, if not critical component in the professional life of a practitioner in the field of Computer Science or any engineering field in general. It introduces a much needed balance to a field commonly mistaken to be all about hard skills such as building and development.&lt;br&gt;&lt;br&gt;
This balance later enriches team interactions, mainly via collaboration and communication, which in the long run boosts productivity and output.&lt;br&gt;&lt;br&gt;
Soft skills will sometimes save you from a potential job loss, de-escalate conflicts, open doors in the workplace and improve your communication and presentation skills overall.&lt;br&gt;&lt;br&gt;
The onus is therefore upon us, members of the tech community to share the importance of these skills and how they can compliment the commonly valued hard skills. One of the most effective ways of sharing and giving back would be mentorship and accountability groups geared towards development of soft skills.  With all hands on deck, we can work towards changing the notion that soft skills are not that important in an engineering or tech job.&lt;br&gt;&lt;br&gt;
The fact is, the soft skills, sometimes if not most, will be the more important skill one would rather possess. &lt;br&gt;
The hard skills may get you the job, the soft skills will keep you there.&lt;/p&gt;

</description>
      <category>softskills</category>
    </item>
    <item>
      <title>Python for FaunaDB</title>
      <dc:creator>Kimaru Thagana</dc:creator>
      <pubDate>Mon, 08 Feb 2021 19:40:14 +0000</pubDate>
      <link>https://dev.to/kimaruthagna/python-for-faunadb-1ojn</link>
      <guid>https://dev.to/kimaruthagna/python-for-faunadb-1ojn</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Cloud native data APIs, serverless services and cloud native services in general are becoming a go to for companies who no longer wish to manage their own data and infrastructure layer. This use case is getting more common as startups shift their focus more towards their core business and customer satisfaction.   &lt;/p&gt;

&lt;p&gt;Cloud native services ride on the already successful and proven delivery model of the cloud compute services. They are reliable, scalable and readily available. Using these,startups quickly bypass infrastructural setups such as networks, server and operating system provisions. The saved time and resources is then channelled towards their core business, thus staying competitive.  &lt;/p&gt;

&lt;p&gt;In this guide, you will explore and learn about such a cloud native offering. A data API leveraging the cloud compute and serverless architecture to offer reliability, flexibility and cost savings.  The API also boasts its ability to handle different data models, from graph to document based data.  &lt;/p&gt;

&lt;h1&gt;
  
  
  FaunaDB
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://fauna.com"&gt;Fauna&lt;/a&gt; ,a cloud native data API, marketed for developers and designed for serverless applications. Some of the outstanding features include a native graphql layer, support for different data models(relational, document or graph) and ACID transactions which ensure consistency.  &lt;/p&gt;

&lt;p&gt;It follows a &lt;em&gt;freemium&lt;/em&gt; approach where one can subscribe to the free plan and later move up the tiers if need be. As a true developer centric offering, the service accommodates some popular programming languages by means of drivers.&lt;br&gt;&lt;br&gt;
There are several language drivers available such as Javascript, C#, Go and Python amongst others.    &lt;/p&gt;

&lt;p&gt;To get started, &lt;a href="https://dashboard.fauna.com/accounts/register?utm_source=DevTo&amp;amp;utm_medium=referral&amp;amp;utm_campaign=WritewithFauna_GettingStartedFaunaPython_KThagana"&gt;register&lt;/a&gt; and create a new database where you will receive a database key.    &lt;/p&gt;

&lt;p&gt;With the key, it is then possible to develop your app in your preferred language and use the available drivers to connect to your newly created cloud native database.  &lt;/p&gt;

&lt;p&gt;The interface, upon checking the box, can load some sample data to allow you to navigate the user interface and interact with CRUD components.    &lt;/p&gt;
&lt;h1&gt;
  
  
  Scenario
&lt;/h1&gt;

&lt;p&gt;To better understand Fauna and its use, we will create a sample app that serves the purpose from a sample scenario.  &lt;/p&gt;

&lt;p&gt;Consider the situation where you are an independent software and systems consultant advising a hospital. The client (the hospital) wishes to move its operations to the cloud. Among the requirements, the client wishes to have a data layer service that is flexible enough to accommodate different data schemas. Mainly, document, graph and relational due to their data science and mining operations that they wish to perform in future.&lt;br&gt;&lt;br&gt;
The client also wishes that the solution is Python friendly as this is the main language they intend to use.  &lt;/p&gt;

&lt;p&gt;Taking all these requirements into consideration, over and above their desire for a reliable and cost effective solution, you choose to suggest &lt;a href="https://fauna.com"&gt;FaunaDB&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;To demonstrate its use, you attach a sample application, written with Python drivers, to your proposal for the client's developer team to gain some insights.  &lt;/p&gt;
&lt;h1&gt;
  
  
  Sample App
&lt;/h1&gt;

&lt;p&gt;To demonstrate a hospital's operations, consider the schema below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight graphql"&gt;&lt;code&gt;&lt;span class="err"&gt;Doctor&lt;/span&gt;&lt;span class="w"&gt;  
  &lt;/span&gt;&lt;span class="err"&gt;last_name&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;first_name&lt;/span&gt;&lt;span class="w"&gt; 
  &lt;/span&gt;&lt;span class="err"&gt;license_number&lt;/span&gt;&lt;span class="w"&gt; 
  &lt;/span&gt;&lt;span class="err"&gt;specialization&lt;/span&gt;&lt;span class="w"&gt; 
  &lt;/span&gt;&lt;span class="err"&gt;staffID&lt;/span&gt;&lt;span class="w"&gt;  

&lt;/span&gt;&lt;span class="err"&gt;Diagnosis&lt;/span&gt;&lt;span class="w"&gt;  
  &lt;/span&gt;&lt;span class="err"&gt;doctor&lt;/span&gt;&lt;span class="w"&gt; 
  &lt;/span&gt;&lt;span class="err"&gt;notes&lt;/span&gt;&lt;span class="w"&gt; 
  &lt;/span&gt;&lt;span class="err"&gt;patient&lt;/span&gt;&lt;span class="w"&gt;  

&lt;/span&gt;&lt;span class="err"&gt;Patient&lt;/span&gt;&lt;span class="w"&gt;  
 &lt;/span&gt;&lt;span class="err"&gt;last_name&lt;/span&gt;&lt;span class="w"&gt; 
 &lt;/span&gt;&lt;span class="err"&gt;first_name&lt;/span&gt;&lt;span class="w"&gt; 
 &lt;/span&gt;&lt;span class="err"&gt;patientID&lt;/span&gt;&lt;span class="w"&gt; 
 &lt;/span&gt;&lt;span class="err"&gt;insurance_policy&lt;/span&gt;&lt;span class="w"&gt;  
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Python Driver
&lt;/h2&gt;

&lt;p&gt;To install the python driver, run the command &lt;code&gt;pip install faunadb&lt;/code&gt;  &lt;/p&gt;

&lt;p&gt;The source code for the driver can be found &lt;a href="https://github.com/fauna/faunadb-python"&gt;here&lt;/a&gt;    &lt;/p&gt;

&lt;p&gt;The codeblock below shows a starter script to get you going.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import os 
from faunadb 
import query as q
from faunadb.client import FaunaClient 

 db_client = FaunaClient(secret=os.environ.get("secret"))  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is always best practice to keep keys as environment variables. In this case, the &lt;code&gt;secret&lt;/code&gt; is the key to access your cloud based FaunaDB instance that you created on your dashboard.&lt;br&gt;&lt;br&gt;
With the above code, you are connected and can commence performing database operations such as CRUD.  &lt;/p&gt;
&lt;h3&gt;
  
  
  Create Collection
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;doctor_collection = db_client.query(q.create_collection({"name":"doctors"}))  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Create the remaining collections, &lt;em&gt;Diagnosis&lt;/em&gt; and &lt;em&gt;Patient&lt;/em&gt; using the above syntax  &lt;/p&gt;
&lt;h3&gt;
  
  
  Create Document
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;doctor_1 = db_client.query(    
 q.create(doctor_collection["ref"],   
  {"data":{"last_name": "Fauc",    
 "first_name":"John",   
 "license_number": "AGY5578199O",  
"specialization": "cardiologist",  
"staffID":"AW110"  
}})) 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Create document with a foreign key reference&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;diagnosis_1 = db_client.query(    
 q.create(diagnosis_collection["ref"],   
  {"data":{"doctor": q.ref(q.collection("doctors"), "181019942046968320"),    
 "patient":q.ref(q.collection("patients"), "181019942046968320"),   
 "notes": "The patient seems to exhibit symptoms of the common flu....",  
}})) 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the above syntax to create several more records in the available collections.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Retrieve Records
&lt;/h3&gt;

&lt;p&gt;Demonstrate  a &lt;strong&gt;retrieve&lt;/strong&gt; operation by getting a single doctor's document entered into the database by the create function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;single_doctor = db_client.query(  
 q.get(q.ref(q.collection("doctors"), "181019942046968320")))  
print(single_doctor)  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Note that the second parameter after the collection is the reference number for a particular document&lt;/em&gt;  &lt;/p&gt;

&lt;h3&gt;
  
  
  Update Record
&lt;/h3&gt;

&lt;p&gt;To demonstrate an update, assume that there is a slight error in the previously created &lt;code&gt;doctor&lt;/code&gt; record. &lt;br&gt;
Below is the update syntax&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;updated_doc = db_client.query(  
 q.update( q.ref(q.collection("doctors"), "181388642312002080"), { "data": { "specialiation": "Cardiology", "license_number": "AGY5578199O-001" } } ))  
print(updated_doc)  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Delete Records
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;record = db_client.query(  
 q.delete(q.ref(q.collection("doctors"), "182028742581742080")))  

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With the above code snippets, you have demonstrated how to perform basic CRUD operations using the Python driver for Fauna.  &lt;/p&gt;

&lt;p&gt;Learn more about the various functions in the Fauna Query Language (FQL) &lt;a href="https://docs.fauna.com/fauna/current/api/fql/functions"&gt;here&lt;/a&gt;.  &lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Content on cloud native transactional databases or data APIs in general is best consumed by backend engineers and devops engineers.  &lt;/p&gt;

&lt;p&gt;It is important for developers to be well acquainted with cloud native tools such as FaunaDB to not only allow them to build and design better applications, but to also help them stay relevant in the fast paced ever changing world of tech.  &lt;/p&gt;

&lt;p&gt;It is best advised to not stop at this guide. Build your knowledge base and further pursue concepts learnt in this guide. Majorly  cloud native data APIs and FaunaDB. &lt;br&gt;
This then implies that further reading is required   to increase your understanding and grasp of the subject matter.&lt;br&gt;&lt;br&gt;
Below are some related topics to pursue:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Develop a Flask or Django based app using FaunaDB as your data layer. You can further develop the sample app.
&lt;/li&gt;
&lt;li&gt;Fauna Query Language- Native to FaunaDB
&lt;/li&gt;
&lt;li&gt;Cloud native architectures and design
&lt;/li&gt;
&lt;li&gt;FaunaDB GraphQL layer for your apps and its pros and cons.
&lt;/li&gt;
&lt;li&gt;Trade off between NoSQL and SQL data structures for your data stores&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>fauna</category>
      <category>python</category>
      <category>database</category>
      <category>cloudnative</category>
    </item>
  </channel>
</rss>
